java-如何在Tomcat中定义上下文加载的顺序,或在上下文之间定义一些依赖关系层次结构?

提问

假设我有两个要在Tomcat 6中部署的Web应用程序,可以说是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中定义应用程序加载顺序的可能性感到好奇.

最佳答案

也许这会有所帮助

Which Tomcat 5 context file takes precedence?

http://static.springsource.org/spring/docs/3.1.1.RELEASE/spring-framework-reference/html/beans.html#beans-factory-dependson