Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

318
Views
Java RMI en la ventana acoplable

He estado tratando de hacer que una aplicación Java RMI funcione en docker como prueba desde hace algún tiempo.

La aplicación funciona cuando ambos componentes están en la misma PC, cuando el "servidor" está en docker no.

¿Cómo puedo ejecutar un método remoto que he dockerizado?

Hay un fragmento de mi cliente:

 Registry registry = LocateRegistry.getRegistry(DOCKER_EXPOSED_PORT); // this prints any found registry names String[] s = registry.list(); System.out.println(s[0]); CommonInterface stub = (CommonInterface) registry.lookup("RegisteredStub"); int response = stub.CommonMethod();

Y mi "servidor":

 CommonInterface stub = (CommonInterface) UnicastRemoteObject.exportObject(obj, 2000); LocateRegistry.createRegistry(2000); Registry registry = LocateRegistry.getRegistry(2000); registry.bind("RegisteredStub", stub);

También uso System.out.println(Inet4Address.getLocalHost().getHostAddress()); para obtener la dirección IP de ambos componentes, son iguales cuando se ejecutan localmente pero diferentes cuando el servidor está en la ventana acoplable como se esperaba.

Mi cliente puede "leer" el código auxiliar registrado del contenedor acoplable, por lo que si le cambio el nombre a RegisteredStub2 , entonces

 String[] s = registry.list(); System.out.println(s[0]);

imprime RegisteredStub2 para que, de alguna manera, mi cliente pueda ver el registro en Docker pero no pueda acceder al método remoto.

El cliente falla con: java.net.ConnectException: Conexión agotada: connect java.rmi.ConnectException: Conexión rechazada para hospedar: DOCKER IP;

cuando llamo al método remoto int response = stub.CommonMethod(); desde el cliente de escritorio.

Aquí están mis comandos de archivos acoplables:

 EXPOSE 2000 CMD ["./rmiregistry 2000"] CMD ["./rmid -J-Djava.security.policy=rmid.policy -port 2000"]

¡Gracias!

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Puede que sea demasiado tarde para ser útil, pero recientemente construí un proyecto experto de varios módulos para una tarea universitaria y lo dockericé.

Tu docker-compose.yml debería verse así:

 version: '3' services: server: build: server client: build: client environment: SERVER_HOST: server depends_on: - server

Sus servidores Dockerfile algo como esto:

 FROM openjdk:8-jre-alpine COPY target/server-jar-with-dependencies.jar /server.jar CMD /usr/bin/java -jar /server.jar

Y sus clientes Dockerfile algo como esto:

 FROM openjdk:8-jre-alpine ENV SERVER_HOST=localhost COPY target/client-jar-with-dependencies.jar /client.jar CMD /usr/bin/java -jar /client.jar $SERVER_HOST

Tenga en cuenta la variable $SERVER_HOST pasada al cliente, esto le permitirá hacer lo siguiente en el código del cliente:

 Registry registry = LocateRegistry.getRegistry(args[0]);
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!