我在Eclipse 4.6.1中使用Tomcat 8.5.6。我有我的web-app项目/上下文foo
,它有一个bar
的JAX-RS(使用RESTEasy 3.1.0.CR3)端点,所以我可以在Eclipse中启动Tomcat并访问:< / p>
http://localhost:8080/foo/bar
我有一个名为foobar
的变量,我希望使用JNDI在我的JAX-RS实现中访问:
final String foobar = (String) new InitialContext().lookup("java:comp/env/foobar");
我计划使用Tomcat自动部署在生产中部署生成的WAR。我想在WAR外部为Tomcat配置foobar
变量。我该怎么做才能在Eclipse中测试它?
经过大量阅读后,我发现了我认为是Eclipse的$CATALINA_HOME
:…\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\
。所以我在foo
为…\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\conf\Catalina\localhost\foo.xml
创建了一个上下文文件,以对应我的项目/上下文,并在其中加入以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Environment name="foobar" type="java.lang.String" value="123"/>
</Context>
是的,我知道每当我重建时Eclipse都会删除这个目录。但是在构建之后,我保存到文件至少想看看它是否有效。它没有。我收到一个错误:
javax.naming.NameNotFoundException: Name [foobar] is not bound in this Context. Unable to find [foobar].
我想至少让它工作,所以我可以知道如何在生产中执行此操作,稍后担心Eclipse中的上下文文件删除事项。那我做错了什么?为什么Eclipse中的Tomcat不能找到这个JNDI变量?
注意:我没有使用web.xml
文件而且不想这样做;此外,此变量应在生产部署中的外部中定义。
更新:好消息是(在Windows 10 Professional Anniversary Edition 64位上)使用相同的Tomcat但在独立模式下,我将相同的foobar.xml
文件放在独立的Tomcat conf\Catalina\localhost\foo.xml
中{{ 1}},我的JAX-RS应用程序就好了。那么如何在Eclipse中的Tomcat中定义一个JNDI变量来进行测试呢?
答案 0 :(得分:3)
看来为了让Eclipse + Tomcat识别每个模块的上下文文件,你必须进入服务器配置(双击服务器)并打开发布模块上下文来分开XML文件。这样Tomcat将使用您创建的特定上下文XML文件。否则,它显然会将它们放在conf/server.xml
中,并忽略您创建的特定于上下文的文件。
每次进行重建时,Eclipse仍然会重新生成此文件,从而破坏您放置的任何JNDI变量。我试图让https://stackoverflow.com/a/22380248/421049中的解决方法起作用,但还没有成功。谁有更好的想法?
至少我现在能够重现生产环境 - 尽管是暂时的,直到下一次重建。
答案 1 :(得分:0)
您在https://stackoverflow.com/a/22380248/1794485上找到Markus回答的链接让我能够正常工作,或者至少在他的解决方法中有所描述。但要解决的剩下问题是订购。
正如他所说,您可以通过在其他地方拥有META-INF/context.xml
的本地副本,并将此文件夹添加到Eclipse项目的项目属性中的Deployment Assembly
来解决此问题。
但最初这并不适合我。看起来,虽然属性中的Deployment Assembly
显示为按名称排序,但事实上它具有与任何其他路径一样的顺序。然后,当我删除src/main/webapp
条目(因此包含正常META-INF/context.xml
的条目)并将其添加回来时,这有效地将其移动到了啄食顺序。 Eclipse中的下一个Tomcat部署和启动最终将我META-INF/context.xml
的首选副本放在.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\myapp\META-INF
如果对Deployment Assembly
路径的真实顺序有疑问,请查看文件系统上的Eclipse项目 - .settings\org.eclipse.wst.common.component
。