2017-10-11 10 views
2

필자는 비즈니스 서비스에서 데이터 소스 구현 (이 경우 이벤트 저장소)을 추상화하는 라이브러리 (event-source-lib라고도 함)를 제공합니다. 도서관 내에서 나는 지역 응용 프로그램을 통해 eventstore 데이터 소스를 주입하기 위해 JNDI 네임 스페이스 자원 조회 봐줘서 원하는 : 나는 별도의 데이터 소스를 사용하여 사용되는 JEE 컨테이너에 여러 별도의 microservices을 가지고 있기 때문입니다Jboss wildfly 로컬 JNDI 네임 스페이스의 항목을 바인딩하는 방법?

@Resource(lookup="java:app/jdbc/eventstore") 
Datasource eventstore; 

. 컨테이너가 각 마이크로 서비스에 대해 java : app/eventstore에 할당 할 데이터 소스를 결정하기를 원합니다.

JBoss wildfly standalone.xml의 명명 하위 시스템이 로컬 이식 가능한 JNDI 네임 스페이스를 지원하지 않는 것 같습니다. jboss, : global 및 :/만 지원합니다.

어떻게하면됩니까? 전역 리소스를 선언하고 로컬 범위가 지정된 이식 가능한 JNDI 네임 스페이스에 매핑하는 방법이 있습니까? AppName이 올바른 네임 스페이스에 있음을 알았지 만 거기에 물건을 추가하는 방법을 모릅니다.

jboss-app.xml 또는 jboss-web.xml이 답이 될 수 있다고 생각하지만 좋은 예를 찾을 수 없습니다. 내 서비스를 별도의 전쟁 파일로 배포하고 있습니다. 귀에 감겨 있지 않습니다.

+0

doc에 따르면이 작업은 불가능합니다. https://docs.jboss.org/author/display/WFLY10/JNDI+Reference –

+0

로컬 JNDI 리소스를 standalone.xml에 입력 할 수 없지만 로컬 리소스 및 웹.xml에서 조회를 수행 할 수 있습니다. –

답변

2

다행히도 우리는 문제를 해결할 수있었습니다.

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
     version="3.1"> 
    <resource-ref> 
     <description>DB Connection</description> 
     <res-ref-name>java:app/jdbc/eventstore</res-ref-name> 
     <res-type>javax.sql.DataSource</res-type> 
     <lookup-name>java:global/something/DS.eventstore</lookup-name> 
    </resource-ref> 
</web-app> 

참고 web.xml 파일이 있어야합니다 : 대답은 standalone.xml 배치 디스크립터에서 물리적 자원을 정의하는 데 사용되는 글로벌 휴대 네임 스페이스에 로컬 JNDI 휴대용 네임 스페이스 간의 매핑은 web.xml을 사용하는 것이 었습니다 src/main/webapp/WEB-INF/web.xml (maven을 사용하여 프로젝트를 빌드하는 경우) 아래에 배치됩니다.

그래서 우리의 경우에 우리는 자바로 이벤트 소스-lib 디렉토리에있는 자원을 정의 자바 : 응용 프로그램/JDBC가/eventstore, 그때 우리의 비즈니스 서비스에 우리가에서 자원을 참조하기위한 글로벌 휴대 네임 스페이스를 지정 글로벌 /something/DS.eventstore (web.xml을 통해).

서버 배포 설명자 명명 하위 시스템에서이 전역 JNDI 네임 스페이스를 실제 데이터 소스의 구성에 연결할 수 있습니다.