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

一步一步教你远程调用EJB

http://www.diybl.com/course/1_web/webjs/20071226/94785.html
www.diybl.com 时间:2007-12-26 作者:佚名 编辑:本站 点击: 686 [评论]

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

转载于:https://www.cnblogs.com/anme/archive/2009/10/09/1579392.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363053.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ADF:弹出窗口,对话框和输入组件

在本文中&#xff0c;当我们有一个af&#xff1a;popup包含af&#xff1a;dialog并在其中包含输入组件时&#xff0c;我想着重介绍一个非常常见的用例。 在实现此用例时&#xff0c;需要注意一些陷阱。 让我们考虑一个简单的示例&#xff1a; <af:popup id"p1" …

关于codeforces加载慢

昨天cdx报名cf&#xff0c;打开网页10多分钟才交了、、、。 今天问了wxy&#xff0c;百度了一下&#xff0c;以前也搜过&#xff0c;然后就忘记了。 今天记一下。 1.右键单击开始按钮&#xff0c;打开资源管理器&#xff0c;在资源管理器的地址栏中填写“%SystemRoot%\System3…

ORM 开发环境之利器:MVC 中间件 FreeSql.AdminLTE

前言 这是一篇纯技术干货的分享文章&#xff0c;FreeSql 已经基本完成 .NETCore 最方便的 ORM 使命&#xff0c;我们正在筹备生态的建立&#xff0c;比如 ABP 中如何使用 FreeSql 的实现&#xff0c;需要各种各样的扩展包&#xff0c;好多好多工作量。有没有大神愿意无偿参与做…

Hadoop Ecosystem解决方案---数据仓库

个人总结的一套基于hadoop的海量数据挖掘的开源解决方案.BI系统:Pentahopentaho是开源的BI系统中做得算顶尖的了.提供的核心功能如下:报表功能: 可视化(client, web)的报表设计. 分析功能: 可以生成分析视图&#xff0c;作数据作动态分析. Dashboard功能: 可以定制动态图…

django中间件及中间件实现的登录验证

1.定义 一个用来处理Django的请求和响应的框架级别的钩子&#xff08;函数&#xff09;&#xff0c;相对比较轻量级&#xff0c;并且在全局上改变django的输入与输出&#xff08;使用需谨慎&#xff0c;否则影响性能&#xff09; 直白的说中间件就是帮助我们在视图函数执行之前…

默认方法:Java 8的无名英雄

几周前&#xff0c;我写了一个博客&#xff0c;说开发人员学习新语言是因为它们很酷。 我仍然坚持这个主张&#xff0c;因为关于Java 8的事情真的很酷。 毫无疑问&#xff0c;该节目的明星是添加了Lambdas以及将函数提升为一等变量&#xff0c;而我目前最喜欢的是默认方法。 这…

用phpstudy配置网站遇到的一些问题

第一次是配置在我本机&#xff0c;总是连不上数据库&#xff0c;后来查看到mysql.ini配置文件里面端口号有一个不是3306&#xff0c;更改之后就好了。 第二次是配置在笔记本电脑上&#xff0c;安装的时候比较顺利&#xff0c;也就遇到80端口被占用还有缺少VC运行库的问题&#…

二进制和十进制的相互转换

十进制转二进制&#xff1a; 方法一&#xff1a;y…… 25 * x 24 * x 23 * x 22 * x 21 * x 20 * x&#xff0c;其中y是十进制数字&#xff0c;x是0或1。 方法二&#xff1a; 二进制转十进制&#xff1a; 10100125 * 1 24 * 0 23 * 1 22 * 0 21 * 0 20 * 141 更多专业前端知…

Teradata Expression 12 在Windows 2003上Connection Reset 问题的解决方法

Teradata Expression 12 安装在Windows 2003上&#xff08; 企业版 sp2&#xff09;&#xff0c;完全按照安装手册指导安装。安装过程一切顺利。完成后重启系统。通过Teradata Service Control启动一切正常。状态显示Teradata Running&#xff0c;打开session info ,可以看到一…

