我正在Eclipse中研究Java Web应用程序,并将其部署到Eclipse运行的Tomcat实例中。我正在尝试使该应用程序通过JNDI
Resource
元素与另一台主机上的数据库进行通信。
应用程序中包含的context.xml文件尝试连接到在本地主机上运行的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>
当我将其安装在实际主机上时,此配置有效。即,它可以正确读取环境值并连接到数据库。
我还可以将其安装在单独的主机上,并进行编辑/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" />
...
此配置也可以。换句话说,我对我的应用程序正确使用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>
然后,当我在Eclipse中重新启动Tomcat时,日志显示我已正确读取Log4J文件的路径(因为它开始记录到Tomcat控制台),甚至看到它吐出了正确的“
mykey”值。但是,初始化尝试从中读取时会失败configDB
。
起初,我认为这是一个连接问题,但在排除了此问题之后,我在调试器中重新启动了Tomcat并检查了从JNDI读取的DataSource。它的URL指向localhost,这意味着它使用的是应用程序的context.xml文件中的一个,而不是Tomcat的!
我尝试了几种方法来实现此目的,包括将该信息放入Tomcat的server.xml文件中,但似乎没有任何效果。或者,更准确地说,它是一种工作,因为它正在读取环境值,而不是资源。
我在这里做错了什么?如何获取Eclipse的Tomcat服务器来覆盖此资源?
这里的基本问题是,context.xml
您在eclipse中编辑context.xml
的内容conf
与tomcat目录中的main相对应。然后,应用程序上下文文件中的首选项优先。正如您在tomcat的正常部署生命周期中已经描述的那样,这非常好,因为您只需编辑应用程序设置。
您可以对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
添加一个从new path/to/META-INF
到的附加映射META-INF
。
然后eclipse将context.xml
用您的自定义脚本覆盖原始文档,tomcat应该接受您的设置。
有时我会看到这样的警告: 如果我重写或不重写布局资源会发生什么?
我正在尝试在外部tomcat上运行camel应用程序。有2个应用程序。属性文件存在于我的项目中,一个在src/main/resources下,另一个在src/test/resources下。当我使用maven install命令创建war文件时,它使用应用程序。来自src/main/resources的属性文件(这是必需的),但当我在eclipse中使用tomcat启动应用程序时,它正在使用app
我刚刚在eclipse中安装了Eclemma,并创建了一个JUnit测试。我运行了测试,它成功了,绿色和红色的横幅显示在我的程序中,但我看不到任何“覆盖率”视图,如所示的指令(也不在窗口显示视图中)。 我如何解决这个问题?我必须重写我的JUnit测试还是重新安装EclEmma? 谢谢
我正在寻找一种方法来覆盖GuiceServletContextListener中与guice绑定的jersey资源。我的代码,我正在努力工作: 但不幸的是,这不起作用,虽然我不能像接口一样将jersey资源绑定到实现,但只有work。但是这样的绑定是不可能覆盖的。如果我试图用覆盖,我会收到一个错误而@Path应该是唯一的。那么我的用例有什么解决方案吗?
我不认为这篇文章我如何覆盖laravel资源路由默认方法?解决了我的问题。 正常的资源路由是“索引”显示所有项目。我想做的是让“索引”显示一个特定ID的所有相关项目。 因此,当我从列表中选择一个教室时,我需要调用的索引操作,以显示该特定教室的所有人员,就像它的索引函数一样。 所以我替换了默认的资源路由 与 所以在我的控制器中,我有这样的内容: 在我的教室里,在一个特定的教室id上,我有这个 就我所
我正在尝试在要部署在Tomcat 7中的Web应用程序中设置JNDI查找。我在文件中指定了以下属性: java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory,java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces,java.naming.prov
在这个特定的示例中,我扩展了
问题内容: 我有一个现有的Java / JSF网站,屏幕上的所有文本都是通过 来自属性文件的,该文本将从applicaltion.properties中提取。 对于这些的运行时可配置子集,我想从其他位置(通过Web服务进行CMS)中提取字符串。看一下ResourceBundle类,大概有一个基础设施,可以委派给父ResourceBundle。 我想要这样的东西 我已经尝试过了,parent是空的,