如何使spring 3.1和hibernate 4.1.x在所有portlet中可用,而不会与ROOT liferay发生冲突

问题描述 投票:0回答:1

我有多个使用相同框架的portlet,并且我以前在每个portlet上部署这些依赖项,这会导致PermGen问题,尤其是当我确实为portlet部署/取消部署时。

有时即使没有部署/取消部署,此问题也会突然出现。

我正在考虑将这些依赖项移到tomcat级别,但问题是它将与使用它的liferay版本冲突。

这是我的JVM参数:

JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF8 -Dorg.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES=false -Duser.timezone=GMT -Djruby.min.runtimes=1 -Djruby.max.runtimes=3 -Djruby.runtime=1 -XX:NewSize=700m -XX:MaxNewSize=700m -Xms2048m -Xms2048m -XX:MaxPermSize=512m  -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:SurvivorRatio=10 -XX:ParallelGCThreads=8"

还有其他推荐的解决方案吗?

spring hibernate liferay portlet spring-portlet-mvc
1个回答
0
投票

Liferay 6.1在其根portlet中使用Spring 3.0.7。

如果在portal-dependency-jarsliferay-plugin-package.properties中将它们配置为依赖项,则这些将被复制到您的portlet中,因此很像自己包含它们。当然,您包含在Portlet中的任何库都会增加对PermGen空间的使用。

在Tomcat中放置不同的Spring和Hibernate库可能会导致类加载问题。由于Hibernate 4.x在3.1之前的Spring上并不能很好地发挥作用,因此您会遇到一些问题。您可以尝试在根Por​​tlet中升级Spring。我个人没有做过。

我会增加PermGen空间,并将库放入您的portlet中。另外,在战争中,如果您使用的是Tomcat,则可能需要将其放在META-INF/context.xml中。

<Context>
    <Loader loaderClass="com.liferay.support.tomcat.loader.PortalClassLoader" />
</Context>

这可能会解决一些类加载问题。在某些情况下,它没有什么区别,但是如果您使用单独的库,则可能很重要。

© www.soinside.com 2019 - 2025. All rights reserved.