jpa*_*ppe 6 java eclipse tomcat jndi
我正在使用Eclipse中的Java Web应用程序并部署到由Eclipse运行的Tomcat实例.我正在尝试让这个应用程序通过JNDI Resource元素与另一台主机上的数据库通信.
应用程序中包含的context.xml文件尝试连接到在localhost上运行的MySQL服务器,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Environment name="log4j.configuration"
value="/path/to/installed/log4j.properties"
type="java.lang.String" />
<Resource name="jdbc/configDB" auth="Container" type="javax.sql.DataSource"
username="dbuser" password="dbpassword" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/dbname" maxActive="8"
validationQuery="SELECT 1" testOnBorrow="true" />
<Environment name="mykey" value="installed" type="java.lang.String" />
</Context>
Run Code Online (Sandbox Code Playgroud)
当我在实际主机上安装它时,此配置有效.也就是说,它正确读取环境值并连接到数据库.
我也可以在单独的主机上安装它并编辑/etc/tomcat6/conf/Catalina/localhost/myaplication.xml以更改JDBC URL,如下所示:
...
<Resource name="jdbc/configDB" auth="Container" type="javax.sql.DataSource"
username="dbuser" password="dbpassword" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://otherhost:3306/dbname" maxActive="8"
validationQuery="SELECT 1" testOnBorrow="true" />
...
Run Code Online (Sandbox Code Playgroud)
此配置也有效.换句话说,我非常确信我的应用程序正确使用了JNDI.
所以,现在我想在Eclipse的桌面上将它部署到Tomcat.我已经以标准方式将项目添加到Tomcat,并且我已经编辑了服务器的context.xml文件(即Eclipse在"Servers"项目中的Tomcat服务器下显示的文件),如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Environment name="log4j.configuration"
value=C:\workspace\myapplication\src\main\resources\conf\log_to_tomcat_console_log4j.properties"
type="java.lang.String" />
<Resource name="jdbc/configDB" auth="Container" type="javax.sql.DataSource"
username="dbuser" password="dbpassword" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://otherhost:3306/dbname" maxActive="8"
validationQuery="SELECT 1" testOnBorrow="true" />
<Environment name="mykey" value="desktop" type="java.lang.String" />
</Context>
Run Code Online (Sandbox Code Playgroud)
当我在Eclipse中重新启动Tomcat时,日志显示我正确读取了Log4J文件的路径(因为它开始记录到Tomcat控制台),我甚至看到它吐出了正确的"mykey"值.但是,初始化在尝试从中读取时失败configDB.
起初,我认为这是一个连接问题,但在裁定之后,我在调试器中重新启动了Tomcat并检查了从JNDI读取的DataSource; 它的URL指向localhost,这意味着它正在使用应用程序的context.xml文件中的那个,而不是Tomcat的!
我已经尝试了几种方法来实现这一点,包括将这些信息放在Tomcat的server.xml文件中,但似乎没有任何效果.或者,更准确地说,它有点类似,因为它正在读取环境值而不是资源.
我在这做错了什么?如何让Eclipse的Tomcat服务器覆盖此资源?
小智 3
这里的基本问题是,您在eclipse中编辑的内容与tomcat目录中的context.xmlmain相对应。然后应用程序上下文文件中的首选项优先。正如您已经在 tomcat 的正常部署生命周期中描述的那样,这完全没问题,因为您只需编辑应用程序设置。context.xmlconf
您可以对 eclipse 创建的上下文文件(位于 的某个位置.metadata/.plugins/org.eclipse.wst.server.core/tmp0/conf/Catalina/localhost)执行相同的操作,但一旦您更改原始上下文文件 ( META-INF/context.xml) 中的某些内容,它就会被覆盖。因此,实际上您需要在那里进行更改,但这通常是没有问题的,因为必须在没有自定义更改的情况下部署此文件。
META-INF/context.xml但这里有一个解决方法:您可以通过滥用部署程序集来使 Eclipse 使用另一个。META-INF在其他地方创建一个新目录,并context.xml在其中放置一个包含您的设置的文件。然后在 Eclipse 项目的项目属性中Deployment Assembly添加一个从新项目path/to/META-INF到META-INF.
然后 Eclipse 将context.xml用您的自定义覆盖原来的设置,并且 tomcat 应该采用您的设置。
| 归档时间: |
|
| 查看次数: |
7491 次 |
| 最近记录: |