Java RMI AWS две машины - PullRequest
       17

Java RMI AWS две машины

0 голосов
/ 17 ноября 2018

У меня есть две машины:

Сервер: AWS - EC2 - Ubuntu 18.04 Lts

Клиент: Windows 10

Если я попытаюсь запустить свой код только на машине AWS, этоработает нормально, но если я попробую то же самое на другой машине, у меня есть ConnectionRefused по времени на клиентской машине

Код:

AloMundoServidor.java

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import java.io.*; 

public class AloMundoServidor implements AloMundo {
private static int count, fila = 0;
private static boolean lock;

public AloMundoServidor() {}

public String digaAloMundo() throws Exception {
    System.out.println("Chamada de aplicacao Cliente recebida! " + count);
    /*fila++;
    if(lock){
        try { 
            wait();
        } catch (InterruptedException e)  {
            Thread.currentThread().interrupt(); 
            //Log.error("Thread interrupted", e); 
        }
    }
    lock = true;
    */
    File file = new File("test.txt"); 

    BufferedReader reader = new BufferedReader(new FileReader(file)); 

    String text = "", line; 
    while ((line = reader.readLine()) != null) {
        text = text + "\n" + line; 
    } 

    count++;
    Thread.sleep(5000);

    // fila--;
    // notify();
    // if(fila==0) {    
        // lock = false;
    // }        

    return text;
}

public static void main(String args[]) {
    count = 0;
    lock = false;
    try {
        AloMundoServidor obj = new AloMundoServidor();
        AloMundo stub = (AloMundo) UnicastRemoteObject.exportObject(obj, 0);
        Registry registry = LocateRegistry.getRegistry();
        registry.bind("AloMundo", stub);
        System.out.println("Servidor pronto!");
    } catch (Exception e) {
        System.err.println("Capturando excecao no Servidor: " + e.toString());
        e.printStackTrace();
    }
}

AluMundoCliente.java:

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class AloMundoCliente {
private AloMundoCliente() {}
public static void main(String[] args) {
    String host = "54.244.xxx.xxx";
    try {
            Registry registry = LocateRegistry.getRegistry(host);
            AloMundo stub = (AloMundo) registry.lookup("AloMundo");
            String resposta = stub.digaAloMundo();
            System.out.println("resposta: " + resposta);
        } catch (Exception e) {
            System.err.println("Capturando a exceção no Cliente: " + e.toString());
            e.printStackTrace();
        }
    }
}

AloMundo.java

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface AloMundo extends Remote {
    String digaAloMundo() throws Exception;
}

Я выполняю telnet 54.244.xxx.xxx 1099 и его список.Я попробовал java AloMundoServidor -Djava.rmi.server.hostname='54.244.xxx.xxx' И безуспешно!

Редактировать.: Решено

Запустить клиент:

java -Djava.security.policy=server.policy AloMundoCliente

Изменен код клиента в реестре с IP-адресом сервера:

Registry registry = LocateRegistry.getRegistry("xx.xx.xx.xx");

Создать server.policy:

grant{
    permission java.security.AllPermission;
};

Запустить сервер:

java -Djava.security.policy=server.policy -Djava.rmi.server.hostname=XX.XX.XX.XX AloMundoServer
...