需要两个共享数据库的服务 Tomcat 9
Need two services that share database in Tomcat 9
我想 运行 在两个端口 (8080,8181) 上使用不同代码库但共享相同数据库资源的两个 tomcat 服务。当我这样做时,我得到“javax.naming.NameNotFoundException:名称 [comp/env/jdbc/mydb] 未绑定在此上下文中。无法找到 [comp]。”当它尝试初始化第二个服务时。
我的服务在 server.xml 中看起来像这样:
...
<GlobalNamingResources>
<Resource auth="Container" name="jdbc/mydb" url="jdbc:db2://myserver:50000/mydb" username="xxx" password="xxx" .... />
</GlobalNamingResources>
...
<Service name="Catalina8080">
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
....
<Host name="localhost" appBase="webapps8080" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" .... />
</Host>
</Engine>
</Service>
<Service name="Catalina8181">
<Connector port="8181" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8444" />
<Engine name="Catalina" defaultHost="localhost">
....
<Host name="localhost" appBase="webapps8181" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" .... />
</Host>
</Engine>
</Service>
我的服务器级上下文文件如下所示:
<Context>
...
<ResourceLink name="jdbc/mydb" global="jdbc/mydb" type="javax.sql.DataSource" />
</Context>
我已经尝试在应用程序级上下文文件中添加和删除资源链接,但结果似乎没有任何改变。非常感谢任何想法。
您应该在第二项服务中更改 <Engine>
的名称:引擎名称的每个组合只能有一个命名上下文、主机名和上下文名称。
在您的情况下,组合(Catalina
、localhost
、您的应用程序名称)可能出现两次,因此您应该能够找到这样的条目:
SEVERE [main] naming.namingContextCreationFailed
在日志中,JNDI 在第二个上下文中不起作用。
我想 运行 在两个端口 (8080,8181) 上使用不同代码库但共享相同数据库资源的两个 tomcat 服务。当我这样做时,我得到“javax.naming.NameNotFoundException:名称 [comp/env/jdbc/mydb] 未绑定在此上下文中。无法找到 [comp]。”当它尝试初始化第二个服务时。
我的服务在 server.xml 中看起来像这样:
...
<GlobalNamingResources>
<Resource auth="Container" name="jdbc/mydb" url="jdbc:db2://myserver:50000/mydb" username="xxx" password="xxx" .... />
</GlobalNamingResources>
...
<Service name="Catalina8080">
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
....
<Host name="localhost" appBase="webapps8080" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" .... />
</Host>
</Engine>
</Service>
<Service name="Catalina8181">
<Connector port="8181" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8444" />
<Engine name="Catalina" defaultHost="localhost">
....
<Host name="localhost" appBase="webapps8181" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" .... />
</Host>
</Engine>
</Service>
我的服务器级上下文文件如下所示:
<Context>
...
<ResourceLink name="jdbc/mydb" global="jdbc/mydb" type="javax.sql.DataSource" />
</Context>
我已经尝试在应用程序级上下文文件中添加和删除资源链接,但结果似乎没有任何改变。非常感谢任何想法。
您应该在第二项服务中更改 <Engine>
的名称:引擎名称的每个组合只能有一个命名上下文、主机名和上下文名称。
在您的情况下,组合(Catalina
、localhost
、您的应用程序名称)可能出现两次,因此您应该能够找到这样的条目:
SEVERE [main] naming.namingContextCreationFailed
在日志中,JNDI 在第二个上下文中不起作用。