Liberty에서
jndiReferenceEntry 요소를 사용하여 서버 구성 파일에서 기본 JNDI(Java™ Naming and Directory Interface) 네임스페이스로 동적 값에 대한 참조를 바인드할 수 있습니다.
이 태스크 정보
기본 JNDI 네임스페이스는 애플리케이션이 요구하는 기타 오브젝트에 대한 바인딩을 제공할 수 있도록 Liberty에서 사용 가능합니다. 서버에서 사용으로 설정된 기능을 기반으로
사전 정의된 오브젝트 세트를 기본 JNDI 네임스페이스로 바인드할 수 있습니다. 또한 리턴하는 값을 동적으로 결정하는
오브젝트 팩토리에 대한 참조를 바인드할 수 있습니다. 또한 이 오브젝트 팩토리를 사용하여 사용자 정의 오브젝트 유형을
애플리케이션에 리턴할 수도 있습니다.
JNDI 이름 지정에 대한 자세한 정보는 이름 지정의
내용을 참조하십시오.
프로시저
- jndi-1.0
Liberty 기능을
server.xml 파일에 추가하십시오.
<featureManager>
<feature>jndi-1.0</feature>
</featureManager>
- 프로그래밍 방식으로 정의된 값을 리턴하는 ObjectFactory 클래스를 작성하십시오.
import javax.naming.spi.ObjectFactory;
public class MyObjectFactory implements ObjectFactory {
@Override
public Object getObjectInstance(Object o, Name n, Context c, Hashtable<?, ?> envmt) throws Exception {
Properties p = new Properties();
p.put("abc", 123);
return p;
}
}
- server.xml 파일의 library 요소에 ObjectFactory를 포함시키십시오.
<library id="objectFactoryLib">
<fileset dir="${server.config.dir}/lib" includes="factory.jar"/>
</library>
- server.xml 파일의 jndiObjectFactory 요소에 팩토리를 선언하고
이전에 선언한 라이브러리를 참조하십시오.
<jndiObjectFactory id="objectFactory" libraryRef="objectFactoryLib"
className="com.ibm.example.factory.MyObjectFactory"/>
또한 팩토리가 리턴하는 오브젝트의 유형을 선언할 수 있습니다. 유형은 javax.naming.Context.list() 메소드가 리턴합니다.
<jndiObjectFactory id="objectFactory" libraryRef="objectFactoryLib"
className="com.ibm.example.factory.MyObjectFactory"
objectClassName="java.util.Properties"/>
- server.xml 파일의 jndiReferenceEntry 요소에 항목을 선언하고
이전에 선언한 팩토리를 참조하십시오.
<jndiReferenceEntry id="refEntry" jndiName="ref/entry" factoryRef="objectFactory"/>
- server.xml 파일의 jndiReferenceEntry 요소에 대해 더 많은 특성을 선언하려면 다음을 수행하십시오.
<jndiReferenceEntry id="refEntry" jndiName="ref/entry" factoryRef="objectFactory">
<properties abc="123"/>
</jndiReferenceEntry>
이러한 추가 특성은 팩토리로 전달된 javax.naming.Reference에서
javax.naming.StringRefAddr로 표시됩니다.
import javax.naming.spi.ObjectFactory;
public class MyObjectFactory implements ObjectFactory {
@Override
public Object getObjectInstance(Object o, Name n, Context c, Hashtable<?, ?> envmt) throws Exception {
Properties p = new Properties();
Reference ref = (Reference) o;
RefAddr refAddr = ref.get("abc");
p.put("abc", refAddr == null ? 123 : refAddr.getContent());
return p;
}
}
- 자원 환경 참조를 사용하여 애플리케이션에 결과 오브젝트를 삽입할 수 있습니다.
@Resource(name="ref/entry")
private Properties properties;