[Seasar-user:11090] S2RMIを用いたコールバック登録
歌舞伎モモ
[E-MAIL ADDRESS DELETED]
2007年 10月 18日 (木) 12:30:46 JST
歌舞伎モモと申します。
よろしくお願いします。
S2RMIを用いず、RMIの場合は、
http://www.ryerson.ca/~dgrimsha/courses/cps841/RMICallbacks.html
を参考にしながら、コールバックオブジェクト(リモートオブジェクト)は、
UnicastRemoteObjectを継承したクラスとして用意し、
複数クライアントから見て、共有情報とさせるため、
フィールド(Vector)を定義し、実現させました。
ただ、同様に、S2RMIで行うとなぜか、コールバックオブジェクトの共有がうま
くいきません。
失礼ですが、
以下より、ソースを貼り付けます。
======= SERVER SIDE ========
@ServerMain.java
public class ServerMain {
public static void main(String[] args) {
S2Container container =
S2ContainerFactory.create("server.dicon");
container.init();
}
}
@Service.java
public interface Service {
public void notice(String message) throws RemoteException;
public void entryCallBackObj(String name,
NoticeReception callBackObj)throws RemoteException;
}
@ServiceImpl.java
public class ServiceImpl extends UnicastRemoteObject implements Service
{
private static final long serialVersionUID = -5960260125251941419L;
/** 共有情報 */
public static Vector<NoticeReception> vec = null;
public ServiceImpl() throws RemoteException {
super();
this.vec = new Vector<NoticeReception>();
System.out.println("AAAAAAAAAAA");
}
public void notice(String message) {
System.out.println("aaaaaa" + vec.size());
}
public void entryCallBackObj(String name,
NoticeReception callBackObj) {
vec.addElement(callBackObj);
System.out.println("aaaaaa" + vec.size());
}
}
-----------------------------------
server側設定ファイル(server.dicon)
-----------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components xmlns:xi="http://www.w3.org/2001/XInclude">
<component name="Service"
class="server.ServiceImpl"/>
<component name="componentInvoker"
class="org.seasar.extension.component.impl.ComponentInvokerImpl"/>
<component name="RMIAdapptor"
class="org.seasar.remoting.rmi.adaptor.impl.RMIAdaptorImpl">
<property name="invokerName">"componentInvoker"</property>
</component>
<component class="org.seasar.remoting.rmi.deployer.impl.
RMIAdaptorDeployerImpl">
<property name="registryPort">1108</property>
<property name="servicePort">1109</property>
<initMethod name="deploy"/>
<destroyMethod name="undeploy"/>
</component>
<component class="org.seasar.remoting.rmi.filter.impl.
RMIExternalContextFilter"/>
</components>
===== CLIENT SIDE =====
@ClientMain.java
public class ClientMain {
/**
* @param args
*/
public static void main(String[] args) {
ClientMain client = new ClientMain();
client.doTask();
}
public void doTask() {
S2Container container =
S2ContainerFactory.create("client.dicon");
container.init();
Service service = (Service) container.getComponent("Service");
NoticeReception callBackObj = new NoticeReceptionClinetAImpl();
try {
UnicastRemoteObject.exportObject(callBackObj);
service.entryCallBackObj("ClientA", callBackObj);
}
catch (RemoteException ex)
{
ex.printStackTrace();
}
while(true) {
try {
System.out.println("ClientA is sleeping");
Thread.sleep(10000);
} catch (Exception e)
{
e.printStackTrace();
}
}
}
}
-----------------------------------
Client側設定ファイル(client.dicon)
-----------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<component name="Service"
class="server.ServiceImpl">
<aspect>remotingInterceptor</aspect>
</component>
<component name="remotingInterceptor"
class="org.seasar.remoting.common.interceptor.RemotingInterceptor"
/>
<component class="org.seasar.remoting.rmi.connector.impl.
RMIConnectorImpl">
<property name="baseURLAsString">"rmi://localhost:1108/"</property>
<initMethod name="lookup"/>
</component>
</components>
ServerMainを起動した状態で、ClientMainを複数プロセス起動したところ、
共有対象としたリモートオブジェクトのフィールドVectorのサイズが、
常に「0」となり、コールバック登録(entryCallBackObj())を行うので、
結果として、Vectorオブジェクトのサイズが、「1」となります。
クライアントの設定が悪いのかと危惧しておりますが、
詳細をご存知な方いらっしゃいましたら、
ご教授願います。すいません。
こちらの勉強不足な点もあるかもしれませんが、宜しくお願いいたします。
以上です。
--------------------------------------
Easy + Joy + Powerful = Yahoo! Bookmarks x Toolbar
http://pr.mail.yahoo.co.jp/toolbar/
Seasar-user メーリングリストの案内