日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

EJB开发步骤

發(fā)布時間:2024/8/1 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EJB开发步骤 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

首先寫一個EJB3.0的項目肯定有2個部分組成(下面是用MyEclipse6.0+jboss-4.2.2.GA說明):

1. EJB的組件(封裝了業(yè)務(wù)邏輯的組件)

2. 客戶端(注意:客戶端可以說Java程序,也可以說Web程序,或是WebService)

假設(shè)我們要做一個登錄的小例子看下面的步驟:

1.準(zhǔn)備工作:

你需要有MyEclipse6.0的IDE 和jboss-4.2.2.GA (該版本比較穩(wěn)定,推薦使用,其他版本好像有點bug)及MySQL5.0的數(shù)據(jù)庫,數(shù)據(jù)庫和服務(wù)器的集成此處不再說明,自己去查google

有了以上的東西,我們就來配置一下Jboss的數(shù)據(jù)源。Jboss的數(shù)據(jù)源配置非常簡單,只要復(fù)制一下數(shù)據(jù)源的配置模板手動修改一下就ok了。你可以到Jboss的安裝目錄找到D:\jboss-4.2.2.GA\docs\examples\jca文件夾下(此路徑為我的安裝路徑,可能你安裝的盤和我不一樣,但文件夾都是一樣的)找到mysql-ds.xml文件將它復(fù)制到D:\jboss-4.2.2.GA\server\default\deploy目錄下(此為默認(rèn)的運(yùn)行部署目錄,在配置Jboss服務(wù)器的時候可以指定使用default的)打開該文件。

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
??? <jndi-name>MySqlDS</jndi-name>
??? <connection-url>jdbc:mysql://localhost:3306/mydb</connection-url>
??? <driver-class>com.mysql.jdbc.Driver</driver-class>
??? <user-name>root</user-name>
??? <password>123</password>
??? <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
??? <metadata>
?????? <type-mapping>mySQL</type-mapping>
??? </metadata>
</local-tx-datasource>
</datasources>

只要編輯加粗的3個地方就可以了(即:連接地址URL,用戶名,密碼)。

到這里數(shù)據(jù)源就配置完成了。是不是非常簡單啊。網(wǎng)上很多人寫的配置數(shù)據(jù)源都不知道是故意還是疏漏,寫的都不清楚。害我開始學(xué)的時候繞了好大一個圈子。鄙視一下!

建立好了數(shù)據(jù)源,我們還要先在數(shù)據(jù)庫中建立一個表,只要有3個字段就夠了,Id列 ,用戶名,密碼。注意:在使用MyEclipse的時候當(dāng)新建一個EJB3.0的工程時,要求通過Driver來找到需要使用的數(shù)據(jù)庫,但如果你數(shù)據(jù)庫中沒有要使用的表,則@Entity注解將一直報錯。原因么無法找到相應(yīng)的表。

現(xiàn)在就能新建一個EJB3.0的工程了,在生成工程的時候一定要小心在JNDI DataSource 的地方要求輸入數(shù)據(jù)源的名稱,這個地方不是隨便輸入的,使用Jboss時此處的格式為 java:/數(shù)據(jù)源的名稱。所以我們這里應(yīng)該填寫java:/MySqlDS 其他的地方基本上已經(jīng)很簡單了,driver什么的直接按照向?qū)Ь湍茌p松搞定。當(dāng)EJB工程創(chuàng)建完畢,我們第一步就算搞定了,你可以往下看了。

2.建立持久化類

為了簡單起見,這里推薦采用逆向工程創(chuàng)建持久化類。

步驟:切換到MyEclipse DataBase Explorer 啟動數(shù)據(jù)庫連接,選擇需要生成持久化類的表,右鍵選擇EJB3 Reverse Engineering?后面跟著向?qū)Ь涂梢酝瓿闪恕?/p>

但需要注意的是使用逆向工程生成的持久化文件有點小問題。主要是主鍵,如果你數(shù)據(jù)庫中使用了自動增長的話,這里就要手動改一下生成的持久化類。

@Id
@Column(name = "p_id", unique = true, nullable = false, insertable = true, updatable = true)
@GeneratedValue
public Integer getPId() {
?? return this.PId;
}

