Одно отличие, которое мы можем заметить в Windows:
Если вы используете Runtime.getRuntime().exec("rmiregistry 1024");
вы видите, что процесс rmiregistry.exe будет запущен в вашем диспетчере задач
тогда как если вы используете Registry registry = LocateRegistry.createRegistry(1024);
вы не можете видеть процесс, запущенный в диспетчере задач,
Я думаю, что Java обрабатывает это по-другому.
а это мой файл server.policy
Перед запуском приложения убедитесь, что вы убили все свои существующие
javaw.exe и rmiregistry.exe соответствуют вашим программам rmi, которые
уже работает.
Следующий код работает для меня, используя Registry.LocateRegistry()
или
Runtime.getRuntime.exec("");
// Standard extensions get all permissions by default
grant {
permission java.security.AllPermission;
};
VM аргумент
-Djava.rmi.server.codebase=file:\C:\Users\Durai\workspace\RMI2\src\
Код:
package server;
import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import java.rmi.Remote;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class HelloServer
{
public static void main (String[] argv)
{
try {
if(System.getSecurityManager()==null){
System.setProperty("java.security.policy","C:\\Users\\Durai\\workspace\\RMI\\src\\server\\server.policy");
System.setSecurityManager(new RMISecurityManager());
}
Runtime.getRuntime().exec("rmiregistry 1024");
// Registry registry = LocateRegistry.createRegistry(1024);
// registry.rebind ("Hello", new Hello ("Hello,From Roseindia.net pvt ltd!"));
//Process process = Runtime.getRuntime().exec("C:\\Users\\Durai\\workspace\\RMI\\src\\server\\rmi_registry_start.bat");
Naming.rebind ("//localhost:1024/Hello",new Hello ("Hello,From Roseindia.net pvt ltd!"));
System.out.println ("Server is connected and ready for operation.");
}
catch (Exception e) {
System.out.println ("Server not connected: " + e);
e.printStackTrace();
}
}
}