Pregunta

He estado usando RMI para un proyecto en el que estoy trabajando actualmente y quiero enlazar desde varios hosts a un único registro de RMI.

Sin embargo, cuando intento hacerlo, aparece un error que dice

java.rmi.AccessException: Registry.Registry.bind no permitido; origin / 192.168.0.9 es un host no local

Lo hice en Google y parece que RMI evita que los hosts remotos se enlacen de forma predeterminada. Lo que quiero saber es ¿hay alguna forma de anular o evitar esto?

Si alguna sugerencia sobre cómo superar este problema sería muy apreciada, he intentado usar diferentes archivos de políticas y sobreescribir el administrador de seguridad, pero ninguno parece funcionar.

¿Fue útil?

Solución 5

Gracias por cada persona que responde. La solución que se me ocurrió al final fue usar el Cajo Framework Esto proporciona un sistema muy flexible para la distribución y me permitió manejar el registro cuando lo consideré oportuno. También puede funcionar detrás de NAT, firewalls y proxies HTTP, lo cual es muy útil.

Creo que el método de proxy sugerido por rndm.buoy funcionará en algunos casos, pero puede ser problemático en algunos sistemas. RMI parece tener algunos problemas al asociarse con la interfaz de red incorrecta. En particular, tuve este problema al ejecutar distribuciones Linux basadas en Debian.

Otros consejos

Hay una manera de sortear la limitación, pero es lo que es: una solución alternativa. De todos modos, siéntete libre de probarlo. Funciona para nosotros.

En el host que ejecuta el registro central de RMI, ejecute un pequeño servicio que vincule un objeto remoto con un solo método remoto: proxyRebind. La implementación de este método simplemente vincula el objeto que se le proporciona en el registro central (esto no fallaría porque el registro se encuentra en la misma máquina que este servicio).

Todos los demás hosts simplemente buscarán este objeto remoto e invocarán proxyRebind con sus propios objetos remotos.

Esto funciona porque la búsqueda en registros alojados remotamente está permitida. Tu intento original falló porque no se permite el enlace en registros alojados de forma remota.

Hazme saber si necesitas más claridad sobre esto.

/ RS

  

2 Hay una manera de moverse   La limitación pero es lo que es: una   trabajo alrededor De todos modos, siéntete libre de probar   fuera. Funciona para nosotros.

     

En el host que ejecuta el   registro central de RMI ejecutar un pequeño   servicio que unirá un remoto   objeto con un solo método remoto:   proxyRebind. La implementación de   este método simplemente liga el objeto   que se le suministra en la central   registro (esto no fallaría porque   El registro está en la misma máquina que   este servicio).

     

Todos los otros hosts simplemente buscarán   este objeto remoto e invocar   proxyRebind con su propio control remoto   objetos.

     

Esto funciona porque buscar de forma remota   Se permiten registros alojados. Tu   intento original fallido porque   vinculante en registros alojados de forma remota   no está permitido.

     

Hazme saber si necesitas más   claridad en esto.

Esto funciona perfectamente. Lo único que hay que tener cuidado es seguir siempre configurado correctamente. -Djava.rmi.server.hostname = " LOCAL HOST IP "

Puede que no entienda su pregunta, si es así, hágamelo saber.

Tengo una experiencia limitada con Java RMI, la usamos en nuestra clase de Patrones de Diseño con el Patrón de Proxy. (Libro de texto: Patrones de diseño de Headfirst)

No pudimos hacer que nuestros proyectos funcionaran desde fuera de la red de la universidad, pero funcionaron perfectamente cuando se conectaron directamente a la red. Según nuestro profesor, no fue posible utilizar RMI en nuestra implementación a través de Internet o wan. Una solución que sugirió fue que se requeriría una VPN. Creo que Vladimir tiene razón en que tiene que ver con que sea un servicio de nombres local.

Puede que esté equivocado, pero parece que la aplicación rmiregistry es esencialmente una envoltura sobre el servicio de nombres local. Lo que significa que no hay manera de hacer que apunte a objetos remotos.

Lo que necesita es una implementación de nomenclatura, y agrupada en esto. Considere la posibilidad de pasar a la solución de agrupación J2EE AS. El árbol JNDI se comparte dentro del clúster.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top