Jboss wildfly 如何绑定本地JNDI 命名空间中的条目?
Jboss wildfly how to bind entries in local JNDI namespaces?
我提供了一个库(我们称之为 event-source-lib),它从我的业务服务中抽象出数据源(在本例中为 eventstore)的实现。在库中,我想通过 local 应用程序范围的 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 可能是答案,但我找不到很好的例子。我将我的服务部署为单独的 war 文件,它们没有被包裹在耳朵里。
很高兴地说我们已经设法解决了这个问题。答案是使用 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 构建项目)。
所以在我们的例子中我们将event-source-lib中的资源定义为java:app/jdbc/eventstore,然后在我们的业务服务中我们指定一个通过 web.xml.
从 java:global/something/DS.eventstore 查找资源的全局可移植命名空间
在服务器部署描述符命名子系统中,我们可以 link 这个全局 JNDI 命名空间到我们的物理数据源的配置。
我提供了一个库(我们称之为 event-source-lib),它从我的业务服务中抽象出数据源(在本例中为 eventstore)的实现。在库中,我想通过 local 应用程序范围的 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 可能是答案,但我找不到很好的例子。我将我的服务部署为单独的 war 文件,它们没有被包裹在耳朵里。
很高兴地说我们已经设法解决了这个问题。答案是使用 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 构建项目)。
所以在我们的例子中我们将event-source-lib中的资源定义为java:app/jdbc/eventstore,然后在我们的业务服务中我们指定一个通过 web.xml.
从 java:global/something/DS.eventstore 查找资源的全局可移植命名空间在服务器部署描述符命名子系统中,我们可以 link 这个全局 JNDI 命名空间到我们的物理数据源的配置。