在不同的glassfish 4.0实例上调用远程ejb [英] Calling a remote ejb on a different glassfish 4.0 instance

查看:319
本文介绍了在不同的glassfish 4.0实例上调用远程ejb的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经安装了两台服务器。两者都在运行一个自己的Glassfish 4.0域。



在一个服务器上,我已经安装了一个Singleton Remote EJB。此Glassfish具有指定的IIOP监听器(name = UF enabled = true network adress = 192.168.10.95 listener port = 1072)。



第二个Glassfish实例正在运行一个简单的JSF-2.2应用。
现在我试图在一个JSF-Managed-Bean构造函数中连接到远程ejb。

 属性props = new Properties(); 
props.put(Context.INITIAL_CONTEXT_FACTORY,com.sun.enterprise.naming.SerialInitContextFactory);
props.put(Context.PROVIDER_URL,iiop://192.168.10.95:1072);
props.setProperty(org.omg.CORBA.ORBInitialHost,192.168.10.95);
props.setProperty(org.omg.CORBA.ORBInitialPort,1072);
InitialContext ctx = new InitialContext(props);
return(IUF)ctx.lookup(java:global / UFRemote / UFRemote!com.uf.IUF);

查找花了大约一分钟,最后出现以下异常:

  SEVERE:javax.naming.NamingException:SerialContext中的'java:global / UFRemote / UFRemote!uf.IUserFramework'的查找失败[myEnv = {org.omg。 CORBA.ORBInitialPort = 1072,java.naming.provider.url = iiop://192.168.10.95:1072,java.naming.factory.initial = com.sun.enterprise.naming.SerialInitContextFactory,org.omg.CORBA.ORBInitialHost = 192.168.10.95,java.naming.factory.state = com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl,java.naming.factory.url.pkgs = com.sun.enterprise.naming} [根异常是javax.naming.NamingException:无法获取SerialContextProvider for SerialContext [myEnv = {org.omg.CORBA.ORBInitialPort = 1072,java.naming.provider.url = iiop://192.168.10.95:1072,java.naming.factory。 initial = com.sun.enterprise.naming.SerialInitContextFactory,org.omg.CORBA.ORBInitialHost = 192.168.10.95,java.naming.factory.state = com.sun.corba.ee.impl.prese ntation.rmi.JNDIStateFactoryImpl,java.naming.factory.url.pkgs = com.sun.enterprise.naming} [根异常是org.omg.CORBA.COMM_FAILURE:FINE:00410001:连接失败:socketType:IIOP_CLEAR_TEXT;主机名:192.168.10.95;端口:1072 vmcid:OMG次要代码:1完成:否]] 
在com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:491)
在com.sun.enterprise在.axing.impl.SerialContext.lookup :411)
at uf.UF.lookupIUserFramework(UF.java:47)
at uf.UF.< clinit>(UF.java:17)
at beans.TestBean。< ; init>(TestBean.java:22)
at beans.TestBean $ Proxy $ _ $$ _ WeldClientProxy。< init>(Unknown Source)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
在java.lang.reflect.Constructor .newInstance(Constructor.java:525)
在java.lang.Class.newInstance0(Class.java:374)
at java.lang.Class.newInstance(Class.java:327)
在org.jboss.weld.security.NewInstanceAction.run(NewInstanceAction.java:33)
在java.security.AccessController.doPrivileged( Native方法)
在org.jboss.weld.bean.proxy.ProxyFactory.create(ProxyFactory.java:262)
在org.jboss.weld.bean.proxy.ClientProxyFactory.create(ClientProxyFactory.java :103)
在org.jboss.weld.bean.proxy.ClientProxyProvider.createClientProxy(ClientProxyProvider.java:157)
在org.jboss.weld.bean.proxy.ClientProxyProvider.createClientProxy(ClientProxyProvider.java :$ 147
.java:57)
在org.jboss.weld.bean.proxy.ClientProxyProvider $ 1.apply(ClientProxyProvider.java:53)
com.google.common.collect.ComputingConcurrentHashMap $ ComputingValueReference.compute ComputingConcurrentHashMap.java:358)
在com.google.common.collec t.ComputingConcurrentHashMap $ ComputingSegment.compute(ComputingConcurrentHashMap.java:184)
在com.google.common.collect.ComputingConcurrentHashMap $ ComputingSegment.getOrCompute(ComputingConcurrentHashMap.java:153)
在com.google.common。 collect.ComputingConcurrentHashMap.getOrCompute(ComputingConcurrentHashMap.java:69)
在com.google.common.collect.ComputingConcurrentHashMap $ ComputingMapAdapter.get(ComputingConcurrentHashMap.java:396)
在org.jboss.weld.bean。 proxy.ClientProxyProvider.getClientProxy(ClientProxyProvider.java:163)
在org.jboss.weld.el.AbstractWeldELResolver.lookup(AbstractWeldELResolver.java:115)
在org.jboss.weld.el.AbstractWeldELResolver。 getValue(AbstractWeldELResolver.java:96)
在javax.el.CompositeELResolver.getValue(CompositeELResolver.java:188)
在com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
在com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
a t com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:116)
在com.sun.el.parser.AstValue.getBase(AstValue.java:151)
在com.sun .el.parser.AstValue.getValue(AstValue.java:200)
在com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:226)
在org.jboss.weld.el.WeldValueExpression .getValue(WeldValueExpression.java:50)
在com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
在javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper .java:194)
在javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
在javax.faces.component.UIOutput.getValue(UIOutput.java:174)
在com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
在com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355)
在com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
在javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:924)
在javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
在javax.faces.render .Renderer.encodeChildren(Renderer.java:176)
在javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:894)
在javax.faces.component.UIComponent.encodeAll(UIComponent.java :1856)
在javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
在javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
在com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:443)
在com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
在javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
在com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
在com.sun.faces。生命周期.Phase.doPhase(Phase.java:101)
at co m.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
在javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
在org.apache.catalina。 core.StandardWrapper.service(StandardWrapper.java:1682)
在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
在org.apache.catalina.core.StandardContextValve。 invoke(StandardContextValve.java:160)
在org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
在org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline。 java:673)
在com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
在org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357)
在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260)
在com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188)
在org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
在org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
在org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
在org.glassfish.grizzly.filterchain.ExecutorResolver $ 9.execute(ExecutorResolver.java:119)
在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
在org.glassfish .grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
在org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
在org.glassfish.grizzly.ProcessorExecutor .execute(ProcessorExecutor.java:77)
在org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)
在org.glassfish.grizzly.strategies.AbstractI OStrategy.fireIOEvent(AbstractIOStrategy.java:113)
在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access $ 100 (WorkerThreadIOStrategy.java:55)
在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy $ WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
在org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.doWork (AbstractThreadPool.java:564)
在org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.run(AbstractThreadPool.java:544)
在java.lang.Thread.run(Thread.java:722 )
导致:javax.naming.NamingException:无法为SerialContext获取SerialContextProvider [myEnv = {org.omg.CORBA.ORBInitialPort = 1072,java.naming.provider.url = iiop://192.168.10.95: 1072,java.naming.factory.initial = com.sun.enterprise.naming.SerialInitContextFactory,org.omg.CORBA.ORBInitialHost = 192.168.10.95,java.naming.factory.state = com.sun.corba.ee.impl .presentation.rmi.JNDIStateFactoryImpl,java.naming.factory.url.pkgs = com.sun.enterprise.naming} [根异常是org.omg.CORBA.COMM_FAILURE:FINE:00410001:连接失败:socketType:IIOP_CLEAR_TEXT;主机名:192.168.10.95;端口:1072 vmcid:OMG次要代码:1已完成:否]
在com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:334)
在com.sun.enterprise。 naming.impl.SerialContext.lookup(SerialContext.java:477)
... 86更多
导致:org.omg.CORBA.COMM_FAILURE:FINE:00410001:连接失败:socketType:IIOP_CLEAR_TEXT;主机名:192.168.10.95;端口:1072 vmcid:OMG次要代码:1完成:没有
在com.sun.proxy $ Proxy214.connectFailure(未知来源)
在com.sun.corba.ee.impl.transport.ConnectionImpl 。< init>(ConnectionImpl.java:253)
在com.sun.corba.ee.impl.transport.ConnectionImpl。< init>(ConnectionImpl.java:276)
在com.sun .corba.ee.impl.transport.ContactInfoImpl.createConnection(ContactInfoImpl.java:129)
在com.sun.corba.ee.impl.protocol.ClientRequestDispatcherImpl.beginRequest(ClientRequestDispatcherImpl.java:243)
在com.sun.corba.ee.impl.protocol.ClientDelegateImpl.request(ClientDelegateImpl.java:227)
在com.sun.corba.ee.impl.protocol.ClientDelegateImpl.is_a(ClientDelegateImpl.java:392)
在org.omg.CORBA.portable.ObjectImpl._is_a(ObjectImpl.java:130)
在org.omg.CosNaming.NamingContextHelper.narrow(NamingContextHelper.java:69)
在com .sun.enterprise.naming.impl.SerialContext $ ProviderCacheKey.getNameService(SerialContext.java:1205)
在com.sun.enterprise.naming .impl.SerialContext.getRemoteProvider(SerialContext.java:393)
在com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:329)
... 87更多
引起的:java.lang.RuntimeException:java.net.ConnectException:连接拒绝
在org.glassfish.enterprise.iiop.impl.IIOPSSLSocketFactory.createSocket(IIOPSSLSocketFactory.java:344)
在com。 sun.corba.ee.impl.transport.ConnectionImpl。< init>(ConnectionImpl.java:250)
... 97更多
导致:java.net.ConnectException:Connection refused
在sun.nio.ch.Net.connect0(Native Method)
at sun.nio.ch.Net.connect(Net.java:364)