Hadoop开发工具简介

几天前&#xff0c; Apache Hadoop开发工具 &#xff08;又名HDT &#xff09;发布了。 这些项目旨在将插件引入eclipse中&#xff0c;以简化Hadoop平台上的开发。 该博客旨在概述HDT的一些重要功能。 单端点 该项目可以充当HDFS&#xff0c;Zookeeper和MR群集的单个端点。 您…

分布式理论之一:Paxos算法的通俗理解

https://www.cnblogs.com/esingchan/p/3917718.html转载于:https://www.cnblogs.com/JBLi/p/10732044.html

UML 面向对象分析与设计

面向对象方法以其超越传统方法的技术先进性越来越得到更多的重视&#xff0c;但技术的先进性不能完全代表一种新生事物的最后成功&#xff0c;还要看它是否能得到有效的推广。统一建模语言&#xff08;UML&#xff09;的产生为这种推广规定了一致的表示&#xff0c;诸多开发过程…

MVC 之var与dynamic

如果你用MVC写过程序&#xff0c;那么你应该知道ViewBag这个用于前后台的数据传递工具&#xff0c;那么你是否对ViewBag的用法感到过疑惑呢&#xff1f; ViewBag.Mode1lnew object();ViewBag.Model2new object();ViewBag.Model3new object();...... 我们知道&#xff0c;在使用…

使用Spring MVC时的常见错误

当我大约10年前开始我的职业生涯时&#xff0c;Struts MVC就是市场上的常态。 但是&#xff0c;多年来&#xff0c;我观察到Spring MVC逐渐流行起来。 鉴于Spring MVC与Spring容器的无缝集成以及它提供的灵活性和可扩展性&#xff0c;这对我来说并不奇怪。 从到目前为止的Spri…

CopyOnWriteArrayList

CopyOnWriteArrayList&#xff0c;add&#xff0c;引用赋值是原子操作吗&#xff1f; 引用类型的读写均是原子操作&#xff0c;https://docs.oracle.com/javase/specs/jls/se8/html/jls-17.html#jls-17.7&#xff0c;https://www.v2ex.com/t/280788 转载于:https://www.cnblogs…

Statement与PreparedStatement区别

1.性能区别 Statement statement conn.createStatement(); PreparedStatement preStatement conn.prepareStatement(sql); 执行的时候: ResultSet rSet statement.executeQuery(sql); ResultSet pSet preStatement.executeQuery(); 由上可以看出&#xff0c;PreparedState…

C++ operator操作符重载(++,--,-,+,())

C中,--操作符重载需要说明是(--)在操作数前面,还是在操作数后面,区别如下: 代码经过测试无误(起码我这里没问题^_^)Code1#include <iostream> 2#include <cstdlib> 3using namespace std; 4template<typename T> class A 5{ 6public: 7 A(): m_(0){ 8 …

CSS3-2

倒圆角 <!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>Document</title></head><body> <h1>圆角边框 —— border-radius IE9</h1> <!-- border-radius 是复合属性…

JavaFX技巧9:请勿混用Swing / JavaFX

JavaFX团队非常努力地说服我们&#xff0c;因为可以将Swing内容嵌入JavaFX UI中&#xff0c;因此可以很容易地从Swing迁移到JavaFX。 我必须承认&#xff0c;我从来没有亲自尝试过&#xff0c;但是根据我从客户那里得到的反馈&#xff0c;我只能建议不要将Swing和JavaFX混合使用…

[ZJJOI2013]K大数查询 整体二分

[ZJJOI2013]K大数查询 链接 luogu 思路 整体二分。 代码 #include <bits/stdc.h> #define ll long long using namespace std; const ll _5e57; ll read() {ll x0,f1;char sgetchar();for(;s>9||s<0;sgetchar()) if(s-) f-1;for(;s>0&&s<9;sgetchar(…