У меня есть свинг-клиент, который подключается к моему приложению ejb2, развернутому в JBoss 5.1.От Клиента есть особое требование сделать его доступным в Интернете.
Архитектура развертывания выглядит следующим образом:
swing_client -> extranet_ip | firewall |-> iis7_machine -> jboss5.1_machine.
Свойства jndi в клиенте следующие: Context.PROVIDER_URL = http://extranet_ip:9180/invoker/JNDIFactory Context.INITIAL_CONTEXT_FACTORY = org.jboss.naming.HttpNamingContextFactory
Эта конфигурация работает нормально, когда клиент находится внутри внутренней сети.Но он не работает в Интернете (экстрасеть).
При первоначальной попытке я получил сообщение об ошибке «Отказано в соединении». После просмотра некоторых сообщений на различных форумах я изменил файл server \ deploy \ http-invoker.sar.\ META-INF \ jboss-service.xml, чтобы отразить extranet_ip в invokerURL.
После этого я получаю следующую ошибку.
org.jboss.remoting.CannotConnectException: Не удается получить соединение с сервером.Проблема при установлении соединения с сокетом для InvokerLocator [socket: //10.200.1.193: 4546 /? DataType = invocation & enableTcpNoDelay = true & marshaller = org.jboss.invocation.unified.marshall.InvocationMarshaller & unmarshaller = org.jbossun.in.sh. 101.ht.*
Где 10.200.1.193 - это IP-адрес в интрасети компьютера с сервером JBoss.
Я попытался изменить параметр trasport в remoting-jboss-beans.xml на http, но в то время клиент не работал ви интранет, и экстранет.
Пожалуйста, кто-нибудь предложит способ решения этой проблемы.Или есть какой-то другой способ реализовать RMI поверх Http в JBoss?
Обновление : В качестве решения мне пришлось изменить архитектуру развертывания следующим образом.
swing_client --> extranet_ip | firewall |-> jboss5.1_machine
, где сервер приложений JBoss будет напрямую доступен через брандмауэр.Затем обновите clientConnectAddress в remoting-jboss-beans.xml до IP-адреса экстрасети.Также откройте порты 8080 и 4446 в брандмауэре для этого адреса.
Таким образом, клиент Swing работает, если я использую свойства jnid следующим образом.
Context.PROVIDER_URL: http://extranet_ip:8080/invoker/JNDIFactory
Context.INITIAL_CONTEXT_FACTORY: org.jboss.naming.HttpNamingContextFactory
Но все еще ищем решение, в котором нет необходимости открывать какие-либо нестандартные порты и не нужно напрямую выставлять сервер приложений.