クライアント側の例外を伴う単純なRMIアプリケーション

恐怖症

Java 8を使用し、単純なRMIアプリケーションを作成しましたが、理解できないクライアント側の例外があります。Eclipseを使用すると、アプリケーションの構造は次のようになります。

---RMI_project     
-----bin
-------client
----------ImplementazioneMyClassServer_Stub.class
----------InterfacciaMyClassServer.class
----------MainClient.class
-------server
----------ImplementazioneMyClassServer.class
----------InterfacciaMyClassServer.class
----------ImplementazioneMyClassServer_Stub.class
----------ImplementazioneMyClassServer_Skel.class
----------MainServer.class
-----src 
-------client
----------InterfacciaMyClassServer.java
----------MainClient.java
-------server
----------ImplementazioneMyClassServer.java
----------InterfacciaMyClassServer.java
----------MainServer.java

コードは次のとおりです。

InterfacciaMyClassServer.java

package client;

import java.rmi.*; // necessaria per estendere interfaccia Remote

public interface InterfacciaMyClassServer extends Remote {
 int somma(int a, int b) throws RemoteException;        //unico metodo
}

ImplementazioneMyClassServer.java

package server;

import java.rmi.*;
import java.rmi.server.*;  // per utilizzare UnicastRemoteObject

public class ImplementazioneMyClassServer extends UnicastRemoteObject implements InterfacciaMyClassServer{

    private static final long serialVersionUID = 1L;

    public ImplementazioneMyClassServer() throws RemoteException {      // costruttore
        System.out.println("ok1");
    }

    public int somma(int a, int b) throws RemoteException{      // implementazione metodo somma definito dall'interfaccia
        return a+b;
    }
}

MainServer.java

package server;

import java.rmi.*;

public class MainServer {

    public static void main(String[] args) {

        try{
            ImplementazioneMyClassServer s1 = new   ImplementazioneMyClassServer();

            System.out.println("ok2");

            Naming.rebind("oggetto1", s1);

            System.out.println("ok3");
        }
        catch(Exception e){
            System.out.println(e);
        }
    }

}

MainClient.java

package client;

import java.net.MalformedURLException;
import java.rmi.*;

public class MainClient {

    public static void main(String[] args) throws MalformedURLException, RemoteException, NotBoundException {

        String nomeServer="localhost";        // nome del server o suo    indirizzo IP (per l'esempio localhost=127.0.0.1)
        String nomeOggettoRemoto="oggetto1";   // nome dell'oggetto remoto da richiedere al server 
        String protocollo="rmi";              //protocollo usato, può essere: rmi,ftp,http
        String URLoggettoRemoto=protocollo+"://"+nomeServer+"/"+nomeOggettoRemoto;  // URL completo usato dal client per ottenere riferimento oggetto remoto sul server 

        // cerca all'URL specificato all'interno del registro rmi l'oggetto remoto con nome "oggetto1"
        // e restituisce nella var oggetto il suo riferimento per cui nelle istruzioni successive
        // è possibile riferirsi all'oggetto remoto come se fosse sul client.
        InterfacciaMyClassServer oggetto = (InterfacciaMyClassServer) Naming.lookup(URLoggettoRemoto);

        // uso oggetto remoto
        System.out.println(oggetto.somma(2, 3));
    }

}

動的にスタブクラスをダウンロードしたくありません。そのため、クラスのスタブとスケルを取得してから、bin \ clientにスタブクラスをコピーしました。スタブクラスとスケルクラスを取得するには、次の手順に従いました。

1) set classpath=C:\JavaWorkspace\RMI_project\src
2) cd C:\JavaWorkspace\RMI_project\src
3) C:\JavaWorkspace\RMI_project\src>javac server/InterfacciaMyClassServer.java
4) C:\JavaWorkspace\RMI_project\src>javac  server/ImplementazioneMyClassServer.java
5) C:\JavaWorkspace\RMI_project\src>rmic -v1.1 server.ImplementazioneMyClassServer

アプリケーション全体を実行するには、次の手順に従いました。

プロンプト1:

1) set classpath=C:/JavaWorkspace/RMI_project/bin
2) start rmiregistry
3) java server.MainServer

そして私はきちんと得ました:

ok1
ok2
ok3

プロンプト2による:

1) set classpath=C:/JavaWorkspace/RMI_project/bin
2) java client.MainClient

例外が発生した場所:

Exception in thread "main" java.lang.ClassCastException: server.ImplementazioneMyClassServer_Stub cannot be cast to client.InterfacciaMyClassServer 
at client.MainClient.main(MainClient.java:18)

例外はMainClientの18行目ですが、何が問題なのかわかりません。

user207421

2つのパッケージで宣言されたリモートインターフェイスがあります。サーバー側はサーバーパッケージのリモートインターフェイスを使用します。クライアント側は、クライアントパッケージのリモートインターフェイスを使用します。これらの2つのリモートインターフェイスは異なります。一方の実装をもう一方にキャストすることはできません。

あなたはこれを行うことはできません。両端で、同じパッケージ内の同じリモートインターフェイスを使用する必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Django / Flaskの問題を伴うインタラクティブなWebアプリケーション

分類Dev

Blazorクライアント側のアプリケーションレベルの例外処理

分類Dev

単純なRMIアプリケーションの作成中に「ClassCastException:$ Proxy0をキャストできません」エラー

分類Dev

Openxavaの単純なアプリケーションエラー

分類Dev

