转载自 http://blog.sina.com.cn/s/blog_678530f60100hvwy.html


声明:这个Converter的例子应该是J2EE 1.4 Tutorial上面的。不过那上面都是用NetBeans开发的。让人知其然,不知所以然。同时本文参考了网上的一些资料。算不上原创,只能说是把别人 的东西拿来总结了一下。
 
1、  开发环境:Windows
XP SP2,WTP1.02,JBoss4.02,JDK1.5.05
2、  在WTP中新建一个EJB
Projcet:ejb_demo,然后加入一个EJB模块所需要的文件: Remote(or Local) Interface、Remote(or Local) Home Interface、Bean class。本例子中依次为:Converter.java、ConverterHome.java、ConverterEJB.java。源代码见后 面。
Ø         Converter.java                       Remote
Interface
Ø         ConverterHome.java             Remote
Home Interface
Ø         ConverterEJB.java                 Bean
class
代码如下:
代码1:Converter.java
// Converter.java -- Remote Interface.
// 2006-10-13 12:46
import java.rmi.RemoteException;
import javax.ejb.*;
 
public interface Converter extends EJBObject {
   public double dollarToYen(double dollars) throws RemoteException;
   public double yenToEuro(double yen) throws RemoteException;
 
   // Simple example.
   public String helloEcho(String word) throws RemoteException;
}
 
代码2:ConverterHome.java
// ConverterHome.java -- Remote Home Interface.
// 2006-10-13 12:50

import java.rmi.RemoteException;
 
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
 
public interface ConverterHome extends EJBHome {
   Converter create() throws CreateException, RemoteException;
}
 
代码3:ConverterEJB.java
// ConverterEJB.java -- Bean class.
// 2006-10-13 12:54
 
import java.rmi.RemoteException;
import javax.ejb.*;
 
public class ConverterEJB implements SessionBean {
 
   private static final long serialVersionUID = 1L;
  
   public double dollarToYen(double dollars) {
       return dollars * 121.6000;
   }
 
   public double yenToEuro(double yen) {
       return yen * 0.0077;
   }
  
   public String helloEcho(String word) {
       System.out.println("Someone called 'Hello Echo Successed!'");
       return "*********" + word + "*********";
   }
  
   public void ejbCreate() {
       System.out.println("Ejb 4 is creating!...");
   }
  
   public void ejbPostCreate() {
   }
  
   public void ejbActivate() throws EJBException, RemoteException {
   }
 
   public void ejbPassivate() throws EJBException, RemoteException {      
   }
 
   public void ejbRemove() throws EJBException, RemoteException {
   }
 
   public void setSessionContext(SessionContext arg0) throws EJBException,
   RemoteException {      
   }
 
}
 
3、  在项目的META-INF目录中,确保有两个文
件:ejb-jar.xml和jboss.xml。前者应该已经自动生成了,后者要自己手动添加。内容如下:
u       ejb-jar.xml文件内容:
代码4:ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.1"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
 <display-name>ConverJAR</display-name>
 <enterprise-beans>
    <session>
      <display-name>ConverterEJB</display-name>
      <ejb-name>ConverterEJB</ejb-name>
      <home>ConverterHome</home>
      <remote>Converter</remote>
      <ejb-class>ConverterEJB</ejb-class>
      <session-type>Stateless</session-type>
      <transaction-type>Bean</transaction-type>
      <security-identity>
        <use-caller-identity/>
      </security-identity>
    </session>
 </enterprise-beans>
</ejb-jar>
 
u       jboss.xml文件内容:
代码4:jboss.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd">
<jboss>
   <enterprise-beans>
       <session>
           <ejb-name>ConverterEJB</ejb-name>
           <jndi-name>MyConverter</jndi-name>
       </session>
   </enterprise-beans>
</jboss>
 
请注意文件中的<jndi-name>MyConverter</jndi-name>元 素,用到了JNDI绑定,在客户程序中将使用到它。
4、因为用到了JNDI绑定,因此一旦发布到服务器上,你还需要一个jndi.properties文件,以告诉调用你程序的客户端请求到哪里去初始化JNDI naming service。文件内容如下,注意前面以#号开头的是注释。该文件和你的类文件放在同一目录下,即项目的build/classes目录下。
代码5:jndi.properties
# jndi.properties --
#
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
 
5、  最终的目录结构如下所示:
 
最终build/classes目录包含三个源文件的class文件、 jndi.properties文件和一个META-INF目录,META-INF目录下包含:ejb-jar.xml和jboss.xml两个文件。
6、将EJB项目打包成jar文件。控制台到的 build/classes目录下,执行:jar cvf Converter.jar .即将该项目打包成Converter.jar。注意命令后面的点,表示将当前目录打包。
7、将Converter.jar复制 到<JBoss-install>/server/default/deploy目录,起动JBoss Server(起动类型默认为Default)。控制台会输出相应提示,如下图所示:
       
8、编写客户端,这里是一个Java应用程序。我这里新建 了一个Java Project:ejb_client。因为要用到前面的相关类,所以把Converter.jar文件添加到ejb_client项目的Build path中,同时把j2ee.jar也添加进来,客户端就只有一个类:ConverterClient.java,如下所示:
代码6:ConverterClient.java
// ConverterClient.java -- A client class use ConverEJB in project ejb_demo.
// 2006-10-13 13:15
 
import javax.naming.*;
import javax.rmi.PortableRemoteObject;
 
public class ConverterClient {
  
