2017-10-11 60 views
2

我提供了一个库(可以称之为event-source-lib),它从我的业务服务中抽象出一个数据源(在本例中是一个事件库)的实现。在图书馆我想通过一个本地程序截获的eventstore数据源作用域确定为JNDI名称空间资源查找:Jboss wildfly如何绑定本地JNDI命名空间中的条目?

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

这是因为我在其中使用单独的数据源使用JEE容器许多单独的微服务。我希望容器确定为每个微服务分配给java:app/eventstore的数据源。

JBoss wildfly standalone.xml中的命名子系统似乎不支持本地可移植的JNDI命名空间,它只支持:jboss,:global和:/。

我该如何做到这一点?有没有办法声明全局资源并映射到本地有作用域的可移植JNDI命名空间?我注意到AppName位于正确的命名空间中,但我不知道如何在其中添加内容。

我怀疑jboss-app.xml或jboss-web.xml可能是答案,但我找不到一个好例子。我将我的服务部署为单独的战争文件,它们不会被包装在耳边。

+0

根据文档,这是不可能的https://docs.jboss.org/author/display/WFLY10/JNDI+Reference –

+0

无法在standalone.xml中输入本地JNDI资源,但本地资源和查找可以在web.xml中完成 –

回答

2

很高兴说我们已经设法解决了这个问题。答案是使用在web.xml到本地JNDI便携式命名空间之间的映射应用于standalone.xml部署描述符来定义物理资源的全球便携式命名空间:

<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中需要有置于src/main/webapp/WEB-INF/web.xml(如果您使用maven构建您的项目)。

所以在我们的例子中,我们定义了事件源-lib的资源作为的java:应用程序/ JDBC/eventstore,然后在我们的业务服务,我们指定一个全球性的便携命名空间来从查找资源:的java:全球/something/DS.eventstore通过web.xml。

在服务器部署描述符命名子系统中,我们可以将这个全局JNDI命名空间连接到我们物理数据源的配置。