1

Java RMI は次のコード行にどのような影響を与えますか?

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

RMI 呼び出しでは機能しません。私はJavaとRMIが初めてなので、回答を詳しく説明してください。

編集:

//String connect to SQL server
String url = "jdbc:sqlserver://" + strServerIPAddress + ":1433" + ";DatabaseName=" + strDatabaseName;

try {

    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

} 
catch (java.lang.ClassNotFoundException e) 

{ 
    System.out.println(e.getCause().toString());
    return false;
}

コードを貼り付けました。完全なスタック トレースを取得する方法を教えてください。

これが私のコードを実行するために使用するバッチファイルです

% 私は自分のソースコードのディレクトリにいます

javac -d classes -cp classes *.java
rmic -classpath classes -d classes myrmi.DummyImpl myrmi.BookImpl    
start rmiregistry -J-Dsun.rmi.loader.logLevel=VERBOSE

start java -cp classes -Djava.rmi.server.codebase=file:///C:\NetBeansProjects\MyProject\src\myrmi\classes\ -Djava.security.policy=java.policy 

myrmi.Server SEB 
start java -cp classes -Dsun.rmi.loader.logLevel=VERBOSE  -Djava.security.policy=java.policy myrmi.Client 
4

3 に答える 3

2

com.microsoft.sqlserver.jdbc.SQLServerDriver を含む JAR ファイルは、リモート インスタンスが実行されている VM のクラスパスで使用できますか?

-cp クラスはその下の .class ファイルのみを取得するため、SQLDriver が JAR ファイルまたは ZIP ファイル (おそらくそこにある) にある場合は見つかりません。「-cp classes;< ドライバーへのパス >」を実行する必要があります。

于 2009-11-27T04:31:28.530 に答える
0

Class.forName() を使用する場合、メソッドに渡される文字列には、クラスパスに存在するクラスが含まれている必要があります。

于 2009-11-27T04:19:38.913 に答える
0

考えられる原因は、ドライバーをロードする権限またはリモート データベースに接続する権限がないことです。大まかに言えば、スタック上のすべてのフレームと、現在のスレッドが作成された時点のすべてのフレームには、必要なアクセス許可が必要です (java.security.AccessController.doPrivilegedこれを操作するために使用できます)。セキュリティ チェックを表示するために、システム プロパティを介して設定できるデバッグ オプションがいくつかあります ( 内または周辺のソースを参照してくださいAccessController)。

どこに接続しようとしているのかわからない。RMI によって動的にロードされたコードからのものである場合、それは奇妙なことです。

を使用して、例外から完全なスタック トレースを取得できますexc.printStackTrace()

于 2009-11-27T06:07:16.043 に答える