   public static void main(String[] args) {
       try {
           // 创
建一个JNDI naming contest
           Context initial = new InitialContext();
          
           // 从JNDI 中以MyConverter 名子来定位到对象(在发布名称指定了JNDI名称)
          //  Object objref = initial.lookup("java:comp/env/ejb/ConverterEJB");
           Object objref = initial.lookup("MyConverter");
          
           // 通
过objref 得到ConverterHome 本地接口
           ConverterHome home = (ConverterHome)PortableRemoteObject.narrow(
                   objref, ConverterHome.class);
          
           // 再
由Home 接口的create 方法来创建一个服务器上的EJB实例
           Converter currencyConverter = home.create();
          
           // 调
用EJB 中的方法
           double amount = currencyConverter.dollarToYen(100.00);
           System.out.println(String.valueOf(amount));
           amount = currencyConverter.yenToEuro(100.00);
           System.out.println(String.valueOf(amount));

一个简单的EJB例子的更多相关文章

  1. 一个简单的CORBA例子

    因为对CORBA分析的需要,这里写一个简单的CORBA例子.从JDK1.2开始,JDK中集成了ORB的实现,本例子使用了JDK1.7,对于JDK1.2+应该都没有问题.这个例子实现一个简单的加减乘除的 ...

  2. 轻松创建nodejs服务器(1):一个简单nodejs服务器例子

    这篇文章主要介绍了一个简单nodejs服务器例子,本文实现了一个简单的hello world例子,并展示如何运行这个服务器,需要的朋友可以参考下   我们先来实现一个简单的例子,hello world ...

  3. 使用Multiplayer Networking做一个简单的多人游戏例子-3/3(Unity3D开发之二十七)

    使用Multiplayer Networking做一个简单的多人游戏例子-1/3 使用Multiplayer Networking做一个简单的多人游戏例子-2/3 使用Multiplayer Netw ...

  4. 使用Multiplayer Networking做一个简单的多人游戏例子-2/3(Unity3D开发之二十六)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51007512 ...

  5. 使用Multiplayer Networking做一个简单的多人游戏例子-1/3(Unity3D开发之二十五)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51006463 ...

  6. 一个简单的cmake例子

    一个简单的cmake例子CMakeLists.txt,生成动态库文件,可以指定发布目录. 尚不支持: 1.交叉编译环境配置 2.添加依赖库   #在当前目录新建一个build目录,然后cd build ...

  7. 企业级任务调度框架Quartz(3) 一个简单的Quartz 例子

    1. 一个简单的Quartz 工程     本示例应用比起众所周知的 System.out.println("Hello world from Quartz") 来还是要有趣些.当 ...

  8. 一个简单的springmvc例子 入门(1)

    一直是从事棋牌游戏,平常用的东西 大多数只是使用一些javase的一些 api对spring 这方面 用到的比较少,每次学了都忘,始终记不住.为了 更轻松学习springboot,从新学习了sprin ...

  9. 利用VisualStudio单元测试框架举一个简单的单元测试例子

    本随笔很简单,不涉及mock和stub对象,而是只给出一个简单的利用Visual Studio单元测试框架的最简单例子.如果需要深入理解Unit Test的原理与艺术,请参考<The art o ...

随机推荐

  1. 【Gerrit】持续集成工具Jenkins的安装配置与使用过程中遇到的问题整理

    1.下载war包 https://jenkins.io/download/ 2.安装 java -jar jenkins.war Error: Feb 21, 2019 2:17:25 AM wins ...

  2. VS2013环境里安装QT插件-“X86”与目标计算机类型“x64”冲突

    在VS2013环境里搭载QT老是出现模块计算机类型“X86”与目标计算机类型“x64”冲突 2.解决方案2.1 项目右键,属性>配置管理选择>x64,没有的话新建:2.2  项目右键,属性 ...

  3. Win8Metro(C#)数字图像处理--2.5图像亮度调整

    原文:Win8Metro(C#)数字图像处理--2.5图像亮度调整  2.5图像亮度调整函数 [函数名称] 图像亮度调整函数BrightnessAdjustProcess(WriteableBit ...

  4. SignalR---DOTNET客户端

    原文:SignalR---DOTNET客户端 这里面有用到异步的相关知识,本人前几篇文章也简单的提到. SignalR客户端要寄宿在.NET的客户端,必须安装Microsoft.AspNet.Sign ...

  5. eclipse 插件编写(二)

    上篇文章简单写了下怎么新建一个eclipse插件工程,这次写一下怎么在上次的工程中添加几个菜单,如菜单栏菜单.工具栏菜单.右键菜单等. 创建一个完成的菜单需要了解三个扩展点,即menus.comman ...

  6. 【Windows10 IoT开发系列】API 移植工具

    原文:[Windows10 IoT开发系列]API 移植工具 Windows 10 IoT Core 中是否提供你的当前 Win32 应用程序或库所依赖的 API? 如果不提供,是否存在可使用的等效 ...

  7. ASP.NET Core 下自定义模型绑定,去除字符串类型前后的空格

    效果图: 01 02 直接贴代码了: NoTrim public class NoTrimAttribute : Attribute { } 我们自定义的模型绑定提供程序 /// <summar ...

  8. VS2008 环境中完美搭建 Qt 4.7.4 静态编译的调试与发布(很不错,有六张插图说明,修改qmake.conf里的MD参数等)good

    为什么要在VS2008中使用QT静态编译呢?很简单,因为VS2008编译器编译出来的文件比mingw编译的要几乎小一半. 好了现在我们来做些准备工作,VS2008自然要安装的,然后打上SP1的补丁.然 ...

  9. windows 消息列表

    private const UInt32 WM_ACTIVATE = 0x0006; private const UInt32 WM_ACTIVATEAPP = 0x001C; private con ...

  10. spring boot自定义配置文件

    把一些可能会经常变动的东西写在配置文件中,可以增加程序的灵活性,避免多次改版发版. 在sping boot中除了自带的默认配置文件application.properties之外,我们还可以在reso ...