2

単純なPlay(1.2.4)アプリケーションをWebSphere 8にデプロイしたいと思います。このアプリケーションは、Windows上でローカルに動作しています。どちらもJava1.6です。以下を使用してWARファイルを作成しました。

play clean
play war --zip -o c:\sampleapp

次に、生成されたweb.xmlを変更して、サーバーのデータソースを定義し、warファイルを再度ビルドしてデプロイしました。デプロイ中に、web.xmlからresource-refが見つかり、WASで定義されたデータソースにバインドしました。次に、クラスローダーの順序を「最後の親」に変更しました(Playデプロイメントオプションページおよびその他のスレッドに基づく)。その後、エラーなしでアプリケーションを起動しました。

@OnApplicationStartとマークされたメソッドでplay.jobs.Jobを拡張するクラスがあります。新しくインストールしたアプリケーションをWASコンソールから起動すると、このメソッドが起動して実行され、データソースに接続してデータをロードしてキャッシュに入れます。

最初のコントローラーにアクセスしようとするとすぐに問題が発生し、次のエラーが発生します。

[9/17/12 16:19:48:132 CDT] 00000022 servlet       I com.ibm.ws.webcontainer.servlet.ServletWrapper init SRVE0242I: [sampleapp] [/sampleapp] [play]: Initialization successful.
[9/17/12 16:19:48:773 CDT] 00000022 SystemOut     O 16:19:48,772 ERROR ~

@6bl9mfbm1
Internal Server Error (500)

Execution exception (In /app/controllers/Application.java around line 41)
RuntimeException occured : play.mvc.Scope$Session

play.exceptions.JavaExecutionException: play.mvc.Scope$Session
        at play.mvc.ActionInvoker.invoke(ActionInvoker.java:231)
        at play.server.ServletWrapper$ServletInvocation.execute(ServletWrapper.java:557)
        at play.Invoker$Invocation.run(Invoker.java:278)
        at play.server.ServletWrapper$ServletInvocation.run(ServletWrapper.java:548)
        at play.Invoker.invokeInThread(Invoker.java:68)
        at play.server.ServletWrapper.service(ServletWrapper.java:142)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1214)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:774)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:456)
        at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1027)
        at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3703)
        at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304)
        at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:962)
        at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662)
        at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:195)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)
        at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83)
        at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
        at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
        at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
        at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
        at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
        at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
        at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
        at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1659)
Caused by: java.lang.RuntimeException: play.mvc.Scope$Session
        at javassist.runtime.Desc.getClassType(Desc.java:156)
        at javassist.runtime.Desc.getType(Desc.java:122)
        at javassist.runtime.Desc.getType(Desc.java:78)
        at controllers.Application.connected(Application.java:41)
        at controllers.Application.index(Application.java:49)
        at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:548)
        at play.mvc.ActionInvoker.invoke(ActionInvoker.java:502)
        at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:478)
        at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:473)
        at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161)
        ... 28 more

これが私の関連するコントローラーコードです:

public class Application extends Controller {

    @Before(unless={"login","index"})
    static void addUser() {
        User user = connected();
        if(user != null) {
            flash.put("user", user);
//          renderArgs.put("user", user);
        } else {
            flash.error("Please log in.");
            index();
        }

    }

    static User connected() {
//        if(renderArgs.get("user") != null) {
//            return renderArgs.get("user", User.class);
//        }
        String username = session.get("user");   // Line 41 - Error!
        if(username != null) {
            return User.find("byUsername", username).first();
        } 
        return null;
    }

    public static void index() {
        if(connected() != null) {
            Download.index(1);
        }
        render();
    }  
    ..
    ..
}

エラーはセッション参照から発生しているようです。renderArgsを参照するコメント行も、アクティブなときに同様のエラーを引き起こしたことに注意してください。

javassistはどこかで適切に「強化」されていませんか?javassist jarを最新バージョンに置き換えてみましたが、同じ結果になりました。

私はここの「企業」でPlayを手に入れるために本当に一生懸命努力しているので、これを本当に機能させたいと思っています。2012年9月の時点で、PlayがWAS8で正常に実行されたかどうかはわかりません。Play 2(java)を検討しますが、WASは確実にサポートされていないようで、プラグインplay2warもまだWASをサポートしていないようです。WASなしでは実行できないのは愚かなことですが、これが私たちの企業の現実です。

更新
Play 1.2.5も試してみて、新しいアプリを作成し、Application.indexメソッドにsession.get( "x")という1行を追加しました。warファイルをデプロイし、最初のアクセスで同じエラーが発生しました。

4

2 に答える 2

0

この問題は、WebSphereのクラスローダー設定を微調整することで解決できる可能性があります。これを考えると身震いし、WASが邪魔にならないようにしたい場合は、この回避策を試すことができます。

次のようなスタートアップジョブを作成します。

@OnApplicationStart
public class Startup extends Job {

    public void doJob() {
        javassist.runtime.Desc.useContextClassLoader = true;
    }
}
于 2013-01-31T18:38:54.273 に答える
0

申し訳ありませんが、あなたの問題に対する具体的な解決策はありません。

ただし、リードについては次のスレッドを考慮してください。

ただし、メーリング リスト (play-framework@googlegroups.com) も試して、解決策があるかどうか、または同じ問題に遭遇したかどうかを確認してください。メーリングリストからググることもできます。

ただし、一般的には、本番環境でもプレイ サーバーを使用することをお勧めします。これで十分です。必要に応じて、Apache/nginx を前面に配置することもできます。

于 2012-09-18T22:08:17.817 に答える