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 classes 只会抓取那里的 .class 文件,因此如果 SQLDriver 位于 JAR 或 ZIP 文件中(很可能在其中),则不会找到它。您需要执行“-cp 类;< 驱动程序路径 >”

于 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 回答