如何将Play应用部署到Websphere 7

根据Play文档,可以在Play文件中打包Play应用并将其部署到Websphere,但我遇到了问题。

我正在使用带有--zip选项的play war命令,该选项正常工作。 结果战争文件具有正确的布局(顶级WEB-INF,我的罐子移动到WEB-INF / lib)。

在我的Websphere服务器上部署war文件后,我最后将应用程序的类加载顺序更改为父项,以便它使用Play版本的任何冲突的库。 然后我尝试加载我的应用程序的页面,任何页面,并出现错误。

我试过以同样的方式尝试部署演示应用程序和一个新的空应用程序,但是,我只是得到一个空白页面,表示Not found Get / 。 日志中唯一的东西是WARN ~ 404 -> GET / (GET /)

我已经使用Play 1.2.3和1.2.4,Websphere 7.0.0.0和7.0.0.19进行了试用。 我也尝试在Websphere中切换不同的部署选项,尽管默认选项看起来应该可以工作。

有没有人得到一个Play应用程序在Websphere中工作? 如果是这样,怎么样?


我终于有了它的工作。 我将记录我的步骤,以防将来任何人在WebSphere上部署Play应用时遇到类似问题。

1 - 第一个问题是404。Websphere没有将根(/)的请求传递给应用程序以处理(wtf?),因此修复方法是在路由文件中定义类似的路由:

GET    /*    Application.index

而不是(或在之上)

GET    /    Application.index

2 - 下一个问题是与持久性(JPA)方法不存在有关的错误。 Play使用JPA 2.0,而WebSphere 7使用他们自己的OpenJPA 1.0自定义版本。 您可以安装JPA 2和OSGI的功能包(您不需要OSGI部分,因此可以忽略它)。 请注意,该功能包要求安装WebSphere 7.0.0.9或更高版本。 这意味着匹配应用服务器和捆绑JDK的修订包。 在安装JPA功能包之前,需要首先安装服务器和JDK的IE修订包21(最新版本或写入时间)。 在功能包安装结束时,它会询问您是否要运行配置文件工具。 说是的。 这个工具可以让你“扩充”你的配置文件(你要安装战争的服务器节点)。 加大!

3 - 构建一个可在WebSphere中工作的war文件:

play war <appFolder> -o <outputFolder> --zip --%prod

这将创建一个名为<outputFolder> (分解战争)的文件夹和一个名为<outputFolder> .war的.war文件,其中应用程序ID设置为prod。 爆炸的战争可以被删除。

在linux上运行这个命令不断将我的WEB-INF文件夹放入一个未命名的文件夹中(因此,从war文件的根级下降)。 换句话说,不是/ WEB-INF /,而是创建一个像/ WEB-INF /这样的结构。 无论如何,我现在正在手动修复它,正确地重新压缩它。 任何人都知道如何避免这个问题?

4 - 使用管理控制台中的所有默认设置将war文件安装到WebSphere中,或者如果您知道自己在做什么,可以调整它们。

5 - 我不完全确定这一步是否必要(不会改变我的特定应用程序的任何内容),但是我在网上阅读的关于让Play应用程序在WebSphere中运行的所有建议都表示要这样做。 呃,它不会受伤。 点击您安装的应用程序。 点击“类加载和更新检测”链接。 然后选择“首先使用本地类加载器加载的类(父最后)”选项。 好。 保存。

6 - 打开一个浏览器页面到你的地址(localhost:9080,如果本地运行websphere),然后测试。 在这一点上它应该工作! 希望。 祝你好运。


部署到Servlet容器的一个常见问题是,除非您将应用程序部署为ROOT war文件,否则您经常遇到问题。 您确定您的WAR文件已部署,以便应用程序的路径可用作为/

此线程是遇到的常见问题

如何在Play Framework的配置文件中使用“war.context”?

链接地址: http://www.djcxy.com/p/55885.html

上一篇: How to deploy Play app to Websphere 7

下一篇: Beginner servlet question: accessing files in a .war, which path?