1. 程式人生 > >Maven2下第一個EJB2.1簡單例項

Maven2下第一個EJB2.1簡單例項

        一開始還是得列出Maven2下EJB2.1的目錄結構,詳細介紹請參照我之前寫的一篇文章 [ Maven2下第一個EJB3.0簡單例項 ],之所以將EJB2.1的例項與EJB3.0的例項寫到一起,是因為確實兩個版本變化較大,也是因為很多人確實遇到要從EJB2.1跳轉到EJB3.0的情況,就是說要把以前EJB2.1的改寫成EJB3.0的,這樣的話,肯定需要有一個開始,萬事開頭難,搞技術一點也例外不了,有些就是在一開始的時候做個簡單例項都要花上好長一段時間,反而在做出簡單例項後,之後的工作進展就快許多,所以我將這兩篇文章擺到一起,有需要就看吧,沒需要也不影響。

ejb2test

    |--pom.xml                                                 //Maven專案根目錄必須有這檔案,主配置檔案來的

    |--src                                                         //專案資原始檔目錄,所有程式碼,專案相關的都在這

        |--main                                                  //主檔案目錄,與之相對應的是單元測試test目錄

            |--java                                               //JAVA檔案目錄,使之與圖片,配置檔案等隔離開來

                |--mydomain                                 //這下面就是你自己的東西,不一一介紹了

                    |--ejb2test

                        |--HaiRemoteHome.java       //EJB2需要一個或兩個Home檔案,用來返回EJBObject

                        |--HaiRemote.java                //Remote介面,相對應的是Local介面,二選一或二全選

                        |--HaiBean.java                    //這個才是主角,SessionBean檔案,裡面才有實現方法

            |--resources                                      //資原始檔,像一些配置檔案全放這,圖片也放這

                |--META-INF

                    |--ejb-jar.xml                            

                    |--jboss.xml

        |--test                                                    //單元測試目錄,與主目錄main相隔離,可不要這資料夾

            |--java                                               //下面這些目錄與main裡面的java目錄一模一樣,對應的

                |--mydomain

                    |--ejb2test

下面是整個pom檔案,全貼出來了


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mydomain</groupId>
    <artifactId>ejb2.1</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>ejb2 Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

       <!--就只需這一個包-->
        <dependency>
            <groupId>jboss</groupId>
            <artifactId>jboss-j2ee</artifactId>
            <version>4.0.2</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>ejb2</finalName>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.0.2</version>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

下面是HaiRemoteHome,HaiRemote與HaiBean的原始碼


1、HaiRemoteHome.java

package com.mydomain;

import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;


public interface HaiRemoteHome extends EJBHome
{
    HaiRemote create() throws RemoteException, CreateException;
}

2、HaiRemote.java

package com.mydomain;

import java.rmi.RemoteException;
import javax.ejb.EJBObject;


public interface HaiRemote extends EJBObject
{
    String sayHai() throws RemoteException;
}

3、HaiBean.java

package com.mydomain;

import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

public class HaiBean implements SessionBean
{

    public void setSessionContext(SessionContext arg0) throws EJBException, RemoteException
    {
        System.out.println("set session context");
    }
   
    public void ejbCreate() throws EJBException
    {
        System.out.println("ejb create");
    }

    public void ejbRemove() throws EJBException, RemoteException
    {
        System.out.println("ejb remove");
    }

    public void ejbActivate() throws EJBException, RemoteException
    {
        System.out.println("ejb activate");
    }

    public void ejbPassivate() throws EJBException, RemoteException
    {
        System.out.println("ejb passivate");
    }

    public String sayHai() throws RemoteException
    {
        return "Hai, EJB 2!";
    }

}

下面是ejb-jar.xml與jboss.xml的內容

1、ejb-jar.xml

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN' 'http://java.sun.com/dtd/ejb-jar_2_0.dtd' >

<ejb-jar>
    <description>Hai EJB instance.</description>
    <display-name>Hai EJB</display-name>
    <enterprise-beans>
        <session>
            <ejb-name>HaiEJB</ejb-name>
            <home>com.mydomain.HaiHome</home>
            <remote>com.mydomain.HaiRemote</remote>
            <ejb-class>com.mydomain.HaiBean</ejb-class>
            <session-type>Stateful</session-type>
            <transaction-type>Bean</transaction-type>
        </session>
    </enterprise-beans>
