zoukankan      html  css  js  c++  java
  • 一个简单的EJB例子

    转载自 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
    代码如下:
    代码1Converter.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;
    }
     
    代码2ConverterHome.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;
    }
     
    代码3ConverterEJB.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文件内容:
    代码4ejb-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文件内容:
    代码4jboss.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目录下。
    代码5jndi.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,如下所示:
    代码6ConverterClient.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));
  • 相关阅读:
    Centos系统通过tar.gz包安装MySQL5.7
    性能优化之MySQL优化(慕课)
    高性能可扩展MySQL数据库设计及架构优化 电商项目(慕课)第2章 电商实例数据库结构设计
    高性能可扩展MySQL数据库设计及架构优化 电商项目(慕课)第1章 数据库开发规范的制定
    道路交通实时流量监控预测系统(大讲台)
    Deepgreen DB 是什么(含Deepgreen和Greenplum下载地址)
    Linux常用命令-----------------磁盘挂载命令
    一站式学习Redis 从入门到高可用分布式实践(慕课)第十一章 Redis云平台Cachecloud
    一站式学习Redis 从入门到高可用分布式实践(慕课)第十章 缓存设计与优化
    一站式学习Redis 从入门到高可用分布式实践(慕课)第九章 Redis Cluster利用redis-trib.rb快速搭建集群
  • 原文地址:https://www.cnblogs.com/itblog/p/7236595.html
Copyright © 2011-2022 走看看