【发布时间】:2012-04-01 00:04:32
【问题描述】:
假设我有两个 Web 应用程序要部署在 Tomcat 6 中,包装为 A.war 和 B.war。有没有办法强制 Tomcat 在重新启动时:
- 在
A之前加载B?或 - 在其他所有内容之后加载
A?或 - 使
A只有在B被加载后才可加载——也就是说,使B成为A的依赖?
这些是问题。下面是一个可能过于复杂但也非常有用的背景。
背景
我正在尝试在 Liferay 中部署一些 portlet。这些 portlet 是由不太了解 Liferay 工作原理的人编写的遗留代码,他们做出了“惊人的”决定,例如将 Liferay Service Builder 实体表映射到新类。实际上,这并不过分,但了解 Liferay 的人可能会更好地理解我的观点。
这些 portlet 由 Spring 接合并由 Hibernate 映射到数据库。为了避免编辑 context.xml 的烦人要求(这很烦人、容易出错、容易忘记、使持久层变慢等),我将 Liferay 数据源作为新 bean 提供...
<bean id="liferayDataSource"
class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
<property name="targetDataSource">
<bean
class="com.liferay.portal.kernel.util.InfrastructureUtil"
factory-method="getDataSource" />
</property>
</bean>
...并将这个新 bean 用作实体管理器工厂的数据源:
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="liferayDataSource"/>
<property name="persistenceUnitName" value="liferay-db" />
</bean>
如果我让 Liferay 运行并且我部署了我的 portlet,它运行没有问题,因为 Liferay 资源已经可用。问题是,当我重新启动 Liferay 时,这些 portlet 会在 Liferay 应用程序启动之前加载,因此 InfrastructureUtil 类甚至还没有加载。所以,我想推迟 portlet 的加载。
我注意到每个应用程序在$CATALINA_HOME/temp/ 下都有一个目录,通常称为0-this-annoying-portlet、2-that-weird-portlet 等。我相信开头的数字决定了顺序,因为它强制对应用程序进行字母排序.真的吗?我可以设置这个数字吗?
当然,我接受任何解决方案,但我真的很好奇在 Tomcat 中定义应用程序加载顺序的可能性。
【问题讨论】:
标签: java tomcat tomcat6 liferay liferay-6