</ejb-jar>

2、jboss.xml

<?xml version="1.0" encoding="UTF-8"?>

<jboss>
    <enterprise-beans>
        <session>
            <ejb-name>HaiEJB</ejb-name>
            <jndi-name>HaiEJB</jndi-name>
        </session>
    </enterprise-beans>
</jboss>

寫完這些檔案,就可以用mvn生成jar包了

mvn install

然後在專案根目錄的target資料夾下,有一個ejb2.jar,將它複製到jboss資料夾下,server/default/deploy目錄中,然後在命令列中執行jboss資料夾下的/bin/run.bat檔案,這一過程通常稱之為deploy

待deploy成功後,就可以寫一個java application進行測試了

新建一個java application

匯入jboss目錄下client資料夾下的jboss-j2ee.jar,

然後新建一個類,寫上以下程式碼

import com.mydomain.HaiHome;
import com.mydomain.HaiRemote;
import java.rmi.RemoteException;
import java.util.Properties;
import javax.ejb.CreateException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;


public class Main
{
    public static void main(String[] args)
    {
        System.out.println("===========================================================");
        Properties props = new Properties();
        props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
        props.setProperty("java.naming.provider.url", "localhost:1099");
        props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
        try
        {
            InitialContext ctx = new InitialContext(props);
           
            Object objRef = ctx.lookup("HaiEJB");
           
            HaiHome home = (HaiHome) PortableRemoteObject.narrow(objRef, HaiHome.class);
           
            HaiRemote remote = home.create();
           
            System.out.println(remote.sayHai());
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }
}

 如果順利的話,你應該可以看到以下資訊

Hai, EJB 2!

相關推薦

Maven2一個EJB2.1簡單例項