加上粗體字的這個注解,這個是自動生成Id的值,使用默認(rèn)的生成策略(使用本地數(shù)據(jù)庫生成)

到這里我們的持久化類就算大功告成了,下面就來開發(fā)EJB3.0的業(yè)務(wù)邏輯方法了。

3.在這里我們使用無狀態(tài)會話bean來開發(fā)

@Stateless?//注解說明是一個無狀態(tài)會話bean

@Remote?//注解遠(yuǎn)程接口

public Class?UserinfoBeanimplements?UserinfoRemote{ //實現(xiàn)了接口

@PersistenceContext(unitName="EJB_demo02PU")?//持久化上下文注解

public EntityManager em;?//通過注入實體管理器,便于持久化操作

public int validateByNameAndPass(String name, String pass) {
?? Query query = this.em.createQuery("from Userinfo u where u.username=? and u.password=?");
?? query.setParameter(1, name);
?? query.setParameter(2, pass);
?? Userinfo u = (Userinfo)query.getSingleResult();
?? if (null == u){
??? return -1;
?? }else{
??? return u.getId();
?? }
}

}

到這里我們的EJB3.0的組件就算開發(fā)完成了。是不是沒有什么難度的?呵呵,下面繼續(xù)開發(fā)客戶端吧。

4.開發(fā)客戶端調(diào)用EJB組件

上面我們看到了客戶端可以是Java客戶端或是web客戶端或是Webservice

我這里就簡單說明一下web客戶端的使用,其實java客戶端寫法都是一樣的,主要注意的地方就是獲取JNDI上下文和lookup的查找格式

首先新建一個web工程

導(dǎo)入Jboss的客戶端支持包,找到D:\jboss-4.2.2.GA\client目錄,將所有jar文件添加到web工程的classpath里

將EJB工程添加到project下,或是將EJB打包成jar放到lib目錄下

添加jndi.properties資源文件,可以到D:\jboss-4.2.2.GA\server\default\conf目錄下找到,將該文件復(fù)制到web工程的src目錄下,打開并編輯,在末尾添加java.naming.provider.url=localhost這句話

ok現(xiàn)在可以編寫客戶端了,JSP頁面的編寫這里就不說了,需要說明的是在Servlet編寫的時候可以按下面的方法寫:

package org.sp.servlet;

import java.io.IOException;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.sp.session.UserinfoRemote;

public class LoginAction extends HttpServlet {

private static final long serialVersionUID = -1510748724137390401L;
private UserinfoRemote ur;

public void doPost(HttpServletRequest request, HttpServletResponse response)
??? throws ServletException, IOException {

?? String username = request.getParameter("username");
?? String passwrod = request.getParameter("password");
?? System.out.println(username + "?? " + passwrod);
??int i = this.ur.validateByNameAndPass(username, passwrod);
?? if (i > 0) {
??? response.sendRedirect("../success.jsp");
?? } else {
??? response.sendRedirect("../index.jsp");
?? }
}

//在Servlet初始化的時候?qū)JB的遠(yuǎn)程接口引用對象初始化

public void init() throws ServletException {
?? try {
??? InitialContext ic = new InitialContext();

//查找遠(yuǎn)程接口的格式為(EJB的實現(xiàn)類/remote)
??? this.ur = (UserinfoRemote) ic.lookup("UserinfoBean/remote");
?? } catch (NamingException e) {
??? e.printStackTrace();
?? }
}

}

自此我們的EJB開發(fā)就算是完成了,部署到Jboss運(yùn)行一下吧!我寫這篇文章,可能里面還有一些細(xì)節(jié)我沒有注意到,大家可以自己去嘗試一下。應(yīng)該不會有太大的障礙了。基本要注意的地方我基本上都說明了。

還有一個概念要說明一下:上面的這個例子是調(diào)用了遠(yuǎn)程接口,如果你有興趣可以再添加一個@Local注解

在Servlet里面調(diào)本地接口
??? this.ur = (UserinfoRemote) ic.lookup("UserinfoBean/local");

因為我們使用的Web客戶端部署在同一個Jboss服務(wù)器,也就是說EJB和客戶端運(yùn)行在同一個JVM下,我們就能調(diào)用本地接口了。

總結(jié)

以上是生活随笔為你收集整理的EJB开发步骤的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。