0

学校のプロジェクト用に開発しているJavaWebアプリケーションがあります。プレゼンテーション層(servlets / jsp)を1つのサーバーにデプロイし、ビジネスロジックを別のサーバーにデプロイする必要があります。

2台のサーバーを接続するためのソリューションが必要です。

現在、私はRMIとAxis2を研究しています。

RMIを正常に動作させることができません。私は公式チュートリアルに従っていて、ローカルでセキュリティ例外を取得し続けています。Tomcatが関与するとさらに悪化することを想像してください。

Axis2は良い解決策のように思えますが、それを立ち上げるには時間が必要です。

私の質問は、ビジネスレイヤーを呼び出すことができるように2台のサーバーを接続する簡単な方法がありますか?たぶんTomcatには何かが組み込まれています。

RMIが事実上のプロトコルでありAPIを使用する必要がある場合、TomcatでRMIを使用するための優れたチュートリアルはありますか。

私が使用しているサーバーは両方ともTomcatを実行しています。

4

3 に答える 3

2

データレイヤーがどれほど複雑かはわかりませんが、たとえば、ApacheCXFを使用してビジネスロジックサーバーにRESTインターフェイスを実装できます。これは、Axis2を使用するよりも簡単なはずです。

于 2011-11-15T20:41:19.483 に答える
1

多くのオプションがあります:

  • 一方からファイルを書き込み、もう一方から読み取ります。「もう一方」は、「一方」がリクエストファイルを書き込むフォルダを監視するために無限ループを持っている必要があります。
  • ソケットを使用する
  • RESTを使用する
  • RMI

Linuxを使用している場合:

あなたの環境を考えると、私はRESTを使います。

于 2011-11-15T20:42:37.463 に答える
0

最終的にRMIを使用しました。このチュートリアルを使用して、動作させました:http ://sacrosanctblood.blogspot.com/2008/11/rmi-tutorial-rmi-and-tomcat.html 。重要なのは、サーブレットの起動時に、スタブアウトするオブジェクトがメソッドスコープではなくクラススコープであることを確認する必要があるということです。また、セキュリティマネージャのコードは必要ありません。

使用しているstartServerサーブレットのコードは次のとおりです。

public class startServer extends HttpServlet
{
    public static boolean isRegistered = false;    
    public IRemote service = new RemoteImpl();

    @Override
    public void init(ServletConfig config) throws ServletException
    {
        super.init(config);        
        if (!isRegistered)
        {
            try
            {                
                IRemote stub = (IRemote) UnicastRemoteObject.exportObject(service, 0);
                Registry registry = LocateRegistry.createRegistry(9345);
                registry.rebind(IRemote.serviceName, stub);
                System.out.println("Remote service bound");
                isRegistered = true;
            }
            catch (Exception e)
            {
                System.err.println("Remote service exception:");
                e.printStackTrace();
            }
        }
    }
}

そして、これがクライアントコードです:

public String getRemoteString()
{
    String result = "";
    try
    {
        Registry registry = LocateRegistry.getRegistry(9345);            
        IRemote serv = (IRemote) registry.lookup(IRemote.serviceName);

        result = serv.executeRemote("Test");
    }
    catch (Exception e)
    {
        System.err.println("Remoteservice exception:");
        e.printStackTrace();
    }

    return result;
}

現在、すべて同じサーバーで実行されていますが、後で2つを動作させることができると確信しています。

于 2011-11-16T02:36:25.883 に答える