`
lym6520
  • 浏览: 704033 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

远程调用ejb3

阅读更多
总结下远程调用ejb3的几种方式:

部署在jboss服务器上的ejb3应用程序:
/*设置属性信息*/
		Properties props = new Properties();
 		props.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
 		props.put(Context.PROVIDER_URL, "jnp://localhost:1099");//部署在jboss服务器上的应用使用jnp协议
 		props.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
 		
 		try {
			InitialContext ctx=new InitialContext(props);
			/* 获得部署在Jboss服务器上的ejb3应用接口实例*/
			IRmiExampleSerivce rmiSerivce = (IRmiExampleSerivce)ctx.lookup("IRmiExampleSerivceImpl/remote"); //不同的服务器jndi名称不一样
 		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}


部署在weblogic服务器上的ejb3应用:
/*设置属性信息*/
		Properties props = new Properties();
		props.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
 		props.put(Context.PROVIDER_URL, "t3://127.0.0.1:7001");//部署在weblogic服务器上的应用使用t3协议
 		props.put("java.naming.security.principal", "weblogic");//用户名
 		props.put("java.naming.security.credentials", "weblogic");//密码
 		
 		try {
			InitialContext ctx=new InitialContext(props);
			/* 获得部署在Jboss服务器上的ejb3应用接口实例*/
			IRmiExampleSerivce rmiSerivce = (IRmiExampleSerivce)ctx.lookup("IRmiExampleSerivce#com.rmi.IRmiExampleSerivce"); //不同的服务器jndi名称不一样
 		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}


当然属性信息可以放在一个jndi.properties属性文件中,如:
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost:1099

当然该文件放在src根目录下,然后我们在程序中就无需创建Properties的实例并设置相关熟悉,可以直接实例化InitialContext,调用默认的实例化构造函数,会默认查找src根目录下的jndi.properties属性文件。

当然在实际开发应用中不会直接通过以上方式来直接调用远程ejb3服务,在spring框架中可以通过JndiObjectFactoryBean来获得远程ejb3的实例,例如:
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
		<property name="environment">
			<props>
				<prop key="java.naming.provider.url">t3://127.0.0.1:7001</prop>
				<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
				<prop key="java.naming.security.principal">weblogic</prop>
				<prop key="java.naming.security.credentials">weblogic</prop>
			</props>
		</property>
	</bean>
	 
	<bean id="rmiExampleSerivce" class="org.springframework.jndi.JndiObjectFactoryBean">
		<property name="jndiTemplate" ref="jndiTemplate"/>
		<property name="jndiName" value="IRmiExampleSerivce#com.rmi.IRmiExampleSerivce"></property>
	</bean>

0
7
分享到:
评论
1 楼 huazai_wow 2013-09-29  
楼主  在吗?
请教一个问题啊?  QQ:2598059791
在Servlet中
Properties props=new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
props.setProperty(Context.PROVIDER_URL, "t3://221.181.173.95:7001");
props.setProperty(Context.SECURITY_PRINCIPAL, "huazai_wow");
props.setProperty(Context.SECURITY_CREDENTIALS, "huazai_wow");
Context context=new InitialContext(props);
SayHelloRemoteTypeRemote sayHelloRemoteTypeRemoteRef=
(SayHelloRemoteTypeRemote) context.lookup("huazai_wow#publicinterface.SayHelloRemoteTypeRemote");

sayHelloRemoteTypeRemoteRef.sayHelloMethodRemote();
context.close();
远程sessionBean
   /**
*
* @author Administrator
* mappedName 属性值 代表在Weblogic中注册JNDI节点的名称
*
*/
@Stateless(mappedName="huazai_wow")
public class SayHelloRemoteType implements SayHelloRemoteTypeRemote {

public void sayHelloMethodRemote() {

System.out.println("高洪岩你好! 属于远程调用!");

}

}


在 weblogic 服务器  jndi 树节点中 可以看到这个树节点
但是运行的时候报这个错误啊?
2013-9-29 11:57:00 com.sun.corba.se.impl.encoding.CDRInputStream_1_0 read_value
警告: "IOP00810211: (MARSHAL) Exception from readValue on ValueHandler in CDRInputStream"
org.omg.CORBA.MARSHAL:   vmcid: SUN  minor code: 211 completed: Maybe
at com.sun.corba.se.impl.logging.ORBUtilSystemException.valuehandlerReadException(ORBUtilSystemException.java:6528)
at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1045)
at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:879)
at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_abstract_interface(CDRInputStream_1_0.java:873)
at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_abstract_interface(CDRInputStream_1_0.java:863)
at com.sun.corba.se.impl.encoding.CDRInputStream.read_abstract_interface(CDRInputStream.java:269)
at com.sun.corba.se.impl.util.Utility.readAbstractAndNarrow(Utility.java:948)
at com.sun.corba.se.impl.io.IIOPInputStream.inputObjectField(IIOPInputStream.java:1988)
at com.sun.corba.se.impl.io.IIOPInputStream.inputClassFields(IIOPInputStream.java:2216)
at com.sun.corba.se.impl.io.IIOPInputStream.inputObject(IIOPInputStream.java:1223)
at com.sun.corba.se.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:400)
at com.sun.corba.se.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:327)
at com.sun.corba.se.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:293)
at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1034)
at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:879)
at com.sun.corba.se.impl.encoding.CDRInputStream.read_value(CDRInputStream.java:249)
at com.sun.corba.se.impl.corba.TCUtility.unmarshalIn(TCUtility.java:269)
at com.sun.corba.se.impl.corba.AnyImpl.read_value(AnyImpl.java:559)
at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_any(CDRInputStream_1_0.java:739)
at com.sun.corba.se.impl.encoding.CDRInputStream.read_any(CDRInputStream.java:220)
at weblogic.corba.cos.naming._NamingContextAnyStub.resolve_any(_NamingContextAnyStub.java:81)
at weblogic.corba.j2ee.naming.ContextImpl.lookup(ContextImpl.java:267)
at weblogic.corba.j2ee.naming.ContextImpl.lookup(ContextImpl.java:227)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at controller.test.doPost(test.java:35)
at controller.test.doGet(test.java:21)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:617)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1760)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ClassNotFoundException: publicinterface.SayHelloRemoteType_u66dq_SayHelloRemoteTypeRemoteRIntf
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.readObject(RemoteBusinessIntfProxy.java:266)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.corba.se.impl.io.IIOPInputStream.invokeObjectReader(IIOPInputStream.java:1696)
at com.sun.corba.se.impl.io.IIOPInputStream.inputObject(IIOPInputStream.java:1214)
at com.sun.corba.se.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:400)
at com.sun.corba.se.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:327)
at com.sun.corba.se.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:293)
at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1034)
... 38 more

相关推荐

    EJB分布式远程调用的小例子的简单实现

    本示例将探讨如何实现EJB的分布式远程调用,这是一种让不同网络节点上的软件组件能够相互通信的技术。 在Java EE中,EJB允许开发者创建业务逻辑组件,这些组件可以被其他应用或服务远程调用。EJB分为三种类型:会话...

    EJB客户端(远程调用)

    调用EJB的客户端程序,通过远程接口方式调用

    EJB client调用EJB3 .doc

    在独立的Tomcat或J2SE环境中,由于不在同一个虚拟机(VM)中,只能调用EJB的远程接口,而不能调用本地接口。 另外,除了代码中硬编码环境属性,还可以在classpath下放置一个名为`jndi.properties`的文件来设置...

    JNDI调用分布式EJB3 通用接口

    5. **调用EJB3方法**:通过代理对象,客户端可以像调用本地方法一样调用EJB3组件的方法,所有的网络通信和事务管理都在后台自动处理。 6. **分布式EJB3**:如果EJB3组件部署在多个服务器上,JNDI查找可能返回一个...

    ejb调用详解

    本文将深入探讨如何在WebSphere环境中远程调用EJB组件,同时介绍ejb3.0版本的一些关键特性,以及 ejb 开发实例和相关框架。 **一、EJB 3.0简介** EJB 3.0是EJB规范的一个重大改革,引入了更加轻量级和简化的设计,...

    基于Facade的EJB远程调用技术

    基于Facade的EJB远程调用技术 基于Facade的EJB远程调用技术

    三种方式实现java远程调用(rmi),绝对可用

    Java远程调用(Remote Method Invocation,RMI)是Java平台中一种重要的分布式计算技术,它允许在不同网络环境中的Java对象之间进行透明的交互。在本文中,我们将深入探讨三种不同的RMI实现方法:原始方式、Spring...

    EJB 基于Java的远程方法调用(RMI)技术

    ### EJB 基于Java的远程方法调用(RMI)技术 #### 一、EJB概述 **Enterprise JavaBeans (EJB)** 是一种基于Java的...此外,通过RMI技术的支持,EJB能够实现高效的远程调用,使得跨系统的组件交互变得更加简单高效。

    基于动态代理的Java远程调用框架的研究1

    总结起来,基于动态代理的Java远程调用框架旨在克服RMI和EJB的一些缺点,提供更加简洁、灵活和高效的远程调用解决方案。它利用Java的动态代理特性,降低了分布式系统开发的复杂性,同时保持了高度的可扩展性和可定制...

    tomcat 调用weblogic EJB

    这是在采用WebLogic作为EJB容器时,远程调用EJB的一种常见模式。初学者可以通过这种方式熟悉基本的远程调用流程。 6. **注意事项** - 在实际部署过程中,需要注意EJB的版本兼容性问题,以及安全认证机制。例如,...

    各种EJB之间的调用示例

    - Remote Method Invocation(RMI):这是EJB之间最基础的调用方式,允许一个EJB实例调用另一个EJB的远程接口方法。 - Local Interface:如果调用方和被调用的EJB在同一应用服务器内,可以使用本地接口,这样可以...

    EJB调用原理分析

    3. **调用业务方法**: 客户端通过Remote接口调用EJB的业务方法。对于Entity Bean,客户端通常通过查找来获取现有对象,而不是创建。 4. **容器管理**: EJB容器在调用实际的bean实例前,会进行一系列容器管理操作,如...

    CORBA Client/Server调用EJB开发说明,带有例子学习

    总结来说,这个教程提供了使用C++通过CORBA调用EJB的详细步骤,包括生成IDL文件、创建C++ Stub、初始化ORB、解析和调用EJB方法。理解这个过程对于开发者来说是至关重要的,因为它涉及到多个中间件技术的集成,包括...

    JSP调用EJB例子[归类].pdf

    其中,HaiHome接口代表EJB的远程接口,允许客户端通过RMI(Remote Method Invocation)调用EJB;HaiClient接口是会话bean的本地接口,提供了具体业务方法的定义;HaiBean类实现了会话bean的业务逻辑。 2. WEB应用:...

    使用rmi进行远程调用

    在这个“使用rmi进行远程调用”的示例中,我们看到的是一个基于RMI实现的银行系统。这个小例子旨在帮助开发者理解如何使用RMI来构建分布式应用程序,尤其是在处理跨网络的远程对象交互时。 首先,RMI的核心概念是...

    实战角度比较EJB2和EJB3的架构异同

    因此,即使在EJB3中,理解JNDI名称的生成规则仍然很重要,因为它直接影响到EJB的查找和调用。 综上所述,EJB3相对于EJB2的主要改进在于简化了编程模型,通过注解减少了冗余代码,并引入了依赖注入以提高代码的...

    (sshproject)tomcat调用jboss上的ejb3.0

    4. **远程调用EJB**: - 使用JNDI查找服务来获取远程EJB的引用。在Tomcat应用中,你可以使用JNDI API来查找Jboss上的EJB,然后通过这个引用调用EJB的方法。 - 调用EJB时,注意处理可能出现的网络异常、远程方法...

    \websphere部署EJB3.docx

    创建一个或多个EJB项目,例如`EJB3`,每个EJB项目都将对应一个jar包,建议遵循命名规范,如`XXXEJBModule.jar`。同样,这些EJB项目也需要添加到`WEBEJB3`项目中。 4. **部署到WebSphere**: 使用RAD,可以直接...

Global site tag (gtag.js) - Google Analytics