Невозможно сделать удаленный доступ EJB с другого хоста - PullRequest
1 голос
/ 03 декабря 2011

Мы используем сервлет для доступа к удаленному ejb, развернутому на другом хосте, и получения исключение, упомянутое в следе стека ниже.

  1. Удаленный доступ работает, если клиент сервлета и удаленная война ejb развернуты в разных доменах и на одном хосте.
  2. Работает, если они развернуты на одном хосте и в одном домене

  3. не работает при развертывании на двух разных хостах.

  4. Рассматривая исключение «CORBA.NO_PERMISSION: vmcid: 0x0, дополнительный код: 0 завершено: нет», мы подумали, что это может быть проблемой безопасности. Но тестовое приложение ejb не имело никаких настроек безопасности. Попытка добавления "" подробностей в sun-ejb-jar.xml и использовал ProgrammaticLogin API. Мы получили то же исключение. Не уверен, что конфигурация безопасности была правильной.
  5. Уровень журнала glassfish-corba был установлен на уровне лучших на сервере, где было развернуто приложение ejb. Затем мы получили это исключение " org.omg.CORBA.BAD_INV_ORDER: FINE: IOP01600015: Не удалось добавить контекст службы в переносимом перехватчике, поскольку контекст службы с идентификатором 15 уже существует vmcid: вспомогательный код SUN: 15 выполнено: нет ". Полная трассировка стека указана ниже в журнале сервера.
  6. попытался использовать внешние тестовые примеры из ошибки Glassfish: http://java.net/jira/browse/GLASSFISH-15523. Мы получить то же исключение.

Версия Glassfish: 3.1, сборка 43

Не уверен, куда мы идем не так. Пожалуйста помоги. Спасибо.

Журнал на стороне клиента:

