weblogic——远程/近程调用EJB的方法总结

原创 2005年05月01日 19:49:00

1、      客户端程序中调用EJB
前提:EJB要实现了REMOTE接口
客户端调用的代码可以用EJB Test Client工具生成。自己写就是这个样子:


      String url="t3://localhost:7001";
     Properties prop=new Properties();
     prop.put(Context.PROVIDER_URL,url);
            prop.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
            prop.put(Context.SECURITY_PRINCIPAL, "
name");
         prop.put(Context.SECURITY_CREDENTIALS,"
code");
     Context
context =new InitialContext(prop);
  
//通过ejbJNDI name查找到EJBHome对象
  Object ref = context.lookup("
ejb/com/J2EE/first/ejb/HelloHome ");   
   //
得到EJBHome
 
HelloHome trH=(HelloHome) PortableRemoteObject.narrow(obj,HelloHome.class);
   //
得到EJBObject
    DigestSession digestSession = digestSessionHome.create();

     Hello tr=trH.create();
     System.out.println(tr.hello());

    byte[] ret = digestSession.md5(temp.getBytes());//ejb
方法调用

  注意:Context.SECURITY_PRINCIPALContext.SECURITY_CREDENTIALS是可选的,涉及到对ejb的操作的权限。

2、SERVLET中调用EJB
前提:被调用的EJB实现了REMOTE接口
Servlet中,调用的代码应该是这个样子:


    try {
      Context context = new InitialContext();
      Object ref = context.lookup("UserFacade");
      //look up jndi name and cast to Home interface
      UserFacadeHome userFacadeHome = (UserFacadeHome) PortableRemoteObject.
          narrow(ref, UserFacadeHome.class);
      UserFacade userFacade = userFacadeHome.create();
      userFacade.updateUser("002","
老二");    }
    catch (Exception ex) {
      ex.printStackTrace();
    }


跟客户端程序中调用EJB的差别是在Context的生成上,servlet中直接用
Context context = new InitialContext();
而客户端程序中是用
    Properties properties = new Properties();
    properties.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
    properties.put(Context.PROVIDER_URL, "t3://localhost:7001");

    Context context= new InitialContext(properties);

3、      EJB中调用其他的EJB(同一EJB模块)
前提:
(1)
被调用者实现了LOCAL接口,调用者则实现了REMOTE接口
(2)
调用者和被调用者应该在同一EJB模块打包文件(jar)
(3)
调用者的部署描述(ejb-jar.xml)中有关于Local ref的描述,如下所示:


    <session>
      <display-name>UserFacade</display-name>
      <ejb-name>UserFacade</ejb-name>
      <home>ejbtest.test.UserFacadeHome</home>
      <remote>ejbtest.test.UserFacade</remote>
      <ejb-class>ejbtest.test.UserFacadeBean</ejb-class>
      <session-type>Stateless</session-type>
      <transaction-type>Container</transaction-type>
      <ejb-local-ref>
        <ejb-ref-name>ejb/user</ejb-ref-name>
        <ejb-ref-type>Entity</ejb-ref-type>
        <local-home>ejbtest.test.UserHome</local-home>
        <local>ejbtest.test.User</local>
        <ejb-link>User</ejb-link>
      </ejb-local-ref>
    </session>

在调用者中,调用的程序代码应该是下面的样子:

package ejbtest.test;import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.ejb.CreateException;

import javax.ejb.*;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.rmi.RemoteException;

public class UserFacadeBean
    implements SessionBean {
  SessionContext sessionContext;
  private UserHome userHome;
  private static Context context;

  public void ejbCreate() throws CreateException {
  }

  public void ejbRemove() {
  }

  public void ejbActivate() {
  }

  public void ejbPassivate() {
  }

  public void setSessionContext(SessionContext sessionContext) {
    System.out.println("@@@@@@@@@@@@@@@@ UserFacadeBean.setSessionContext()");
    this.sessionContext = sessionContext;
    try {
      findUserHome();
    }
    catch (Exception e) {
      throw new EJBException(e.getMessage());
    }
  }

  private void findUserHome() throws Exception {
    final String ENTITY_NAME = "java:comp/env/ejb/user";

    context = new InitialContext();

    if (userHome == null) {
      try {
        Object object = context.lookup(ENTITY_NAME);
        userHome = (UserHome) object;
      }
      catch (Exception e) {
        throw new EJBException(e.getMessage());
      }
    }
  }

  public void addUser(String id, String name) throws RemoteException {
    try {
      User user = userHome.create(id);
      user.setName(name);
    }
    catch (Exception ex) {
      throw new RemoteException(ex.getMessage());
    }
  }
}

4EJB中调用其他的EJB(不同的EJB模块)
前提:被调用者实现了REMOTE接口
最简单的方法是按客户端程序(或者SERVLET)中调用EJB的方法。

 

【EJB系列】(二)——JBOSS7中EJB的远程调用和本地调用

导读   因为JBOSS6,7版本在EJB的本地调用和远程调用的写法上不同于之前的版本。所以在本篇文章中将给出代码实例,仅供参考。 环境 MyEclipse10 JBOSS7 理论知识远...

servlet调用ejb的build.xml

src.dir=${basedir}/srcdist.dir=${basedir}/distclasses.dir=${basedir}/classesWebRoot.dir=${basedir}/W...

Tomcat 如何调用weblogic发布的Ejb

     很久没研究技术了,由于发布webservice时需要调用发布在另外一台weblogic应用服务器上的ejb,故此花了点时间研究,做试验。开发环境:tomcat 4.0.1weblogic8....

Weblogic中EJB调用方法总结

1、客户端程序中调用EJB前提:EJB要实现了REMOTE接口客户端调用的代码可以用EJB Test Client工具生成。自己写就是这个样子:    Properties properties = ...

jboss 7.1 的数据库配置文件

一个基本上不会报错的jboss数据库配置文件

JBOSS下配置MYSQL数据源

jpa中.java文件在此不再多说。接下来具体说说关于文件的配置,数据库的链接。1、首先要将数据库打开,mysql。2、接着将jar包添加进来。3、启动服务器。4、修改环境变量值为jboss的位置。5...

ejb远程调用 之 weblogic

个人认为ejb远程调用非常有用,性能应该比webservice之流要好很多,配置也并不是很复杂,搞了一个下午重要搞定,记录下来 1. 加入jar包javax.ejb_3.0.1.jar 2. 写服务端...

weblogic/jboss使用ejb3.0远程调用

package com.tudou.test; import java.text.SimpleDateFormat; import java.util.Date; import java.util....

基于EJB3.0的远程方法调用

前面我已经转载一边基于weblogic服务器、RMI技术的远程方法调用,现在我们来看一下基于EJB3.0的远程方法调用的实现过程。 其实这两种都是一个同样的原理,于weblogic服务器作为中转站。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:weblogic——远程/近程调用EJB的方法总结
举报原因:
原因补充:

(最多只允许输入30个字)