        一開始還是得列出Maven2下EJB2.1的目錄結構,詳細介紹請參照我之前寫的一篇文章 [ Maven2下第一個EJB3.0簡單例項 ],之所以將EJB2.1的例項與EJB3.0的例項寫到一起,是因為確實兩個版本變化較大,也是因為很多人確實遇到要從EJB2.1

Jboss4.x一個EJB2.x程式

EJB的名聲很不好,尤其在Spring框架出現以後,而EJB3似乎脫胎換骨了。而我現在學習的仍然是EJB2,原因是EJB3的書很難找。暑假時大概把《精通EJB》和《EJB》這兩本書看過一下,現在想複習,加深理解,就從第一個HelloWorld開始。 檔案結構: E:.

1.簡單例項:ASP.NETEcharts通過Ajax從資料庫中獲取資料

後臺:Test01.ashx.cs:從資料庫獲取資料,通過HTTP請求(HttpContext)實現和前臺資料傳遞json資料 using System; using System.Collections.Generic; using System.Linq; using

人生一個java指令碼-jsoup例項

目的:   獲取如下資訊;       製作流程圖      該方法缺點,會獲取到多個重複貨號。 解決:匯出成excel表格-》選擇 貨號 列 -》刪除重複值 程式碼結構如下: ToMain.java &n

Linux一個C程式

今天開始在學習C的同時學習使用linux,通過雲伺服器來進行C開發。 接下來就是所有程式語言第一課:HelloWorld。 首先在Linux下建立新資料夾(總不能把所有學習過程的程式都堆在一個資料夾下吧

MAC一個Java程式

1.JDK的安裝 搜尋Java download,第一個就是JDK的[官方下載地址](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html). 我

SpringBoot 入門教程例項詳解(一) 開發一個SpringBoot應用程式例項

構建你的第一個Spring Boot應用程式 更多精彩請閱讀 東陸之滇的csdn部落格:http://blog.csdn.net/zixiao217 此教程提供一個入門應用程式例子,來展示Spring Boot是如何幫助快速、敏捷開發新一代應用的。你還可以通

改變多個ul一個li的樣式

body內的程式碼如下<ul> <li>華仔</li> <li>華仔</li> <li>華仔</li> </u

生產環境通過pm2部署node簡單例項

首先應該有一個要部署的專案 (1)建立一個資料夾project (2)在資料夾project中建立app.js檔案 (3)app.js內容如下 const http=require('http') http.createServer(function(req,res){ r

ResultSet 兩種取值 按順序總是用的也總是 忘記 一個1開始 做個記錄

您指定欄位名稱來取得資料: ResultSet result = stmt.executeQuery("SELECT * FROM message"); while(result.next()) ...{ System.out.print(result.getStrin

王學崗NDK系列(七)OpenCV概述及android studiondk OpenCV環境搭建+簡單例項

一:OpenCV概述 1.opencv相關概念 影象處理 利用計算機對影象進行分析處理,達到所需結果的技術,一般指的是數字影象處理,通過數碼裝置得到的數字影象是一個很大的二維陣列,陣列的元素叫畫素,畫素的值叫灰度值。主要的處理方法有去噪,增強,復原,分割,提

Ubuntu16.04一個openGL程式

1.安裝Mesa庫 sudo apt-get install libgl1-mesa-dev 2.安裝glut庫 sudo apt-get install freeglut3-dev 3安裝mesa-util sudo apt-get install

HTML拉選擇 簡單例項 新增刪除節點到另一個節點

 下拉選擇 簡單例項   <html> <head> <title>HTML</title> <style type="text/css"> </style> </h

HTML拉選擇 簡單例項 新增刪除節點到另一個節點

 下拉選擇 簡單例項 <html> <head> <title>HTML</title> <style type="text/css"> </style> </head>

《機器學習實戰》五章:Logistic迴歸(1)基本概念和簡單例項

最近感覺時間越來越寶貴,越來越不夠用。不過還是抽空看了點書,然後整理到部落格來。 加快點節奏,廢話少說。 Keep calm & carry on. ----------------------------------------------------------

C語言用陣列1. 簡單約瑟夫環問題: N個人,編號從1~N圍成一圈,輸入一個數T,從1號開始報數,報到T的人出圈;一人又從1開始報數,下一個報到T的人出圈,輸出出圈順序。 考慮問實現約瑟夫環問題

1. 簡單約瑟夫環問題: N個人,編號從1~N圍成一圈,輸入一個數T,從1號開始報數,報到T的人出圈;下一人又從1開始報數,下一個報到T的人出圈,輸出出圈順序。 考慮問題: 報到T的人出圈,怎麼表示出圈?要麼刪除對應的標號,其他的標號前移(如果是陣列結構,要依次移動

【C語言簡單說】二:一個C語言程式詳解(1

如有錯誤請給與糾正… 上一個教程只說明瞭第一個C語言程式原始碼中的: printf("Hello Wrold!"); 這行程式碼的含義,現在我們來說說全部程式碼;當然為了各位的方便,我就把那個程式

k8s技術預研1--通過一個簡單例項認識k8s基礎概念知識

一、Kubernetes基礎知識 1、在Kubernete中,Service是分散式叢集架構的核心,一個Service物件擁有如下關鍵特徵 擁有一個唯一指定的名字。 擁有一個虛擬IP和埠號。 能夠提供某種遠端服務能力。 被對映到了提供這種服務能力的一組容器應用上。

有n個人(1到n號)圍成一個圈,從1號按順序報數(1-3),每報數為3的人從隊伍去除,個人繼續從1開始報數,問最後剩下的那個人原來排在幾位- java

有n個人(1到n號)圍成一個圈,從第1號按順序報數(1-3),每報數為3的人從隊伍去除,下個人繼續從1開始報數,問最後剩下的那個人原來排在第幾位 思考 首先將這n個人原來的號碼存放在集合list中,然後迴圈遍歷他們,報數不為3的人新增到另外一個集合

Opencv學習1: 在Linux編譯執行一個opencv程式

前一段在安裝Caffe時候把Opencv2.4.11版本安裝在redhat6.4系統上,為了測試在Linux下如何編譯執行opencv程式碼,特意查詢了網上相關資料(主要參考三個網頁)。本文主要給出三種編譯執行的方式:命令列的方式;Makefile(兩種)方式;