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项目以及weblogic部署ejb

1.创建ejb项目 2.通过注解声明ejb接口 接口 @Remote(value=FirstEjbBean.class) public interface FirstEjb { ...
  • wangzhiqiang123456
  • wangzhiqiang123456
  • 2016年11月15日 13:39
  • 802

weblogic+ejb3.0例子

  • 2010年04月06日 15:07
  • 261KB
  • 下载

WebLogic12c-EJB部署

weblogic部署ejb可以通过jar、ear方式。  两种部署ejb方式的步骤都是一致的  1、启动domain,并登录控制台  2、选择“部署”-》“安装”,如下图所示:  3、选择ejb...
  • luzhensmart
  • luzhensmart
  • 2015年06月04日 14:45
  • 1341

weblogic开发EJB

各个容器开发EJB不太一样,这里使用的是Weblogic8.1和EJB2.0进行演示的。1 下载java1.4的EE包2 设置环境变量3 设置Weblogic的配置4 添加weblogic的javae...
  • longronglin
  • longronglin
  • 2010年11月12日 16:46
  • 5156

Weblogic EJB3开发及常见问题

Weblogic EJB3的开发部署现在网上的例子很多,也都简单明了,这里就不详细说明了。本文主要记录我在开发ejb时遇到的问题及解决方案。希望对大家有帮助。 EJB的概念网上五花八门...
  • yuanxiaojiao0012
  • yuanxiaojiao0012
  • 2016年07月26日 14:32
  • 1040

基于weblogic 10 的EJB3实践之HelloWorld

前提条件, 到oracle官网上下载weblogic10安装文件并安装, 然后使用Configuration Wizard创建一个最最最普通的domain, 然后启动weblogic server. ...
  • sunxing007
  • sunxing007
  • 2010年09月08日 16:57
  • 4840

【EJB学习笔记】——远程调用和本地调用

EJB应用可以发布为远程调用和本地调用。 从字面意思来理解,远程调用就是客户端(调用的模块)和服务端(被调用的模块)“不在一起”,“相隔很远”;本地调用就是客户端(调用的模块)和服务端(被调用的模块...
  • huyuyang6688
  • huyuyang6688
  • 2016年03月24日 20:58
  • 1950

ejb远程调用 之 weblogic

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

Weblogic中EJB调用方法总结

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

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

package com.tudou.test; import java.text.SimpleDateFormat; import java.util.Date; import java.util....
  • yaerfeng
  • yaerfeng
  • 2011年11月14日 10:55
  • 1412
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:weblogic——远程/近程调用EJB的方法总结
举报原因:
原因补充:

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