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
答案 0 :(得分:2)
在运行远程实例的VM的类路径上是否提供了带有com.microsoft.sqlserver.jdbc.SQLServerDriver的JAR文件?
-cp类只会获取其下的.class文件,因此如果SQLDriver位于JAR或ZIP文件中(可能位于其中),则无法找到它。您需要执行“-cp classes;< path to driver>”
答案 1 :(得分:0)
使用Class.forName()时,传递给方法的字符串必须包含类路径中的类。
答案 2 :(得分:0)
可能的原因是您无权加载驱动程序或连接到远程数据库。粗略地说,堆栈中的所有帧以及创建当前线程的点必须具有所需的权限(java.security.AccessController.doPrivileged
可以用来玩这个)。可以通过系统属性设置一些调试选项来显示安全检查(请参阅AccessController
中或附近的源。)
我不确定您在哪里尝试建立连接。如果是来自RMI动态加载的代码,那就太奇怪了。
您可以使用exc.printStackTrace()
从异常中获取完整堆栈跟踪。