一步一步教你远程调用EJB

原创 2007年09月29日 16:11:00

 

前期准备:弄清楚weblogic(或jboss)、tomcat、JBluder(或eclipse+MyEclipse)的使用方法,能写一个简单的基于struts框架的web工程,然后准备两台联网的电脑(局域网也可以),如果没有条件,也可以在同一台电脑上分别安装两个web服务器(例如:weblogic和tomcat)来代替,本文将采用后一种方法,采用weblogic作EJB容器,tomcat作web容器,用struts工程来调用EJB

准备好了吗?让我们开始下一步

第一步:写一个简单的EJB。写EJB最好用的还是JBuilder,毕竟够傻瓜化。当然作为专业人士,eclipse搭配MyEclipse是最佳选择,不过作为初学者,建议采用JBuilder。以下是本文测试所用到的EJB。

remote接口:

package testhello;

import javax.ejb.EJBObject;

public interface SayHello extends EJBObject {
    public String sayHello(String name) throws java.rmi.RemoteException;
}

home接口:

package testhello;

import javax.ejb.EJBHome;
import javax.ejb.CreateException;
import java.rmi.RemoteException;

public interface SayHelloHome extends EJBHome {
    public SayHello create() throws CreateException, RemoteException;
}

bean类:

package testhello;

import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.ejb.CreateException;

public class SayHelloBean implements SessionBean {
    SessionContext sessionContext;
    public void ejbCreate() throws CreateException {
    }

    public void ejbRemove() {
    }

    public void ejbActivate() {
    }

    public void ejbPassivate() {
    }


    public void setSessionContext(SessionContext sessionContext) {
        this.sessionContext = sessionContext;
    }

    public String  sayHello(String name) {
        return "Hello "+name;
    }
}

如果你是采用上面两种工具来写的话,配置文件就不必考虑了

第二步:利用JBuilder或eclipse将这个EJB工程编译并打包,会得到一个jar(如果你的工程名叫testhello,那么这个jar文件就是testhello.jar)文件。如果你的EJB容器(weblogic或JBoss)是在本机上,那么在JBuilder或eclipse中就可以直接鼠标右击EJB工程,来部署EJB。如果需要部署到远程服务器上,只需要通过EJB容器的控制台将testhello.jar上传到远程端,然后在EJB Modler里面按提示部署好EJB。最后,别忘了在JNDI Tree里面察看你的EJB工程的JNDI名,本例的JNDI名叫SayHello

第三步:将remote接口和home接口打包成jar文件,copy到你要远程调用EJB的struts工程下的lib目录(例如:helloapp ->WEB-INF ->lib)

第四步:将weblogic的weblogic.jar(在weblogic的安装目录->weblogic81->server->lib文件夹中)copy到tomcat安装目录下的->shared->lib文件夹中,其实这里我们需要用到的只是weblogic.jar里的几个class文件而已,不过对于初学者而言,先不必去深究到底只需要那几个class。

第五步:编写一个简单的struts工程(其实这些都可以用工具生成),一下是调用EJB的HelloAction的源代码(特别要注意的是,记得要将之前第三步生成的jar包导入编辑器中,否则下面的代码编译通不过。如果你不知道导入jar包,就把那个jar包多copy一份到你的jdk安装目录 -> jre-> lib-> ext文件夹下)

package logging.actions;
import logging.Constants;

import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.util.MessageResources;
import org.apache.struts.validator.DynaValidatorForm;

public final class HelloAction extends Action{
 
 public ActionForward execute(ActionMapping mapping,
         ActionForm form,
         HttpServletRequest request,
         HttpServletResponse response)
 throws Exception{

        InitialContext ctx=this.getInitialContext();

  //查找JNDI名为SayHello的EJB组件
        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="飘然随风";
        String sayString=hello.sayHello(name);
        
        request.setAttribute("userName",name);
        request.setAttribute("passWord",sayString);
        request.removeAttribute(mapping.getAttribute());
      
  return mapping.findForward("loginSuccess");
 }
 

/*以下方法是作用是:通过传递环境属性选择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);
 }
}

第六步:如果你严格按照上面的步骤做了,那么剩下的就是同时启动weblogic和tomcat来测试了。

 

一步一步教你远程调用EJB

前期准备:弄清楚weblogic(或jboss)、tomcat、JBluder(或eclipse+MyEclipse)的使用方法,能写一个简单的基于struts框架的web工程,然后准备两台联网的电脑...
  • yczz
  • yczz
  • 2007年12月19日 21:36
  • 853

一步一步远程调用EJB

  前期准备:弄清楚weblogic(或jboss)、tomcat、JBluder(或eclipse+MyEclipse)的使用方法,能写一个简单的基于struts框架的web工程,然后准备两台联网的...
  • guohui_ke
  • guohui_ke
  • 2007年06月06日 17:18
  • 360

一步一步跟我学hadoop(1)----hadoop概述和安装配置

这几年云计算大数据很火,借这个东风,今天开始学习apache的分布式计算框架hadoop,希望不要太落后。 Apache Hadoop是一个在大型集群的商品硬件上运行的应用程序的框架。Hadoop框架...
  • wuyinggui10000
  • wuyinggui10000
  • 2015年07月05日 23:08
  • 2329

简单的跑酷游戏

策划部分:关于游戏背景,我把主角设置成了《爱宠大机密》中的兔子小白(雪球),相信大家对与这只兔子相关的表情包不会陌生。       以此为背景,我打算设置一个在人类的追逐下,兔子尽力逃跑的故事情...
  • dkshkb
  • dkshkb
  • 2017年11月18日 23:00
  • 150

gdb 一步一步调试程序

例子: #include #include #include int main (int argc, char *argv[]) { time_t time_stamp; st...
  • duyiwuer2009
  • duyiwuer2009
  • 2015年01月23日 11:41
  • 1298

一步一步学习EJB

EJB(Enterprise Javabean)用于开发可重用的服务器组件,利用EJB,可以像搭积木一样开发EJB组件,然后其他人可以把EJB组件组装到不同的应用中。还记得学面向过程的时候,复用的是代...
  • xqf309
  • xqf309
  • 2013年12月31日 00:31
  • 2812

使用Progurad工具混淆代码 保留内部类并正常调用

有一个类 cn.emagsoftware.test.Demo, 内部类: public abstract interface GameCallback {   public abstrac...
  • gg137608987
  • gg137608987
  • 2013年06月20日 17:31
  • 1071

一步一步教你Socket编程

文章转载自 http://haohaoxuexi.iteye.com/blog/1979837
  • Absolut_Seven
  • Absolut_Seven
  • 2015年12月02日 22:51
  • 130

一步一步学ROP之linux_x86篇

0x00    本文仅解释说明蒸米大神一步一步学ROP之linux_x86篇,读者应先阅读这篇文章,遇到问题再来看我这篇文章。    阅读完这两篇文章后,我们会理解ROP(返回导向编程),DEP(堆栈...
  • jltxgcy
  • jltxgcy
  • 2016年02月19日 11:16
  • 2448

EJB分布式远程调用的小例子的简单实现。[附源码]

EJB分布式远程调用的小例子的简单实现[附源码,欢迎学习研究。] 说起远程分布式应用大家可能都会联想到现在的云计算。基于分布式的架构。 翻出以前的代码,贴在这里,和大家一起学习关于分布式的几点见解...
  • yaerfeng
  • yaerfeng
  • 2012年01月10日 23:38
  • 4946
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一步一步教你远程调用EJB
举报原因:
原因补充:

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