我在Tomcat中有一个context.xml
:
<Resource name="datasource/sconfiguration" auth="Container" connectionString=...
我可以让我的对象充满:
MyConfiguration sc = (MyConfiguration) envCtx.lookup("datasource/sconfiguration");
现在我想在Glassfish 4.1中使用我的WAR ......它似乎不起作用:
javax.naming.NamingException: Lookup failed for 'datasource/sconfiguration' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterpr ....
为特定的应用服务器设置WAR似乎很奇怪。如何使此WAR对任何WAS都有效?似乎是Glassfish can use context.xml,但很多人说它不能。{/ p>
答案 0 :(得分:0)
管理内容不是标准WAR的一部分。说实话,它总是在应用程序服务器之间移植最难的部分。
在Tomcat中,您可以如您所见,在context.xml中定义JNDI数据源。我早就放弃了Glassfish,但我知道有一个相当完整的UI来定义数据源。其他应用程序服务器(如WildFly)同时具有UI和CLI来定义数据源之类的东西(而Glassfish也可能有这样的东西)。
你为什么这么问?因为允许每个应用程序服务器增加数据库连接池等区域。 Tomcat最近决定摆脱公共DBCP池,转而使用内部池。由于存在这些差异,每个应用程序服务器都定义了一些不同的方式来配置JDBC连接和数据源。
要对此进行管理,您需要为要定位的每个应用程序服务器设置脚本/预配置的配置文件。最终用户需要使用适合其环境的内容。