[Seasar-user:17587] [S2RMI]S2RMIクライアントからの起動時におけるキャストエラーについて

Chihiro Fukiage [E-MAIL ADDRESS DELETED]
2009年 6月 2日 (火) 13:31:48 JST


いつもお世話になっております。
fukiです。

S2RMIクライアントサンプルを改造して、
S2RMIサーバのメソッドをコールした際、以下の例外が発生しております。

現在、S2RMIサーバはWebコンテナ上にて動作させております。
以下のようにHttpServletRequestへのキャストを行なうような処理が走るのは、
その影響を受けているのでしょうか?
そのような状況で使用したい場合、何か回避策はございませんでしょうか?
もしくは、Webコンテナ上のサービスを別の方法で起動した方が良いのでしょうか?

お忙しいところ恐れ入りますが、ご教示頂けないでしょうか。

なお、S2RMIクライアント側のS2Containerは、s2-framework-2.4.8.jar
S2RMIサーバ側のS2Containerは、s2-framework-2.4.34.jar
をそれぞれ使用しています。

-----------------------
Exception in thread "main" java.lang.ClassCastException:
java.util.HashMap cannot be cast to javax.servlet.http.HttpServletRequest
	at
org.seasar.framework.container.external.servlet.HttpServletExternalContext.setRequest(HttpServletExternalContext.java:102)
	at
org.seasar.remoting.rmi.filter.impl.RMIExternalContextFilter.doFilter(RMIExternalContextFilter.java:41)
	at
org.seasar.remoting.rmi.adaptor.impl.RMIAdaptorImpl$RMIFilterChainImpl.doFilter(RMIAdaptorImpl.java:160)
	at
org.seasar.remoting.rmi.adaptor.impl.RMIAdaptorImpl.invoke(RMIAdaptorImpl.java:50)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
	at sun.rmi.transport.Transport$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Unknown Source)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown
Source)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
	at
sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown
Source)
	at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
	at sun.rmi.server.UnicastRef.invoke(Unknown Source)
	at
org.seasar.remoting.rmi.adaptor.impl.RMIAdaptorImpl_Stub.invoke(Unknown
Source)
	at
org.seasar.remoting.rmi.connector.impl.RMIConnectorImpl.invoke(RMIConnectorImpl.java:57)
	at
org.seasar.remoting.common.interceptor.RemotingInterceptor.invoke(RemotingInterceptor.java:84)
	at
jp.co.isid.scmc.service.EntryService$$EnhancedByS2AOP$$92bbba$$MethodInvocation$$execAnalysisByRemote0.proceed(MethodInvocationClassGenerator.java)
	at
jp.co.isid.scmc.service.EntryService$$EnhancedByS2AOP$$92bbba.execAnalysisByRemote(EntryService$$EnhancedByS2AOP$$92bbba.java)
	at
jp.co.isid.scmc.rmi.client.S2RmiEntryClient.execute(S2RmiEntryClient.java:22)
	at
jp.co.isid.scmc.rmi.client.S2RmiEntryClient.main(S2RmiEntryClient.java:36)


■クライアントソース
--------
package jp.co.isid.scmc.rmi.client;

import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.SingletonS2ContainerFactory;
import org.seasar.framework.log.Logger;

import jp.co.isid.scmc.service.EntryService;

public class S2RmiEntryClient {

    private EntryService service;

    private Logger logger = Logger.getLogger(S2RmiEntryClient.class);

    public void execute(String str) {
    	logger.debug("[S2RmiEntryClient#execute(String str)]タスク名:"+str);
   		this.service.execAnalysisByRemote(str);
   	}

    public static void main(String[] args) throws Exception {
    	
    	S2RmiEntryClient client = new S2RmiEntryClient();

        // RMI接続情報を取得.

SingletonS2ContainerFactory.setConfigPath("jp/co/isid/scmc/rmi/client/s2rmi-client.dicon");

        SingletonS2ContainerFactory.init();
        S2Container container = SingletonS2ContainerFactory.getContainer();

        client.service = (EntryService)
container.getComponent(EntryService.class);
     	client.execute(args[0]);

        SingletonS2ContainerFactory.destroy();
    }

}



Seasar-user メーリングリストの案内