前期准备:弄清楚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来测试了。

java 调用ejb_一步一步教你远程调用EJB相关推荐

  1. 【转】一步一步教你远程调用EJB

    一步一步教你远程调用EJB http://www.diybl.com/course/1_web/webjs/20071226/94785.html www.diybl.com 时间:2007-12-2 ...

  2. Marco's Java【Dubbo 之手写Dubbo框架实现远程调用】

    前言 关于Dubbo入门的网上教程也特别多,因此我没有专门出关于Dubbo的系列博文(主要呢- 也是在忙些工作上的事儿),用Dubbo特别简单,但是想要把Dubbo学好,学精还得花费不少时间的,特别是 ...

  3. 怎么用feign远程调用别人的接口_spring cloud-openFeign声明式远程调用

    spring cloud-openFeign声明式远程调用 1.概述1.1.是什么Feign是一个声明式的Web服务客户端,让编写Web服务客户端变得非常容易,只需创建一个接口并在接口上申明注解Git ...

  4. 调用线程必须为sta_Java手写分布式系统远程调用RPC框架

    一.RPC简介 最近看hadoop底层通信,都是通过RPC实现的. RPC(Remote Procedure Call Protocol)远程调用: 远程过程调用是一种常用的分布式网络通信协议,它允许 ...

  5. Rpc远程调用框架的设计与实现(1)

    Rpc远程调用框架的设计与实现 1   Rpc远程调用框架设计概述 1.1  研究背景 1.1.1传统的Web开发方式 在传统的Web应用程序中,一般都是采取请求→刷新→显示的模式.即每当用户通过单击 ...

  6. 系统架构演变和远程调用

    系统架构演变和远程调用 ​ 随着互联网的发展,网站应用的规模不断扩大.需求的激增,带来的是技术上的压力.系统架构也因此也不断的演进.升级.迭代.从单一应用 一> 垂直拆分应用 一> 分布式 ...

  7. 分布式通信:远程调用

    分布式通信:远程调用 前言 什么是远程调用? 远程调用的原理及应用 RPC 的原理及应用 RMI 的原理及应用 RPC 与 RMI 对比分析 知识扩展:远程过程调用存在同步和异步吗? 总结 前言 分布 ...

  8. 提交响应后无法调用sendredirect_微服务的那些事(三),微服务的远程调用方式。RPC和HTTP...

    2.远程调用方式 无论是微服务还是SOA,都面临着服务间的远程调用.那么服务间的远程调用方式有哪些呢? 常见的远程调用方式有以下几种: RPC:Remote Produce Call远程过程调用,类似 ...

  9. 实现远程调用_微服务的那些事(三),微服务的远程调用方式。RPC和HTTP

    2.远程调用方式 无论是微服务还是SOA,都面临着服务间的远程调用.那么服务间的远程调用方式有哪些呢? 常见的远程调用方式有以下几种: RPC:Remote Produce Call远程过程调用,类似 ...

  10. 某个软件调用目标异常_线上RPC远程调用频繁超时问题排查,大功臣Arthas

    来源于公众号Java艺术 , 作者wujiuye 两耳不闻窗外事,一心只读圣贤书.又是一个美好的周末,一觉睡到自然醒,写写文章看看书!这周原计划是写Dubbo注册中心的,但这周先说故事. 上次服务雪崩 ...

最新文章

  1. $(document).ready(function() {})不执行的问题
  2. 【干货】Dask快速搭建分布式集群(大数据0基础可以理解,并使用!)
  3. 你还笃信亲身经历的事情吗?来看看大脑如何处理感觉信息
  4. ESFramework介绍之(21)-- Tcp组件接口ITcp介绍
  5. c++11 chrono
  6. 数字转字符函数_Excel之文本函数CONCATENATE/TEXT/LEFT/MID/RIGHT/FIND/LEN
  7. 3578. 最大中位数
  8. Springboot2 Swagger3 集成
  9. Install Python 3.6 on Ubuntu 16.04, from source
  10. Vue 全家桶 + Electron 开发的一个跨三端的应用 1
  11. 连接工作组计算机用户名和密码,访问局域网中工作组的电脑需要用户名和密码...
  12. matlab mse mae,回归评价指标MSE、RMSE、MAE、R-Squared
  13. php 新历转农历,PHP实现阳历转阴历的方法
  14. 摄影中快门、光圈、ISO之间的关系
  15. requests框架详解
  16. MR案例(1)词频统计
  17. Tinyos2.x相关资料
  18. 电力电子应用技术的matlab仿真
  19. java中将类放入包中,Java 包
  20. APP流量变现的“快车”,你坐上了吗?

热门文章

  1. 嵌入式UWB定位测距设备开发实战(7)硬件之天线选型
  2. psftp的简单使用
  3. 国军标--Gjb软件需求规格说明书模板
  4. idea导出jar包
  5. (崩溃整理)EDEM多体动力学EDEM-ADAMS耦合步骤,及报错问题分析
  6. 二进制数除法 matlab,MATLAB求出不可约多项式(实现二进制加法、除法)
  7. JavaWeb 敏感词汇过滤器
  8. 有关arcmap的学习使用心得
  9. 关于阿克曼函数(akermann)非递归算法的一点见解 c++
  10. 使用正则表达式大写SQL关键字