Вызывается: javax.naming.NamingException: исключение, разрешающее Ejb для 'Remote ejb-ref name = TestService, Remote 3.x interface = com.medallion.test.service.TestService, ejb-link = null, lookup =, mappedName =, jndi-name = corbaname: iiop: 50.57.150.62: 3700 # TestService, refType = Session '. Фактическое (возможно внутреннее) имя удаленного JNDI, используемое для поиска: «corbaname: iiop: 50.57.150.62: 3700 # TestService__3_x_Internal_RemoteBusinessHome__ '[Исключением корня является org.omg.CORBA.BAD_PARAM: FINE: IOP00100009: не удалось преобразовать определенную часть строки в цепочку объектов из-за недопустимого преобразования схемы в имени TestService__3_x_Internal_RemoteBusinessHome__ vmcid: второстепенный код SUN: 9 выполнено: нет] в com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference (EjbNamingReferenceManagerImpl.java:178) в com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl $ EjbReferenceProxy.create (ComponentEnvManagerImpl.java:1106) в com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup (GlassfishNamingManagerImpl.java:776) в com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup (GlassfishNamingManagerImpl.java:744) на com.sun.enterprise.naming.impl.JavaURLContext.lookup (JavaURLContext.java:172) на com.sun.enterprise.naming.impl.SerialContext.lookup (SerialContext.java:498) ... еще 38 Вызвано: org.omg.CORBA.BAD_PARAM: FINE: IOP00100009: преобразование string_to_object не выполнено из-за неправильной части схемы в имени TestService__3_x_Internal_RemoteBusinessHome__ vmcid: вспомогательный код SUN: 9 выполнено: нет at sun.reflect.NativeConstructorAccessorImpl.newInstance0 (собственный метод) в sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:27) в java.lang.reflect.Constructor.newInstance (Constructor.java:513) в com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException (CorbaExtension.java:248) на com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException (CorbaExtension.java:95) в com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.handleFullLogging (WrapperGenerator.java:387) на com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.access $ 400 (WrapperGenerator.java:107) в com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator $ 2.invoke (WrapperGenerator.java:511)в com.sun.corba.ee.spi.orbutil.proxy.CompositeInvocationHandlerImpl.invoke (CompositeInvocationHandlerImpl.java:99) на $ Proxy142.soBadSchemaSpecific (неизвестный источник) на com.sun.corba.ee.impl.resolver.INSURLOperationImpl.resolveCorbaname (INSURLOperationImpl.java:227) на com.sun.corba.ee.impl.resolver.INSURLOperationImpl.resolveINSURL (INSURLOperationImpl.java:154) в com.sun.corba.ee.impl.resolver.INSURLOperationImpl.operate (INSURLOperationImpl.java:145) на com.sun.corba.ee.impl.orb.ORBImpl.string_to_object (ORBImpl.java:976) в com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference (EjbNamingReferenceManagerImpl.java:171) ... еще 43 Вызывается: org.omg.CORBA.NO_PERMISSION: ---------- НАЧАТЬ трассировку стека на стороне сервера ---------- org.omg.CORBA.NO_PERMISSION: vmcid: 0x0 младший код: 0 выполнено: нет в com.sun.enterprise.iiop.security.SecServerRequestInterceptor.handle_null_service_context (SecServerRequestInterceptor.java:421) в com.sun.enterprise.iiop.security.SecServerRequestInterceptor.receive_request (SecServerRequestInterceptor.java:443) в com.sun.corba.ee.impl.interceptors.InterceptorInvoker.invokeServerInterceptorIntermediatePoint (InterceptorInvoker.java:612) в com.sun.corba.ee.impl.interceptors.PIHandlerImpl.invokeServerPIIntermediatePoint (PIHandlerImpl.java:612) в com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.getServantWithPI (CorbaServerRequestDispatcherImpl.java:333) в com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch (CorbaServerRequestDispatcherImpl.java:196) в com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest (CorbaMessageMediatorImpl.java:1624) в com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest (CorbaMessageMediatorImpl.java:1486) в com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput (CorbaMessageMediatorImpl.java:990) в com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback (RequestMessage_1_2.java:214) в com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest (CorbaMessageMediatorImpl.java:742) в com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch (CorbaMessageMediatorImpl.java:539) в com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork (CorbaMessageMediatorImpl.java:2324) в com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl $ WorkerThread.performWork (ThreadPoolImpl.java:497) в com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl $ WorkerThread.run (ThreadPoolImpl.java:540) ---------- КОНЕЦ трассировки стека на стороне сервера ---------- vmcid: 0x0 вспомогательный код: 0 выполнено: нет at sun.reflect.NativeConstructorAccessorImpl.newInstance0 (собственный метод) в sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:27) в java.lang.reflect.Constructor.newInstance (Constructor.java:513) в com.sun.corba.ee.impl.protocol.giopmsgheaders.MessageBase.getSystemException (MessageBase.java:900) в com.sun.corba.ee.impl.protocol.giopmsgheaders.ReplyMessage_1_2.getSystemException (ReplyMessage_1_2.java:131) в com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.getSystemExceptionReply (CorbaMessageMediatorImpl.java:637) в com.sun.corba.ee.impl.protocol.CorbaClientRequestDispatcherImpl.processResponse (CorbaClientRequestDispatcherImpl.java:499) в com.sun.corba.ee.impl.protocol.CorbaClientRequestDispatcherImpl.marshalingComplete (CorbaClientRequestDispatcherImpl.java:373) в com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.invoke (CorbaClientDelegateImpl.java:273) на com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.is_a (CorbaClientDelegateImpl.java:395) в org.omg.CORBA.portable.ObjectImpl._is_a (ObjectImpl.java:112) в org.omg.CosNaming.NamingContextExtHelper.narrow (NamingContextExtHelper.java:73)на com.sun.corba.ee.impl.resolver.INSURLOperationImpl.resolveCorbaname (INSURLOperationImpl.java:212) ... еще 47

Журнал на стороне сервера (после установки уровня журнала corba на лучшее):

