グローバルDBと呼ぶDBにデータを保存するEJB
アプリケーションをサーバー上で実行しています。を使用してアクセスするスタンドアロンアプリケーションである2つの正確なリモートSwingアプリケーションがあります。接続が失われた場合に備えて、独自のローカルDBがあります。Glassfish
MySQL
EJB's
RMI
私の目的は、2フェーズコミットプロトコルを実装することです。つまり、1人の参加者をコーディネーターとし、他の参加者を参加者にします。
私が考えることができた1つの方法は、JMS
キューを介してメッセージを送信し、リモートクライアントにこれらのメッセージをリッスンさせて適切なアクションを実行させることを使用して実装することでした。これは、Swingアプリケーションの1つのButtonclickでメッセージを送信することで行います。問題は、私が実装したのが難しい場合でもMessageListener
、onMessage()
メソッドが他のクライアントへのメッセージを受信しないことです。
各リモートクライアントには、次のプロパティが設定されています。
props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
これは、Glassfish
サーバーに接続connectionFactory
しQueue
て、既に構成したにアクセスするためのものです。
サーバー上で実行されているアプリケーションのみがメッセージの受信を許可され、リモートアプリケーションは許可されていないためですか?
2台のPCのトポロジーに関する提案は大歓迎です。