【发布时间】:2009-05-28 13:03:38
【问题描述】:
你知道关于在 Glassfish 中安装 Liferay 集群的分步教程吗?
【问题讨论】:
你知道关于在 Glassfish 中安装 Liferay 集群的分步教程吗?
【问题讨论】:
Google 找到了我这篇名为 how-to-install-and-configure-a-liferay-cluster 的文章
享受吧!
【讨论】:
我正在解决同样的问题,或者非常相似的问题——将 Liferay WAR 文件部署到具有两个节点的 glassfish 集群。我还没有完全正确地配置它,但我确实成功部署了它。也许这对你也有帮助,我们可以比较一下。
这是我必须做的。
首先,基础工作。 GlassFish 部署 WAR 的方式对我来说有点奇怪。据我了解,WAR 文件是由节点代理在某处爆炸的,但是一旦它们被部署,您就无法访问这些文件。这意味着当您调整配置文件(portal-ext.properties)时,您每次都需要重新部署——Liferay 相当大,约为 73MB。这将定期导致 PermGen 空间不足异常,并要求您重新启动集群。因此,明智的做法是设置 JVM 选项以增加 glassfish 中 PermGen 空间的大小。这里有一个很好的问题解释:
http://www.freshblurbs.com/explaining-java-lang-outofmemoryerror-permgen-space
该 JVM 选项不会解决问题,但会增加集群重启之间的延迟(glassfish 控制台无法重启,顺便说一句;我们必须通过命令行来完成)。
下一个问题是:依赖 JAR 文件去哪里了?我们在运行其他服务的共享集群中运行,因此将其放在 domain/domain1/lib 文件夹中是行不通的。我们将依赖项 JAR 文件保存在 liferay war 文件中,在 WEB-INF/lib 中,它似乎对此很满意。
下一步:portal-ext.properties 覆盖文件在哪里?答案再次在 WEB-INF/classes 中的 liferay 战争文件中。这也是我们每次修改属性时都需要重新部署的一个重要原因。
下一步:上下文。默认情况下,liferay 尝试部署到根上下文“/”。我们处于共享环境中,因此我们将 WAR 部署到上下文 /lr1。在 portal-ext.properties 中,我们必须设置属性
portal.ctx=/lr1
下一步:在集群环境中使用嵌入式 HSQL 没有多大意义;我们使用 GlassFish 为我们的数据库连接池设置了一个 JNDI 名称。 Liferay 文档指南中有关于如何执行此操作的说明。在 portal-ext.properties 文件中,我们可以将
jdbc.default.jndi.name=jdbc/LiferayPool
我们也不想在文件系统上存储 Lucene 索引。我们覆盖了 portal-ext.properties 文件中的这些属性来解决这个问题:
lucene.store.type=jdbc
lucene.store.jdbc.auto.clean.up=true
lucene.store.jdbc.dialect.oracle=org.apache.lucene.store.jdbc.dialect.OracleDialect
类似的逻辑适用于 JackRabbit 存储库;我目前有以下属性设置(我不知道这是否正确,但文档库正在运行):
jcr.jackrabbit.repository.root=WEB-INF/classes/
我也不得不将jackrabbit 的repository.xml 文件放到WEB-INF/classes 中。该 xml 文件告诉 jackrabbit 使用哪些数据库连接参数(有关详细信息,请参阅 Apache 的 Jackrabbit 配置页面)。同样,我不确定将其放在 WEB-INF/classes 中是否正确,但它可能必须放在 WAR 文件中的某个位置,或者位于某个共享文件系统上,以便集群中的所有节点共享相同的数据.
我还没有弄乱 EHcache,但我确实放入了 hibernate 属性:
hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
对于我们的 oracle 数据库。我相信它使用上面的默认 JDBC 属性来引用我们的 JNDI 数据库连接。
“Liferay 主目录”变量是“服务器主目录上方的一个文件夹”的概念是我仍在努力解决的问题,它导致我每次发送与 /opt/ 相关的 HTTP 请求时都会出错ee/许可证。
liferay 运行的用户没有修改 /opt 的权限,无论如何这在集群环境中是个坏主意。我不确定设置在哪里,因为当我查看时,我看到的只是
liferay.home=${resource.repositories.root}
和
resource.repositories.root=${default.liferay.home}
我还不知道 default.liferay.home 是在哪里定义的;仍在努力。
遗憾的是,将 liferay 部署到集群环境的文档还没有那么完善,但我希望分享这些对您有所帮助。
祝你好运!
【讨论】:
Liferay 是一个与服务器无关的 Spring / Hibernate 应用程序,您的大部分集群配置应该是您的门户(-ext).properties 文件的集群部分:Hibernate、EHCache 和 JGroup 配置。唯一的应用服务器特定配置应该是会话故障转移,就像在部署的任何 Web 应用中一样。
【讨论】: