• 一个简单的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));
  • 相关阅读:
    HDU 3681 Prison Break 越狱(状压DP,变形)
    POJ 2411 Mondriaan's Dream (状压DP,骨牌覆盖,经典)
    ZOJ 3471 Most Powerful (状压DP,经典)
    POJ 2288 Islands and Bridges (状压DP,变形)
    HDU 3001 Travelling (状压DP,3进制)
    POJ 3311 Hie with the Pie (状压DP)
    POJ 1185 炮兵阵地 (状压DP,轮廓线DP)
    FZU 2204 7
    POJ 3254 Corn Fields (状压DP,轮廓线DP)
    ZOJ 3494 BCD Code (数位DP,AC自动机)
  • 原文地址:https://www.cnblogs.com/itblog/p/7236595.html
Copyright © 2020-2023  润新知