[# | 2011-12-02T11: 37: 16.111-0600 | FINE | glassfish3.1.1 | javax.enterprise.resource.corba.org.glassfish.enterprise.iiop.impl | _ThreadID = 161; _ThreadName = резьбовых 2; ИмяКласс = org.glassfish.enterprise.iiop.impl.IIOPSSLSocketFactory; MethodName = setAcceptedSocketOptions; | setAcceptedSocketOptions: SocketOrChannelAcceptorImpl [3700 IIOP_CLEAR_TEXT истинная правда] ServerSocket [адр = / 0: 0: 0: 0: 0: 0: 0: 0 , localport = 3700] Сокет [addr = / 173.13.42.205, порт = 54829, localport = 3700] | #]

[# | 2011-12-02T11: 37: 16.113-0600 | FINE | glassfish3.1.1 | javax.enterprise.resource.corba | _ThreadID = 15; _ThreadName = Thread-2; ИмяКласса = com.sun.logging. LogDomains $ 1; MethodName = getResourceBundle; | Невозможно найти пакет ресурсов для этого регистратора. имя класса, которое не удалось: org.glassfish.enterprise.iiop.impl.GlassFishORBManager | #]

[# | 2011-12-02T11: 37: 16.180-0600 | FINE | glassfish3.1.1 | javax.enterprise.resource.corba | _ThreadID = 161; _ThreadName = Thread-2; ИмяКласса = com.sun.logging. LogDomains $ 1; MethodName = getResourceBundle; | Невозможно найти пакет ресурсов для этого регистратора. имя класса, которое не удалось: org.glassfish.enterprise.iiop.impl.GlassFishORBManager | #]

[# | 2011-12-02T11: 37: 16.179-0600 | FINE | glassfish3.1.1 | javax.enterprise.resource.corba.org.glassfish.enterprise.iiop.impl | _ThreadID = 161; _ThreadName = резьбовых 2; ClassName = org.glassfish.enterprise.iiop.impl.POAProtocolMgr; MethodName = getEjbDescriptor; | POAProtocolMgr.getEjbDescriptor->: [B @ 77dc7838 | #]

[# | 2011-12-02T11: 37: 16.181-0600 | FINE | glassfish3.1.1 | javax.enterprise.resource.corba | _ThreadID = 161; _ThreadName = Thread-2; ИмяКласса = com.sun.logging. LogDomains $ 1; MethodName = getResourceBundle; | Невозможно найти пакет ресурсов для этого регистратора. имя класса, которое не удалось: org.glassfish.enterprise.iiop.impl.GlassFishORBManager | #]

[# | 2011-12-02T11: 37: 16.181-0600 | FINE | glassfish3.1.1 | javax.enterprise.resource.corba.org.glassfish.enterprise.iiop.impl | _ThreadID = 161; _ThreadName = резьбовых 2; ClassName = org.glassfish.enterprise.iiop.impl.POAProtocolMgr; MethodName = getEjbDescriptor; | POAProtocolMgr.getEjbDescriptor: [B @ 77dc7838: ejbId: 4,294,967,297 | #]

[# | 2011-12-02T11: 37: 16.181-0600 | FINE | glassfish3.1.1 | javax.enterprise.resource.corba | _ThreadID = 161; _ThreadName = Thread-2; ИмяКласса = com.sun.logging. LogDomains $ 1; MethodName = getResourceBundle; | Невозможно найти пакет ресурсов для этого регистратора. имя класса, которое не удалось: org.glassfish.enterprise.iiop.impl.GlassFishORBManager | #]

[# | 2011-12-02T11: 37: 16.181-0600 | FINE | glassfish3.1.1 | javax.enterprise.resource.corba.org.glassfish.enterprise.iiop.impl | _ThreadID = 161; _ThreadName = резьбовых 2; ClassName = org.glassfish.enterprise.iiop.impl.POAProtocolMgr; MethodName = getEjbDescriptor; | POAProtocolMgr.getEjbDescriptor <-: [B @ 77dc7838: null | #] </p>

[# | 2011-12-02T11: 37: 16.183-0600 | FINE | glassfish3.1.1 | javax.enterprise.resource.corba.OMG | _ThreadID = 161; _ThreadName = Thread-2; ИмяКласса = com.sun. corba.ee.spi.orbutil.logex.WrapperGenerator; MethodName = handleFullLogging; | IOP01600015: Не удалось добавить контекст службы в переносимом перехватчике, поскольку контекст службы с идентификатором 15 уже существует org.omg.CORBA.BAD_INV_ORDER: FINE: IOP01600015: не удалось добавить контекст службы в переносимом перехватчике, поскольку контекст службы с идентификатором 15 уже существует vmcid: вспомогательный код SUN: 15 выполнено: нет at sun.reflect.GeneratedConstructorAccessor729.newInstance (неизвестный источник) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:27) в java.lang.reflect.Constructor.newInstance (Constructor.java:513) в com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException (CorbaExtension.java:248) на com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException (CorbaExtension.java:95)на com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.handleFullLogging (WrapperGenerator.java:387) на com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.access $ 400 (WrapperGenerator.java:107) в com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator $ 2.invoke (WrapperGenerator.java:511) в com.sun.corba.ee.spi.orbutil.proxy.CompositeInvocationHandlerImpl.invoke (CompositeInvocationHand99) в $ Proxy210.serviceContextAddFailed (Неизвестный источник) по адресу com.sun.corba.ee.impl.interceptors.ServerRequestInfoImpl.enqueue (ServerRequestInfoImpl.java:702) по адресу com.sun.corba.ee.impl.interceptors.SI(ServerRequestInfoImpl.java:482) в com.sun.corba.ee.impl.interceptors.ServerRequestInfoImpl.setCurrentExecutionPoint (ServerRequestInfoImpl.java:738) в com.sun.corba.ee.impl.interIEors.PIHandlerImpl: 632) на com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.runInterceptors (CorbaMessageMediatorImpl.java:2189)по адресу com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.createResponseHelper (CorbaMessageMediatorImpl.java:2101) по адресу com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.creessmpjj.corba.ee.impl..impl.protocol.CorbaMessageMediatorImpl..CorbaMessageMediatorImpl.rbaMessageMediatorImpl.handleInput (CorbaMessageMediatorImpl.java:990) в com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback (RequestMessage_1_2.java:214) в com.sun.mpess.ba.handleRequest (CorbaMessageMediatorImpl.java:742) по адресу com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch (CorbaMessageMediatorImpl.java:539) по адресу com.sun.corba.ee.impl.essmpi.Java: 2324) на com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl $ WorkerThread.performWork (ThreadPoolImpl.java:497) на com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl $ WorkerThread.run (ThreadPoolImpl.java:540) | #]

Используемый код:

Клиент:

сервлет:

@ WebServlet ("/ TestServlet")Открытый класс TestServlet расширяет HttpServlet {

@EJB(name = "TestService")
private TestService testService;

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    PrintWriter w = response.getWriter();

    try {
        w.write("Test o/p: " + testService.testEJB("This is a test msg") + "\n");

    } catch (Exception e) {
        e.printStackTrace(w);
    }

}

}

sun-web.xml:

<ejb-ref>
    <ejb-ref-name>TestService</ejb-ref-name>
    <!-- <jndi-name>corbaname:iiop:localhost:3700#TestService</jndi-name> -->
    <jndi-name>corbaname:iiop:<ip>:3700#TestService</jndi-name>
</ejb-ref>

Удаленный ejb:

@ Stateless (mappedName= "TestService") открытый класс TestSerViceImpl реализует Serializable, TestService {

private static final long serialVersionUID = 1L;
private static final Logger logger = Logger.getLogger(TestServiceImpl.class.getName());

@Resource EJBContext ejbContext;

@Override
public String testEJB(String testStr) {

    String userName = ejbContext.getCallerPrincipal().getName();

    System.out.println("Username: " + userName);

    return "Msg Recieved: " + testStr;

}

sun-ejb-jar.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 EJB 3.0//EN" "http://www.sun.com/software/appserver/dtds/sun-ejb-jar_3_0-0.dtd">
<sun-ejb-jar>
<enterprise-beans>
    <ejb>
        <ejb-name>TestServiceImpl</ejb-name>
        <jndi-name>TestService</jndi-name>
        <!--<ior-security-config>
            <as-context>
                <auth-method>USERNAME_PASSWORD</auth-method>
                <realm>database-realm</realm>
                <required>true</required>
            </as-context>
            <sas-context>
                <caller-propagation>supported</caller-propagation>
            </sas-context>
            <transport-config>
                <establish-trust-in-client>supported</establish-trust-in-client>
            </transport-config>
        </ior-security-config>-->
    </ejb>
</enterprise-beans>
<security-role-mapping>
</security-role-mapping>
  </sun-ejb-jar>

1 Ответ

5 голосов
/ 12 сентября 2013

Возможно, не ответ на ваш вопрос, но я упомяну об этом здесь:

У нас была похожая проблема со glassfish 3.1.2, где возникающее исключение упоминает CORBA.NO_PERMISSION, и на сервере нет трассировки стекабоковая сторона.Где-то в лог-файле мы нашли исключение Invalid iiop-listener orb-listener-1. Lazy-init not supported for SSL iiop-listeners

Это ошибка в Glassfish. См .:

https://java.net/jira/browse/GLASSFISH_CORBA-13

Интерфейс администратора Glassfish автоматически добавляет запись SSL внастроенный не SSL-IIop-слушатель, из-за этого происходит исключение и удаленное взаимодействие больше не будет работать.В качестве обходного пути вы можете удалить запись SSL-config из domain.xml вручную, чтобы снова получить удаленную работу.Но как только вы снова откроете раздел IOP-Listener в интерфейсе администратора, запись будет снова создана при перезагрузке Glassfish.

...