EJB开发步骤
首先寫一個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é)
- 上一篇: 用计算机制作flash动画教案,最新最完
- 下一篇: 业余无线电通信_业余电台操作证书查询方式