我有两个需要使用单例共享信息的tomcat Web应用程序。我已经通过将jared类放在tomcat公共目录中来使它工作。然后每个webapp获得单例的相同副本。我想做的是在eclipse中集成这种行为。我希望公共类是一个单独的项目,每次我在eclipse中启动tomcat服务器时都会将其合并到tomcat公共类加载器中。任何人都知道如何配置eclipse来做到这一点?
答案 0 :(得分:1)
可能是extend the tomcat class loader的一种可能性,以便该类加载器在other directories than WEB-INF/lib
中搜索,这可以通过:
扩展org.apache.catalina.loader.WebappClassLoader
并覆盖findClassInternal
方法。
配置Tomcat以使用扩展类加载器
这是在Tomcat conf/Catalina/hostname
路径下的相应webapp配置文件中完成的,其中包含以下元素:
...
然后在eclipse中,您可以在“构建路径上的必需项目”上设置您的公共项目,这使它成为类路径的一部分。
这意味着你的扩展类加载器必须能够寻找其他的classe:
我自己没有经过测试,但可能会让你在这个问题上发挥领导作用。
noselasd在评论中提出了一个更简单的解决方案,利用了Tomcat的GlobalNamingResources Component。
在Eclipse中创建新的Tomcat服务器时,New Server向导假定影响此新服务器将使用的Tomcat安装的当前行为是不安全的。
WTP能够通过使用Tomcat从单个安装运行多个服务器实例的能力来避免影响已安装的Tomcat的行为。因此,您创建的每个新Tomcat服务器的默认配置将是与向导中选择的Tomcat运行时关联的Tomcat安装的新服务器实例。
如果您希望Eclipse中的新Tomcat服务器运行与Tomcat安装中的默认批处理文件相同的实例,那么当Eclipse中的Tomcat服务器没有按预期运行时,您可能会感到惊讶。可以更改Tomcat服务器配置,使其运行与Tomcat安装相同的实例。
您可以在此处找到如何modify the server.xml in WTP。
答案 1 :(得分:1)
我设法让它运转起来。这是我做的:
common
项目。first
和second
的网络应用程序,它们应共享common
项目。创建Web应用程序时,将使用tomcat配置创建Servers
项目。
catalina.properties
并添加行shared.loader=/path-to-workspace/common/bin
。这非常适合开发。每次创建新构建时,所有内容都是同步的。对于部署您需要将common
项目转换为common.jar
并将其放入${catalina.home}/lib
。