Web 片段中的 JNDI 资源
JNDI Resources in web-fragment
我正在研究一个网络片段,以隔离我们整个生产过程的一部分所需的专门过程。我正在尝试定义特定于 Web 片段的 JNDI 资源,但我将 运行 保留在砖墙中。
申请是 运行 在 Tomcat 9.
我正在使用 Web-Fragment 规范 4.0.
现在的工作模型是我在 server.xml 中将数据库连接定义为全局资源:
<Resource name="localappserver"
auth="Container"
driverClassName="oracle.jdbc.OracleDriver"
factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
initialSize="5"
logAbandoned="true"
minEvictableIdleTimeMillis="30000"
maxTotal="15"
maxIdle="3"
maxWaitMillis="1000"
removeAbandonedOnBorrow="true"
removeAbandonedOnMaintenance="true"
removeAbandonedTimeout="15"
testOnBorrow="true"
testWhileIdle="true"
timeBetweenEvictionRunsMillis="300000"
type="javax.sql.DataSource"
username="${jdbc.user}"
password="${jdbc.password}"
url="${jdbc.url}" />
并在较大的 Web 应用程序中被引用 context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="..." path="/..." reloadable="true" swallowOutput="true">
...
<ResourceLink global="localappserver" name="localappserver" type="javax.sql.DataSource" />
...
</Context>
这按预期工作,我可以连接到资源并检索数据。但是,我不想用不属于主应用程序的项目污染主应用程序的 context.cml。
我已尝试将资源 link 从主 context.xml 移动到网络片段的 context.xml,但这会导致以下错误:
INFO: javax.naming.NameNotFoundException: Name [localappserver] is not bound in this Context. Unable to find [localappserver].
at org.apache.naming.NamingContext.lookup(NamingContext.java:833)
at org.apache.naming.NamingContext.lookup(NamingContext.java:160)
at org.apache.naming.NamingContext.lookup(NamingContext.java:843)
at org.apache.naming.NamingContext.lookup(NamingContext.java:160)
at org.apache.naming.NamingContext.lookup(NamingContext.java:843)
at org.apache.naming.NamingContext.lookup(NamingContext.java:174)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:163)
at java.naming/javax.naming.InitialContext.lookup(InitialContext.java:409)
at com.obj.Data.Connect(Data.java:141)
我已将资源定义从 server.xml 移动到网络片段的 web-fragment.xml 甚至是网络片段的 context.xml。两个实例 return 相同的错误。
虽然我可以接受这个实例,但我知道我们将添加 and/or 将更多片段迁移到 web-fragments,我真的想将资源引用分离到它们的特定 jar。
EDIT
I should mention I am testing all of this while running tomcat from inside Eclipse. I don't think that will make a difference, but I want to mention it
这可能吗?
我们决定将应用程序容器化。因此,由于我们在生产过程中有多个位置,因此这将成为 non-issue.
通过将资源 link <ResourceLink global="localappserver" name="localappserver" type="javax.sql.DataSource" />
放置在单独位置的 [TOMCAT_HOME]/conf/context.xml
中,我们消除了使主应用程序的 /META-INF/context.xml
混乱的需要
这应该可行,因为我们将每个位置的要求划分为单独的 web-fragment 个项目。
我正在研究一个网络片段,以隔离我们整个生产过程的一部分所需的专门过程。我正在尝试定义特定于 Web 片段的 JNDI 资源,但我将 运行 保留在砖墙中。
申请是 运行 在 Tomcat 9. 我正在使用 Web-Fragment 规范 4.0.
现在的工作模型是我在 server.xml 中将数据库连接定义为全局资源:
<Resource name="localappserver"
auth="Container"
driverClassName="oracle.jdbc.OracleDriver"
factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
initialSize="5"
logAbandoned="true"
minEvictableIdleTimeMillis="30000"
maxTotal="15"
maxIdle="3"
maxWaitMillis="1000"
removeAbandonedOnBorrow="true"
removeAbandonedOnMaintenance="true"
removeAbandonedTimeout="15"
testOnBorrow="true"
testWhileIdle="true"
timeBetweenEvictionRunsMillis="300000"
type="javax.sql.DataSource"
username="${jdbc.user}"
password="${jdbc.password}"
url="${jdbc.url}" />
并在较大的 Web 应用程序中被引用 context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="..." path="/..." reloadable="true" swallowOutput="true">
...
<ResourceLink global="localappserver" name="localappserver" type="javax.sql.DataSource" />
...
</Context>
这按预期工作,我可以连接到资源并检索数据。但是,我不想用不属于主应用程序的项目污染主应用程序的 context.cml。
我已尝试将资源 link 从主 context.xml 移动到网络片段的 context.xml,但这会导致以下错误:
INFO: javax.naming.NameNotFoundException: Name [localappserver] is not bound in this Context. Unable to find [localappserver].
at org.apache.naming.NamingContext.lookup(NamingContext.java:833)
at org.apache.naming.NamingContext.lookup(NamingContext.java:160)
at org.apache.naming.NamingContext.lookup(NamingContext.java:843)
at org.apache.naming.NamingContext.lookup(NamingContext.java:160)
at org.apache.naming.NamingContext.lookup(NamingContext.java:843)
at org.apache.naming.NamingContext.lookup(NamingContext.java:174)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:163)
at java.naming/javax.naming.InitialContext.lookup(InitialContext.java:409)
at com.obj.Data.Connect(Data.java:141)
我已将资源定义从 server.xml 移动到网络片段的 web-fragment.xml 甚至是网络片段的 context.xml。两个实例 return 相同的错误。
虽然我可以接受这个实例,但我知道我们将添加 and/or 将更多片段迁移到 web-fragments,我真的想将资源引用分离到它们的特定 jar。
EDIT I should mention I am testing all of this while running tomcat from inside Eclipse. I don't think that will make a difference, but I want to mention it
这可能吗?
我们决定将应用程序容器化。因此,由于我们在生产过程中有多个位置,因此这将成为 non-issue.
通过将资源 link <ResourceLink global="localappserver" name="localappserver" type="javax.sql.DataSource" />
放置在单独位置的 [TOMCAT_HOME]/conf/context.xml
中,我们消除了使主应用程序的 /META-INF/context.xml
这应该可行,因为我们将每个位置的要求划分为单独的 web-fragment 个项目。