Мы используем сервлет для доступа к удаленному ejb, развернутому на другом хосте, и получения
исключение, упомянутое в следе стека ниже.
- Удаленный доступ работает, если клиент сервлета и удаленная война ejb развернуты в разных доменах и на одном хосте.
Работает, если они развернуты на одном хосте и в одном домене
не работает при развертывании на двух разных хостах.
- Рассматривая исключение «CORBA.NO_PERMISSION: vmcid: 0x0, дополнительный код: 0 завершено: нет», мы подумали, что это может быть проблемой безопасности.
Но тестовое приложение ejb не имело никаких настроек безопасности. Попытка добавления "" подробностей в sun-ejb-jar.xml
и использовал ProgrammaticLogin API. Мы получили то же исключение. Не уверен, что конфигурация безопасности была правильной.
- Уровень журнала glassfish-corba был установлен на уровне лучших на сервере, где было развернуто приложение ejb. Затем мы получили это исключение "
org.omg.CORBA.BAD_INV_ORDER: FINE: IOP01600015: Не удалось добавить контекст службы в переносимом перехватчике, поскольку контекст службы с идентификатором 15 уже существует vmcid: вспомогательный код SUN: 15 выполнено: нет ".
Полная трассировка стека указана ниже в журнале сервера.
- попытался использовать внешние тестовые примеры из ошибки 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>