nimbus (1.2.4) | 2018-01-25 20:02 |
nimbus-sample (1.2.4) | 2018-01-26 17:06 |
jp.ossc.nimbus.service.publish.RequestConnectionFactoryServiceは、1対多の応答ありメッセージ送受信を行うMessageReceiver及びServerConnectionFactory実装サービスです。
このサービスは、要求メッセージ及び応答メッセージを送信するServerConnectionFactory実装サービスと、要求メッセージ及び応答メッセージを受信するMessageReceiver実装サービスを使用して、1対多の応答ありメッセージ送受信を行うサービスです。そのため、このサービスとは別に、送受信を行う実体となるMessageReceiver及びServerConnectionFactory実装サービスが必要となります。
このサービスを使って、メッセージを送受信するには、このサービスをServerConnectionFactoryとして取得して、ServerConnectionFactory.getServerConnection()で取得したServerConnectionをRequestServerConnectionへとキャストして使用します。
- import jp.ossc.nimbus.core.ServiceManagerFactory;
- import jp.ossc.nimbus.service.publish.ServerConnectionFactory;
- import jp.ossc.nimbus.service.publish.RequestServerConnection;
- import jp.ossc.nimbus.service.publish.Message;
- // ServerConnectionFactoryを取得
- ServerConnectionFactory scf = (ServerConnectionFactory)ServiceManagerFactory.getServiceObject("RequestConnectionFactory");
- // RequestServerConnectionを取得する
- RequestServerConnection sc = (RequestServerConnection)scf.getServerConnection();
- // 送信するMessageを生成する
- Message request = sc.createMessage("Subject", "key");
- request.setObject("Hello.");
- // 要求メッセージを送信して、応答メッセージを受信する
- Message[] responses = sc.request(message, 1, 1000l);
- System.out.println(responses[0].getObject());
このサービスを使って、要求メッセージを受信して応答メッセージを送信するには、このサービスをMessageReceiverとして取得して、java.lang.String) MessageReceiver.addSubject(MessageListener, String)を使って、RequestMessageListenerを登録しておき、RequestMessageListenerを実装します。
- import jp.ossc.nimbus.core.ServiceManagerFactory;
- import jp.ossc.nimbus.service.publish.ServerConnectionFactory;
- import jp.ossc.nimbus.service.publish.RequestServerConnection ;
- import jp.ossc.nimbus.service.publish.MessageReceiver;
- import jp.ossc.nimbus.service.publish.RequestMessageListener;
- import jp.ossc.nimbus.service.publish.Message;
- import jp.ossc.nimbus.service.publish.MessageException;
- // ServerConnectionFactoryを取得
- ServerConnectionFactory scf = (ServerConnectionFactory)ServiceManagerFactory.getServiceObject("RequestConnectionFactory");
- // RequestServerConnectionを取得する
- final RequestServerConnection sc = (RequestServerConnection)scf.getServerConnection();
- // MessageReceiverを取得
- MessageReceiver mr = (MessageReceiver)ServiceManagerFactory.getServiceObject("RequestConnectionFactory");
- // RequestMessageListenerを登録する
- mr.addSubject(
- new RequestMessageListener(){
- public void onMessage(Message message){}
- public Message onRequestMessage(
- Object sourceId,
- int sequence,
- Message message,
- String responseSubject,
- String responseKey
- ){
- try{
- System.out.println(message.getObject());
- // 送信する応答Messageを生成する
- Message response = sc.createMessage(responseSubject, responseKey);
- response.setObject("Hi.");
- return response;
- }catch(MessageException e){
- e.printStackTrace();
- return null;
- }
- }
- },
- "Subject"
- );
このサービスは、複合的なサービスで、以下のサービスを下位サービスとして使用します。
下位サービスインタフェース | 用途 |
jp.ossc.nimbus.service.publish.MessageReceiver | 要求メッセージ及び応答メッセージを受信するMessageReceiverとして使用する。 |
jp.ossc.nimbus.service.publish.ServerConnectionFactory | 要求メッセージ及び応答メッセージを送信するServerConnectionFactoryとして使用する。 |
以下に簡単なサービス定義を示します。
- <?xml version="1.0" encoding="Shift_JIS"?>
- <!DOCTYPE server PUBLIC
- "-//Nimbus//DTD Nimbus 1.0//JA"
- "http://nimbus.sourceforge.jp/dtd/nimbus-service_1_0.dtd">
- <server>
- <manager>
- <!-- リクエストコネクションファクトリサービス -->
- <service name="RequestConnectionFactory"
- code="jp.ossc.nimbus.service.publish.RequestConnectionFactoryService">
- <!-- サーバコネクションファクトリサービスのサービス名を設定する -->
- <attribute name="ServerConnectionFactoryServiceName">#ConnectionFactory</attribute>
- <!-- メッセージ受信サービスのサービス名を設定する -->
- <attribute name="MessageReceiverServiceName">#MessageReceiver</attribute>
- <depends>#ConnectionFactory</depends>
- <depends>#MessageReceiver</depends>
- </service>
- <!-- メッセージ受信サービス -->
- <service name="MessageReceiver"
- code="jp.ossc.nimbus.service.publish.MessageReceiverService">
- <attribute name="ClientConnectionFactoryServiceName">#ClusterConnectionFactory</attribute>
- <attribute name="StartReceiveOnStart">true</attribute>
- <depends>#ClusterConnectionFactory</depends>
- </service>
- <!-- クラスタコネクションファクトリサービス -->
- <service name="ClusterConnectionFactory"
- code="jp.ossc.nimbus.service.publish.ClusterConnectionFactoryService">
- <attribute name="JndiRepositoryServiceName">#LocalRMIRepository</attribute>
- <attribute name="ClientConnectionFactoryServiceName">#ConnectionFactory</attribute>
- <attribute name="ClusterServiceName">#Cluster</attribute>
- <attribute name="FlexibleConnect">true</attribute>
- <attribute name="Multiple">true</attribute>
- <depends>
- <!-- RMIサーバに登録するリポジトリサービス -->
- <service name="LocalRMIRepository"
- code="jp.ossc.nimbus.service.repository.RMIRepositoryService">
- <attribute name="CreateRegistry">true</attribute>
- <attribute name="Port">1099</attribute>
- </service>
- </depends>
- <depends>ConnectionFactory</depends>
- <depends>
- <!-- クラスタサービス -->
- <service name="Cluster"
- code="jp.ossc.nimbus.service.keepalive.ClusterService">
- <attribute name="MulticastGroupAddress">239.0.0.10</attribute>
- <attribute name="JoinOnStart">false</attribute>
- </service>
- </depends>
- </service>
- <!-- TCPコネクションファクトリサービス -->
- <service name="ConnectionFactory"
- code="jp.ossc.nimbus.service.publish.tcp.ConnectionFactoryService"/>
- </manager>
- </server>