我认为,连接有问题,因为一切正常,如果我在同一个Glassfish实例上部署。



如何从不同的Glassfish域正确调用远程EJB?

解决方案

1)IP寻址



尝试设置或g.omg.CORBA.ORBInitialHost到网络主机名而不是ip地址。
确保客户端可以通过host-name(ping host-name)到达服务器,如果需要,可以编辑hosts表( linux :etc / hosts windows :c:\windows\system32\drivers\hosts)并添加一行:



'ip''host-name'(示例192.168.1.1 server1)



(即使解决了命名问题,由于直接的ip寻址也会出现问题)



2)访问远程GlassFish服务器中的EJB组件



除了ip问题,请确保服务器已声明为JDNI资源。请参阅Glassfish应用程序开发指南手册中的文本:



在远程GlassFish
中查找EJB组件的推荐方法来自客户端的服务器一个servlet或EJB组件是使用Interoperable
命名服务语法。主机和端口信息被添加到任何全局JNDI
名称,并在查找期间自动解析。
可互操作的全局名称的语法如下:

  corbaname:iiop:host:port#a / b / name 

这使得编程模型用于访问另一个
GlassFish Server中的EJB组件与在同一服务器中访问它们相同。部署者
可以更改EJB组件的物理分布方式,而无需
更改代码。



