2012-02-22 49 views
1

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

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

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

我试过以同样的方式部署演示应用程序和一个新的空应用程序,但我只是得到一个空的页面,说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中工作?如果是这样,怎么样?

回答

2

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

1 - 第一个问题是,404的Websphere不传根(/)请求的应用程序来处理,所以解决方法是在你的路由文件中定义了类似的路线:

(WTF?)
GET /* Application.index 

,而不是(或顶部)

GET / Application.index 

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

3 - 建立一个战争文件,将在WebSphere工作:

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

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

在Linux上运行此命令不断把我的WEB-INF文件夹中的未命名的文件夹内(所以,倒从战争文件的根级别的水平)。换句话说,不是/ WEB-INF /,而是创建一个像/ WEB-INF /这样的结构。无论如何,我现在正在手动修复它,正确地重新压缩它。任何人都知道如何避免这个问题?

4 - 在管理控制台中的所有默认设置安装war文件到WebSphere ...或者调整他们,如果你知道自己在做什么。

5 - 我不能完全肯定,如果这一步是必要的(不会改变我的特殊应用的任何东西),但我已经有关获取Play应用在WebSphere运行在线阅读的建议说要怎么做。呃,它不会受伤。点击您安装的应用程序。点击“类加载和更新检测”链接。然后选择“首先使用本地类加载器加载的类(父最后)”选项。好。保存。

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

0

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

这个线程是一个常见的问题遇到

how to use "war.context" in Configuration file of Play Framework ?

+0

我使用的上下文是默认/一个。我的web.xml和Websphere管理控制台覆盖都有/作为上下文根。 – DaveS 2012-02-22 18:35:55

相关问题