単純なPyQt5アプリケーションのstdoutをリダイレクトする

分類Dev

URLのHTML <script>フラグメントを、純粋にクライアント側のアプリケーションのXSSに使用できますか?

分類Dev

ハッシュ変更を伴う単純なSPA(シングルページアプリケーション)の実装

分類Dev

java.sql.SQLException:SpringBootアプリケーションで単純なselectクエリを使用する場合の無効な列インデックス例外

分類Dev

単純なイントラネットアプリケーション用のSharepointまたはWebapp?

分類Dev

datagridの変換テーブル-単純なクラスレジストリアプリケーション

分類Dev

単純なヘッドレスWindowsアプリケーションのプロジェクトタイプ

分類Dev

単純なWebアプリケーションのイベントソーシングデータフロー

分類Dev

単純なSpringBootアプリケーションを実行するときのIllegalAccessError例外

分類Dev

Puppeteerをクライアント側のReactJSアプリケーションで動作させる方法

分類Dev

単純なサーブレットアプリケーションのMavenアーキタイプ

分類Dev

C ++で単純なFTPのようなクライアント/サーバーアプリを作成する

分類Dev

asp.netmvcアプリケーションでリストボックスのクライアント側の検証を行う方法

分類Dev

「...ターゲットマシンが積極的に拒否しました...」単純なクライアントサーバーアプリの例外

分類Dev

単純なライブチャートをWPFアプリケーション(ColumnSeries)に構築しようとしています

分類Dev

クライアント側でのWebアプリケーションの指紋スキャンの実装

分類Dev

単純なBrowserComponentがアプリケーションをクラッシュさせる

分類Dev

単純なオフラインデスクトップアプリケーションのデータを保存するにはどうすればよいですか?

分類Dev

クライアント側アプリケーションでのYouTubev3APIキーの保護

分類Dev

Spark-スタンドアロンクラスター上の単純なアプリケーションを理解する

分類Dev

ac#.NETWebアプリケーションでサーバー側の処理のステータスをクライアント側に表示する方法

分類Dev

.htaccess / Apache2を使用して単純なphpアプリケーションでサブディレクトリのwordpressアプリケーションを構成するにはどうすればよいですか?

分類Dev

ActiveDirectoryログインの失敗時にHazelcastでバックアップされたSpringセッションシリアル化例外を伴うSpringBootアプリケーション

分類Dev

このクライアント側アプリケーションは安全ですか?

分類Dev

クライアント側でアプリケーションexeをデバッグする方法

Related 関連記事

  1. 1

    Django / Flaskの問題を伴うインタラクティブなWebアプリケーション

  2. 2

    Blazorクライアント側のアプリケーションレベルの例外処理

  3. 3

    単純なRMIアプリケーションの作成中に「ClassCastException:$ Proxy0をキャストできません」エラー

  4. 4

    Openxavaの単純なアプリケーションエラー

  5. 5

    単純なPyQt5アプリケーションのstdoutをリダイレクトする

  6. 6

    URLのHTML <script>フラグメントを、純粋にクライアント側のアプリケーションのXSSに使用できますか?

  7. 7

    ハッシュ変更を伴う単純なSPA(シングルページアプリケーション)の実装

  8. 8

    java.sql.SQLException:SpringBootアプリケーションで単純なselectクエリを使用する場合の無効な列インデックス例外

  9. 9

    単純なイントラネットアプリケーション用のSharepointまたはWebapp?

  10. 10

    datagridの変換テーブル-単純なクラスレジストリアプリケーション

  11. 11

    単純なヘッドレスWindowsアプリケーションのプロジェクトタイプ

  12. 12

    単純なWebアプリケーションのイベントソーシングデータフロー

  13. 13

    単純なSpringBootアプリケーションを実行するときのIllegalAccessError例外

  14. 14

    Puppeteerをクライアント側のReactJSアプリケーションで動作させる方法

  15. 15

    単純なサーブレットアプリケーションのMavenアーキタイプ

  16. 16

    C ++で単純なFTPのようなクライアント/サーバーアプリを作成する

  17. 17

    asp.netmvcアプリケーションでリストボックスのクライアント側の検証を行う方法

  18. 18

    「...ターゲットマシンが積極的に拒否しました...」単純なクライアントサーバーアプリの例外

  19. 19

    単純なライブチャートをWPFアプリケーション(ColumnSeries)に構築しようとしています

  20. 20

    クライアント側でのWebアプリケーションの指紋スキャンの実装

  21. 21

    単純なBrowserComponentがアプリケーションをクラッシュさせる

  22. 22

    単純なオフラインデスクトップアプリケーションのデータを保存するにはどうすればよいですか?

  23. 23

    クライアント側アプリケーションでのYouTubev3APIキーの保護

  24. 24

    Spark-スタンドアロンクラスター上の単純なアプリケーションを理解する

  25. 25

    ac#.NETWebアプリケーションでサーバー側の処理のステータスをクライアント側に表示する方法

  26. 26

    .htaccess / Apache2を使用して単純なphpアプリケーションでサブディレクトリのwordpressアプリケーションを構成するにはどうすればよいですか?

  27. 27

    ActiveDirectoryログインの失敗時にHazelcastでバックアップされたSpringセッションシリアル化例外を伴うSpringBootアプリケーション

  28. 28

    このクライアント側アプリケーションは安全ですか?

  29. 29

    クライアント側でアプリケーションexeをデバッグする方法

ホットタグ

アーカイブ