对于Java EE组件,代码仍然在EJB
引用上执行 java:comp / env 查找。唯一的区别是部署者将ejb-ref元素映射到GlassFish Server部署描述符文件中的
可互操作名称,而不是
简单的全局JNDI名称。



例如,假设servlet使用
java:comp / env / ejb / Foo 查找EJB引用,并且目标EJB组件具有全局JNDI名称
a / b / Foo



ejb-ref元素 glassfish-web.xml 如下所示:

 < ejb-ref> 
< ejb-ref-name> ejb / Foo< / ejb-ref-name>
< jndi-name> corbaname:iiop:host:port#a / b / Foo< / jndi-name>
< / ejb-ref>

代码如下所示:

  Context ic = new InitialContext(); 
Object o = ic.lookup(java:comp / env / ejb / Foo);

对于不在Java EE容器中运行的客户端,代码只是使用
可互操作的全局名称,而不是简单的全局JNDI名称。例如:

  Context ic = new InitialContext(); 
对象o = ic.lookup(corbaname:iiop:host:port#a / b / Foo);

存储在可互操作的命名上下文中的对象和组件特定的
(java:comp / env )命名上下文是短暂的。在每个服务器启动或应用程序
重新加载时,所有相关对象都将重新绑定到命名空间。



(GlassFish Server Open Source Edition 4.0应用程序开发指南) / p>

I have two servers installed. Both are running an own Glassfish 4.0 domain.

On one server, I've installed an Singleton Remote EJB. This Glassfish has an IIOP-Listener specified (name=UF enabled=true network adress=192.168.10.95 listener port=1072).

The second Glassfish instance is running a simple JSF-2.2 Application. Now I'm trying to connect to the remote ejb in one JSF-Managed-Bean constructor.

        Properties props = new Properties();
        props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory");
        props.put(Context.PROVIDER_URL, "iiop://192.168.10.95:1072");
        props.setProperty("org.omg.CORBA.ORBInitialHost", "192.168.10.95");
        props.setProperty("org.omg.CORBA.ORBInitialPort", "1072");
        InitialContext ctx = new InitialContext(props);
        return (IUF) ctx.lookup("java:global/UFRemote/UFRemote!com.uf.IUF");

The lookup took about one minute and ends up with following exception:

SEVERE:   javax.naming.NamingException: Lookup failed for 'java:global/UFRemote/UFRemote!uf.IUserFramework' in SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=1072, java.naming.provider.url=iiop://192.168.10.95:1072, java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=192.168.10.95, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=1072, java.naming.provider.url=iiop://192.168.10.95:1072, java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=192.168.10.95, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is org.omg.CORBA.COMM_FAILURE: FINE: 00410001: Connection failure: socketType: IIOP_CLEAR_TEXT; hostname: 192.168.10.95; port: 1072  vmcid: OMG  minor code: 1  completed: No]]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:491)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
at uf.UF.lookupIUserFramework(UF.java:47)
at uf.UF.<clinit>(UF.java:17)
at beans.TestBean.<init>(TestBean.java:22)
at beans.TestBean$Proxy$_$$_WeldClientProxy.<init>(Unknown Source)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at java.lang.Class.newInstance0(Class.java:374)
at java.lang.Class.newInstance(Class.java:327)
at org.jboss.weld.security.NewInstanceAction.run(NewInstanceAction.java:33)
at java.security.AccessController.doPrivileged(Native Method)
at org.jboss.weld.bean.proxy.ProxyFactory.create(ProxyFactory.java:262)
at org.jboss.weld.bean.proxy.ClientProxyFactory.create(ClientProxyFactory.java:103)
at org.jboss.weld.bean.proxy.ClientProxyProvider.createClientProxy(ClientProxyProvider.java:157)
at org.jboss.weld.bean.proxy.ClientProxyProvider.createClientProxy(ClientProxyProvider.java:147)
at org.jboss.weld.bean.proxy.ClientProxyProvider.access$000(ClientProxyProvider.java:49)
at org.jboss.weld.bean.proxy.ClientProxyProvider$1.apply(ClientProxyProvider.java:57)
at org.jboss.weld.bean.proxy.ClientProxyProvider$1.apply(ClientProxyProvider.java:53)
at com.google.common.collect.ComputingConcurrentHashMap$ComputingValueReference.compute(ComputingConcurrentHashMap.java:358)
at com.google.common.collect.ComputingConcurrentHashMap$ComputingSegment.compute(ComputingConcurrentHashMap.java:184)
at com.google.common.collect.ComputingConcurrentHashMap$ComputingSegment.getOrCompute(ComputingConcurrentHashMap.java:153)
at com.google.common.collect.ComputingConcurrentHashMap.getOrCompute(ComputingConcurrentHashMap.java:69)
at com.google.common.collect.ComputingConcurrentHashMap$ComputingMapAdapter.get(ComputingConcurrentHashMap.java:396)
at org.jboss.weld.bean.proxy.ClientProxyProvider.getClientProxy(ClientProxyProvider.java:163)
at org.jboss.weld.el.AbstractWeldELResolver.lookup(AbstractWeldELResolver.java:115)
at org.jboss.weld.el.AbstractWeldELResolver.getValue(AbstractWeldELResolver.java:96)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:188)
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
at com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:116)
at com.sun.el.parser.AstValue.getBase(AstValue.java:151)
at com.sun.el.parser.AstValue.getValue(AstValue.java:200)
at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:226)
at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50)
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
at javax.faces.component.UIOutput.getValue(UIOutput.java:174)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:924)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:894)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:443)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544)
at java.lang.Thread.run(Thread.java:722)
Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=1072, java.naming.provider.url=iiop://192.168.10.95:1072, java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=192.168.10.95, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is org.omg.CORBA.COMM_FAILURE: FINE: 00410001: Connection failure: socketType: IIOP_CLEAR_TEXT; hostname: 192.168.10.95; port: 1072  vmcid: OMG  minor code: 1  completed: No]
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:334)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:477)
... 86 more
Caused by: org.omg.CORBA.COMM_FAILURE: FINE: 00410001: Connection failure: socketType: IIOP_CLEAR_TEXT; hostname: 192.168.10.95; port: 1072  vmcid: OMG  minor code: 1  completed: No
at com.sun.proxy.$Proxy214.connectFailure(Unknown Source)
at com.sun.corba.ee.impl.transport.ConnectionImpl.<init>(ConnectionImpl.java:253)
at com.sun.corba.ee.impl.transport.ConnectionImpl.<init>(ConnectionImpl.java:276)
at com.sun.corba.ee.impl.transport.ContactInfoImpl.createConnection(ContactInfoImpl.java:129)
at com.sun.corba.ee.impl.protocol.ClientRequestDispatcherImpl.beginRequest(ClientRequestDispatcherImpl.java:243)
at com.sun.corba.ee.impl.protocol.ClientDelegateImpl.request(ClientDelegateImpl.java:227)
at com.sun.corba.ee.impl.protocol.ClientDelegateImpl.is_a(ClientDelegateImpl.java:392)
at org.omg.CORBA.portable.ObjectImpl._is_a(ObjectImpl.java:130)
at org.omg.CosNaming.NamingContextHelper.narrow(NamingContextHelper.java:69)
at com.sun.enterprise.naming.impl.SerialContext$ProviderCacheKey.getNameService(SerialContext.java:1205)
at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:393)
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:329)
... 87 more
Caused by: java.lang.RuntimeException: java.net.ConnectException: Connection refused
at org.glassfish.enterprise.iiop.impl.IIOPSSLSocketFactory.createSocket(IIOPSSLSocketFactory.java:344)
at com.sun.corba.ee.impl.transport.ConnectionImpl.<init>(ConnectionImpl.java:250)
... 97 more
Caused by: java.net.ConnectException: Connection refused
at sun.nio.ch.Net.connect0(Native Method)
at sun.nio.ch.Net.connect(Net.java:364)

