Socket&EJB

FROM:

关于Java Socket编程的详细介绍

http://news.newhua.com/news1/program_net/2009/64/0964941376944EFKG33EF18A3B0HG5AEA4A8D7D61FA01CGHG0F7DG.html

 

 

 

 

-------------------------------------------------------------------------------

 

FROM:EJB2.0

远程接口&本地接口

 

FROM:http://www.blogjava.net/relax/archive/2005/12/02/22267.html

 

EJB remote interface(javax.ejb.EJBObject)和remote home interface(javax.ejb.EJBHome)在本质上是Java RMI接口。远程客户端运用接口和与Java RMI-IIOP兼容的参数与EJBs通讯。参数和方法的结果值在同一个容器中传递,或者跨网络传递到远程容器。

相反,EJB local interface(javax.ejb.EJBLocalObject)和local home interface(javax.ejb.EJBLocalHome)不是Java RMI接口,它们是EJB 2.0的新功能。本地客户端——如其它EJBs,运用相同JVM中传递的参数直接与EJBs通讯。这种技术消除了网络潜在的问题、参数复制的问题以及需要与Java RMI-IIOP兼容的问题。

也意味着,EJB客户端可以运用一个更轻量级的编程模式来访问服务。该方法很适合细粒度的(fine-grained)方法调用,因为作为EJB实例的位于同一个JVM中的EJB客户端可以用本地接口来避免不必要的费用。(网络传输)

引进本地客户端产生的另一个显著的变化就是类型的转换。

 

当ejb的服务端和客户端在一个JVM的时候,为了提高jndi查询效率,并且提高方法调用效率,本地调用可以不走TCP/IP ,这样可以明显提高调用的效率。

 

所有的EJB实例在运用前必须转换到它们恰当的接口类型,所以,有时侯,在运用远程客户端时,要保证Java RMI-IIOP的兼容性,你必须在转换EJB实例前运用java.rmi.PortableRemoteObject.narrow()来缩小(narrow)它。

 

但本地客户端可以直接把EJB实例转换成local home interface类型,如下面的代码片段:

InitialContext initCtx = new 
InitialContext();
   ExampleLocalHome exampleLocalHome = 
(ExampleLocalHome)initCtx.lookup("java:comp/
env/ejb/Example");

从local home创建了EJB实例:

ExampleLocal exampleLocal = 
exampleLocalHome.create();

 

<ejb-jar>
   <enterprise-beans>
      <session>
         <ejb-name>...</ejb-name>
         <local-home>...</local-home>
         <local>...</local>
         <ejb-link>...</ejb-link>
         ...
      </session>
   </enterprise-beans>
   <assembly-descriptor>
...
   </assembly-descriptor>
</ejb-jar>

 

 

 

远程调用:

 

*以下方法是作用是:通过传递环境属性选择JNDI驱动和服务器的网络位置,
  并连接到JNDI树。
  这是采用weblogic做EJB容器时,远程调用EJB的固定初始化模式

*/
 private  InitialContext getInitialContext() throws Exception {
  //EJB容器的地址
       String url = "t3://image:7001";
       String user = null;
       String password = null;
       Properties properties;
  
        properties = new Properties();//
        properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
        properties.put(Context.PROVIDER_URL, url);
        if (user != null) {
            properties.put(Context.SECURITY_PRINCIPAL, user);
            properties.put(Context.SECURITY_CREDENTIALS,
                           password == null ? "" : password);
        }
        return new javax.naming.InitialContext(properties);
 }
}

 

 

  Object obj=ctx.lookup("SayHello");


  //获得远程EJB组件的home接口的引用
        testhello.SayHelloHome home=(testhello.SayHelloHome)PortableRemoteObject.narrow (obj,testhello.SayHelloHome.class);


     //获得远程EJB组件的remote接口的引用
        testhello.SayHello hello=home.create();
        
        String name="test";
        String sayString=hello.sayHello(name);//执行

 

使用本地接口:http://8366.iteye.com/blog/555828

问题:

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值