기본 JNDI(Java™ Naming and Directory Interface) 네임스페이스에서
오브젝트를 사용 가능하게 만들 수 있습니다. 이를 수행하려면 해당 오브젝트를
osgi.jndi.service.name 서비스 특성과 함께 OSGi 서비스 레지스트리에 등록해야 합니다. osgi.jndi.service.name의
값은 필수 JNDI 이름입니다. 마찬가지로, 기본 JNDI 네임스페이스에서
오브젝트를 찾으려면 osgi.jndi.service.name 서비스 특성을 가진
OSGi 서비스 레지스트리를 검색할 수 있습니다. osgi.jndi.service.name의 값은 JNDI 이름입니다.
이 태스크 정보
Context.bind 또는
Context.lookup의 명시적인 호출과 비교할 때
서비스 레지스트리를 사용하면 다음과 같은 이점이 있습니다.
- jndi-1.0이 사용되는 경우 사용자의 기능이 올바르게 작동하지만
사용자의 기능에는 JNDI에 대한 명시적인 종속 항목이 필요하지 않습니다.
- 번들이 중지될 때 OSGi 프레임워크가 자동으로 서비스를 등록 취소하므로
사용자의 기능을 제거할 때 오브젝트를 명시적으로 바인드 해제할 필요가 없습니다.
- Reference와 ObjectFactory를 사용하지 않고
선언 서비스 또는 ServiceFactory를 사용하여 쉽게 지연 초기화를 구현할 수 있습니다.
JNDI에 대한
자세한 정보는 이름 지정을 참조하십시오.
프로시저
- osgi.jndi.service.name 특성과 JNDI 이름을 사용하여 서비스를 등록하십시오. 서비스 등록에 대한 자세한 정보는 OSGi 서비스 등록의 내용을 참조하십시오.
- 서버 구성에서 JNDI 이름을 지정할 수 있도록 metatype.xml을 업데이트하십시오. 사용자가 사용자 서비스에 JNDI 이름을 지정할 수 있도록 허용하려면 Liberty 프로파일 런타임에 다른 기능과의 일관성을 위해 jndiName
id를 사용해야 합니다. 예:
<AD id="jndiName" name="JNDI name" description="JNDI name for a widget." type="String" ibm:unique="jndiName"/>
내부 속성을 사용하여
jndiName 속성 값이 있는 osgi.jndi.service.name 서비스 특성을 자동으로 설정할 수 있습니다. 예:
<AD id="osgi.jndi.service.name" name="internal" description="internal" type="String" default="${jndiName}"/>
OSGi 메타 유형에 대한
자세한 정보는 고급 구성의 내용을 참조하십시오.
Java EE 자원 참조 정보가 필요한 경우 ResourceFactory 인터페이스를 구현하십시오. 사용자의 서비스에 res-auth와 같은 Java EE 자원 참조 정보가 필요한 경우,
ResourceFactory를 jndiName 및 creates.objectClass 특성을 가진 OSGi 서비스 레지스트리에 등록할 수 있습니다.
ResourceFactory 서비스는 osgi.jndi.service.name 특성으로 자동으로 재등록됩니다. 예:
import com.ibm.wsspi.resource.ResourceFactory;
public class WidgetResourceFactory implements ResourceFactory { ... }
Properties properties = new Properties();
properties.put(ResourceFactory.JNDI_NAME, "widget/abc");
properties.put(ResourceFactory.CREATES_OBJECT_CLASS, Widget.class.getName());
bundleContext.registerService(ResourceFactory.class, new WidgetResourceFactory(), properties);
또는 선언 서비스와 메타 유형을 사용하여 서비스를 자동으로 등록할 수도 있습니다. 이 경우,
creates.objectClass 특성을 선언 서비스 특성으로 지정할 수 있습니다. jndiName 특성은
2단계에서
metatype.xml 파일에 <AD
id="jndiName"> 요소가 있는 사용자 구성으로부터 자동으로 설정되므로 사용자가 지정할 필요가 없으며,
ResourceFactory 서비스가 자동으로 재등록되므로
metatype.xml 파일의 <AD id="osgi.jndi.service.name> 요소가 필요하지 않습니다.
- osgi.jndi.service.name 특성과 JNDI 이름을 사용하여 오브젝트를 찾으십시오. 예:
bundleContext.getServiceReference(DataSource.class, "(osgi.jndi.service.name=jdbc/myds)");
또는 jndiName과 creates.objectClass 특성을 사용하여
ResourceFactory를 찾을 수도 있습니다.
- 자원 ID를 사용하여 server.xml에 자원이 지정될 수 있도록
metatype.xml을 업데이트하십시오. 그러면 자원에 jndiName이 있는지
여부에 관계 없이 자원에 액세스할 수 있습니다. 예를 들면 다음과 같습니다.
<AD id="dataSourceRef" type="String" ibm:type="pid" ibm:reference="com.ibm.ws.jdbc.dataSource" cardinality="1" name="%dataSourceRef" description="%dataSourceRef.desc"/>
선언 서비스를
사용 중인 경우 내부 속성을 사용하여 필터가 있는 .target 서비스 특성을 설정할 수 있습니다. 예를 들어,
사용자의 선언 서비스 컴포넌트에 dataSource라는 참조가 있는 경우,
다음 속성 정의를 사용하여 dataSourceRef 구성 속성에 의해 참조되는 dataSource가
사용되는지 확인할 수 있습니다.
<AD id="dataSource.target" type="String" default="(service.pid=${dataSourceRef})" ibm:final="true" name="internal" description="internal"/>