我们使用servlet来访问部署在不同主机上的远程ejb,并获取下面的堆栈跟踪中提到的异常.
如果它们部署在同一主机和同一域上,则可以正常工作
部署在两个不同的主机上时不起作用.
Glassfish版本:3.1 build 43
不知道我们哪里出错了.请帮忙.谢谢.
引发者:javax.naming.NamingException:异常解析Ejb为'远程ejb-ref name = TestService,远程3.x接口= 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:由于模式特定部分错误导致string_to_object转换失败名为TestService__3_x_Internal_RemoteBusinessHome__ vmcid:SUN minor code:9 completed:No] at com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:178)at com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl $ EjbReferenceProxy.create( ComponentEnvManagerImpl.java:1106)com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:776)at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:744)at com .sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:172)at 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已完成:在sun.reflect.NativeConstructorAccessorImpl上的sun.reflect.NativeConstructorAccessorImpl.newInstance0(本地方法)中为否.newInstance(NativeConstructorAccessorImpl.java:39)位于com.sun.corba.ee的java.lang.reflect.Constructor.newInstance(Constructor.java:513)的sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27). spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:248)位于com.sun的com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:95).来自com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.access $ 400(WrapperGenerator.java:107)的corba.ee.spi.orbutil.logex.WrapperGenerator.handleFullLogging(WrapperGenerator.java:387) .corba.ee.spi.orbutil.logex.WrapperGenerator $ 2.invoke(包装 Generator.java:511)位于com.sun.corba.ee.impl的$ Proxy142.soBadSchemaSpecific(未知来源)的com.sun.corba.ee.spi.orbutil.proxy.CompositeInvocationHandlerImpl.invoke(CompositeInvocationHandlerImpl.java:99) .resolver.INSURLOperationImpl.resolveCorbaname(INSURLOperationImpl.java:227)at com.sun.corba.ee.impl.resolver.INSURLOperationImpl.resolveINSURL(INSURLOperationImpl.java:154)at 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:---------- BEGIN服务器端堆栈跟踪---------- org.omg.CORBA.NO_PERMISSION:vmcid :0x0次要代码:0已完成:在com.sun.enterprise.iiop.security.Seccurity.SecServerRe的com.sun.enterprise.iiop.security.SecServerRequestInterceptor.handle_null_service_context(SecServerRequestInterceptor.java:421)中为否 questInterceptor.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)at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.getServantWithPI(CorbaServerRequestDispatcherImpl.java:333)at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java: 196)at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1624)at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1486)at com .sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:990)com.sun.corba.ee.iot.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:214)at com.sun .corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:742)位于com.sun.corba.ee的com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:539). impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2324)位于com.sun.corba.ee的com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl $ WorkerThread.performWork(ThreadPoolImpl.java:497). impl.orbutil.threadpool.ThreadPoolImpl $ WorkerThread.run(ThreadPoolImpl.java:540)---------- END服务器端堆栈跟踪---------- vmcid:0x0次要代码: 0完成:在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)处于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)at java.lang .reflect.Constructor.newInstance(Constructor.java:513)at com.sun.corba.ee.impl.protocol.giopmsgheaders.MessageBase.getSystemException(MessageBase.java:900)at com.sun.corba.ee.impl.protocol.giopmsgheaders.ReplyMessage_1_2.getSystemException(ReplyMessage_1_2.java:131)at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.getSystemExceptionReply( CorbaMessageMediatorImpl.java:637)com.sun.corba.ee.impl.protocol.CorbaClientRequestDispatcherImpl.processResponse(CorbaClientRequestDispatcherImpl.java:499)at com.sun.corba.ee.impl.protocol.CorbaClientRequestDispatcherImpl.marshalingComplete(CorbaClientRequestDispatcherImpl.java: 373)在com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.invoke(CorbaClientDelegateImpl.java:273)at com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.is_a(CorbaClientDelegateImpl.java:395)at org位于org.omg.CosNaming.NamingContextExtHelper.narrow(NamingContextExtHelper.java:73)的.omg.CORBA.portable.ObjectImpl._is_a(ObjectImpl.java:112)at com.sun.corba.ee.impl.resolver.INSURLOperationImpl.resolveCorbaname (INSURLOperationImpl.java:212)......还有47个
[#| 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 true true] ServerSocket [addr =/0:0:0:0:0:0:0:0,localport = 3700]套接字[addr =/173.13.42.205,port = 54829,localport = 3700] |#]
[#| 2011-12-02T11:37:16.113-0600 | FINE | glassfish3.1.1 | javax.enterprise.resource.corba | _ThreadID = 15; _ThreadName =螺纹-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 =螺纹-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;类名= 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 =螺纹-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;类名= 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 =螺纹-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;类名= org.glassfish.enterprise.iiop.impl.POAProtocolMgr; MethodName = getEjbDescriptor; | POAProtocolMgr.getEjbDescriptor < - :[B @ 77dc7838:null |#]
[#| 2011-12-02T11:37:16.183-0600 | FINE | glassfish3.1.1 | javax.enterprise.resource.corba.OMG | _ThreadID = 161; _ThreadName =螺纹-2;类名= com.sun.corba.ee .spi.orbutil.logex.WrapperGenerator; MethodName = handleFullLogging; | IOP01600015:可移植拦截器中的服务上下文添加失败,因为已存在id为15的服务上下文org.omg.CORBA.BAD_INV_ORDER:FINE:IOP01600015:便携式服务上下文添加失败拦截器,因为id为15的服务上下文已经存在vmcid:SUN次要代码:15已完成:在sun.reflect.DenegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)的sun.reflect.GeneratedConstructorAccessor729.newInstance(未知来源)处为no. lang.reflect.Constructor.newInstance(Constructor.java:513)位于com.sun.corba.ee的com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:248). com.sun.corba.ee.spi.orbutil.logex上的spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:95).wrapperGenerator.handleFullLogging(WrapperGenerator.java:387)位于com.sun.corba.ee.spi.orbutil的com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.access $ 400(WrapperGenerator.java:107). lo.comx.WrapperGenerator $ 2.invoke(WrapperGenerator.java:511)位于com的com.sun.corba.ee.spi.orbutil.proxy.CompositeInvocationHandlerImpl.invoke(CompositeInvocationHandlerImpl.java:99)at $ Proxy210.serviceContextAddFailed(Unknown Source). sun.corba.ee.impl.interceptors.ServerRequestInfoImpl.enqueue(ServerRequestInfoImpl.java:702)位于com.sun.corba的com.sun.corba.ee.impl.interceptors.ServerRequestInfoImpl.add_reply_service_context(ServerRequestInfoImpl.java:482). ee.impl.interceptors.ServerRequestInfoImpl.setCurrentExecutionPoint(ServerRequestInfoImpl.java:738)位于com.sun.corba.ee.impl的com.sun.corba.ee.icept.interceptors.PIHandlerImpl.invokeServerPIEndingPoint(PIHandlerImpl.java:632). com.un.corba.ee.impl.protocol.Co上的protocol.CorbaMessageMediatorImpl.runInterceptors(CorbaMessageMediatorImpl.java:2189)rbaMessageMediatorImpl.createResponseHelper(CorbaMessageMediatorImpl.java:2101)at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.createResponseHelper(CorbaMessageMediatorImpl.java:2089)at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.createSystemExceptionResponse( CorbaMessageMediatorImpl.java:2014)com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleThrowableDuringServerDispatch(CorbaMessageMediatorImpl.java:1796)at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleThrowableDuringServerDispatch(CorbaMessageMediatorImpl.java: 1758)at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:255)at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1624)at com .sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1486)at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(Co rbaMessageMediatorImpl.java:990)com.sun.corba.ee.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:214)at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl. java:742)at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:539)at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2324) at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl $ WorkerThread.performWork(ThreadPoolImpl.java:497)at 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);
}
}
Run Code Online (Sandbox Code Playgroud)
}
<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>
Run Code Online (Sandbox Code Playgroud)
@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;
}
Run Code Online (Sandbox Code Playgroud)
<?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>
Run Code Online (Sandbox Code Playgroud)
也许不是你问题的答案,但我会在这里提到:
我们在glassfish 3.1.2中遇到了类似的问题,其中发生的异常提到CORBA.NO_PERMISSION并且服务器端没有堆栈跟踪.在日志文件的某处,我们找到了ExceptionInvalid 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-listener,因此,发生异常并且远程处理将不再起作用.作为解决方法,您可以从domain.xml手动中删除SSL-config条目以再次进行远程处理工作.但是,只要在管理界面中再次打开IOP-Listener部分,就会在glassfish重新启动时再次创建该条目.
| 归档时间: |
|
| 查看次数: |
3800 次 |
| 最近记录: |