I think, something is wrong with the connection, because everything works fine, if I deploy both on the same Glassfish instance.

How do I call a remote EJB correctly from a different Glassfish domain?

解决方案

1) IP Addressing

Try to set org.omg.CORBA.ORBInitialHost to the network host-name instead the ip address. Make sure that the client can reach the server by host-name (ping host-name), if necessary edit hosts table (linux: etc/hosts windows: c:\windows\system32\drivers\hosts) and add a line with:

'ip' 'host-name' (Example 192.168.1.1 server1)

(Even after you solve the naming issue, problems can appear because of direct ip addressing )

2) Accessing EJB Components in a Remote GlassFish Server

In addition to the ip issue, make sure that the server as declared the JDNI resource. See text bellow from Glassfish Application-development-guide Manual:

The recommended approach for looking up an EJB component in a remote GlassFish Server from a client that is a servlet or EJB component is to use the Interoperable Naming Service syntax. Host and port information is prepended to any global JNDI names and is automatically resolved during the lookup. The syntax for an interoperable global name is as follows:

corbaname:iiop:host:port#a/b/name

This makes the programming model for accessing EJB components in another GlassFish Server exactly the same as accessing them in the same server. The deployer can change the way the EJB components are physically distributed without having to change the code.

For Java EE components, the code still performs a java:comp/env lookup on an EJB reference. The only difference is that the deployer maps the ejb-ref element to an interoperable name in a GlassFish Server deployment descriptor file instead of to a simple global JNDI name.

For example, suppose a servlet looks up an EJB reference using java:comp/env/ejb/Foo, and the target EJB component has a global JNDI name of a/b/Foo.

The ejb-ref element in glassfish-web.xml looks like this:

<ejb-ref>
    <ejb-ref-name>ejb/Foo</ejb-ref-name>
    <jndi-name>corbaname:iiop:host:port#a/b/Foo</jndi-name>
</ejb-ref>

The code looks like this:

Context ic = new InitialContext();
Object o = ic.lookup("java:comp/env/ejb/Foo");

For a client that doesn't run within a Java EE container, the code just uses the interoperable global name instead of the simple global JNDI name. For example:

Context ic = new InitialContext();
Object o = ic.lookup("corbaname:iiop:host:port#a/b/Foo");

Objects stored in the interoperable naming context and component-specific (java:comp/env) naming contexts are transient. On each server startup or application reloading, all relevant objects are re-bound to the namespace.

(GlassFish Server Open Source Edition 4.0 Application Development Guide)

这篇关于在不同的glassfish 4.0实例上调用远程ejb的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