3

jboss seam Web サービスがあります。次のように、web.xml でサービス クラスをマッピングしています。

<servlet>
    <servlet-name>pluginhandler</servlet-name>
    <servlet-class>service.PlugInHandler</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>pluginhandler</servlet-name>
    <url-pattern>/*</url-pattern> 
</servlet-mapping>

jboss seam でカスタム サーブレットを使用している場合、フィルター org.jboss.seam.servlet.SeamServletFilter を追加して、必要なすべてのコンテキストを生成する必要があることをいくつかのブログで読みました。

<filter>
    <filter-name>Seam Servlet Filter</filter-name>
    <filter-class>org.jboss.seam.servlet.SeamServletFilter</filter-class>
</filter> 
<filter-mapping>
    <filter-name>Seam Servlet Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping> 

Web メソッドでインスタンス化しようとしている seam コンポーネント Action がありますが、(そのメソッドを呼び出そうとすると) null ポインター例外が発生し続け、根本的な原因は「アクティブなイベント コンテキストがありません」です。次のように例外のスタックを添付しました

    Servlet.service() for servlet pluginhandler threw exception
java.lang.IllegalStateException: No active event context
    at org.jboss.seam.core.Manager.instance(Manager.java:250)
    at org.jboss.seam.servlet.ContextualHttpServletRequest.run(ContextualHttpServletRequest.java:55)
    at org.jboss.seam.web.ContextFilter.doFilter(ContextFilter.java:37)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
    at java.lang.Thread.run(Unknown Source)

何が間違っているのかわかりません。カスタム サーブレットを使用するために欠けている特定の構成はありますか? ご協力と時間をいただき、誠にありがとうございます。私は seam 2.0.1.GA を使用しており、jboss のバージョンは 4.2.2.GA です

ありがとう

4

1 に答える 1

2

非標準的な方法でSeamコンポーネントにアクセスしている場合は、メソッド呼び出しをLifecycle.beginCall()とでラップする必要があります。Lifecycle.endCall()

Lifecycle.beginCall() 
Component.getInstance('...').call();
Lifecycle.endCall()
于 2012-07-02T14:26:49.507 に答える