gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:23:04 25 4
gpt4 key购买 nike

假设我有两个 Web 应用程序要部署在 Tomcat 6 中,打包为 A.warB.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 作为 Entity Manager Factory 的数据源:

<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-portlet2-that -weird-portlet 等。我相信开头的数字决定了顺序,因为它强制按字母顺序对应用程序进行排序。真的吗?我可以设置这个数字吗?

当然,我接受任何解决方案,但我真的很好奇在 Tomcat 中定义应用程序加载顺序的可能性。

最佳答案

关于java - 如何在Tomcat中定义上下文加载的顺序,或者定义上下文之间的一些依赖层次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9720444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com