如何解决Web片段中的JNDI资源
我正在研究Web片段,以隔离整个生产过程中仅一部分所需的专门过程。我正在尝试定义特定于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。
我尝试将资源链接从主context.xml移至Web片段的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片段的web-fragment.xml甚至是Web片段的context.xml。两个实例都返回相同的错误。
虽然我可以忍受这个实例,但我知道我们将向Web片段中添加和/或迁移更多片段,而我确实希望将资源引用分离到其特定的jar。
编辑 我应该提到我正在从Eclipse内部运行tomcat时对所有这些进行测试。我认为这不会有所作为,但我想提一下
这有可能吗?
解决方法
我们已决定将应用程序容器化。因此,由于我们在生产过程中有多个位置,因此这将不再是问题。
通过将资源链接=Text(number,"#.##")
放置在单个位置的<ResourceLink global="localappserver" name="localappserver" type="javax.sql.DataSource" />
中,我们消除了将主应用程序的[TOMCAT_HOME]/conf/context.xml
弄乱的需求
这应该起作用,因为我们将每个位置的需求划分为各个Web片段项目。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。