EJB开发步骤
首先寫一個EJB3.0的項目肯定有2個部分組成(下面是用MyEclipse6.0+jboss-4.2.2.GA說明):
1. EJB的組件(封裝了業務邏輯的組件)
2. 客戶端(注意:客戶端可以說Java程序,也可以說Web程序,或是WebService)
假設我們要做一個登錄的小例子看下面的步驟:
1.準備工作:
你需要有MyEclipse6.0的IDE 和jboss-4.2.2.GA (該版本比較穩定,推薦使用,其他版本好像有點bug)及MySQL5.0的數據庫,數據庫和服務器的集成此處不再說明,自己去查google
有了以上的東西,我們就來配置一下Jboss的數據源。Jboss的數據源配置非常簡單,只要復制一下數據源的配置模板手動修改一下就ok了。你可以到Jboss的安裝目錄找到D:\jboss-4.2.2.GA\docs\examples\jca文件夾下(此路徑為我的安裝路徑,可能你安裝的盤和我不一樣,但文件夾都是一樣的)找到mysql-ds.xml文件將它復制到D:\jboss-4.2.2.GA\server\default\deploy目錄下(此為默認的運行部署目錄,在配置Jboss服務器的時候可以指定使用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,用戶名,密碼)。
到這里數據源就配置完成了。是不是非常簡單啊。網上很多人寫的配置數據源都不知道是故意還是疏漏,寫的都不清楚。害我開始學的時候繞了好大一個圈子。鄙視一下!
建立好了數據源,我們還要先在數據庫中建立一個表,只要有3個字段就夠了,Id列 ,用戶名,密碼。注意:在使用MyEclipse的時候當新建一個EJB3.0的工程時,要求通過Driver來找到需要使用的數據庫,但如果你數據庫中沒有要使用的表,則@Entity注解將一直報錯。原因么無法找到相應的表。
現在就能新建一個EJB3.0的工程了,在生成工程的時候一定要小心在JNDI DataSource 的地方要求輸入數據源的名稱,這個地方不是隨便輸入的,使用Jboss時此處的格式為 java:/數據源的名稱。所以我們這里應該填寫java:/MySqlDS 其他的地方基本上已經很簡單了,driver什么的直接按照向導就能輕松搞定。當EJB工程創建完畢,我們第一步就算搞定了,你可以往下看了。
2.建立持久化類
為了簡單起見,這里推薦采用逆向工程創建持久化類。
步驟:切換到MyEclipse DataBase Explorer 啟動數據庫連接,選擇需要生成持久化類的表,右鍵選擇EJB3 Reverse Engineering?后面跟著向導就可以完成了。
但需要注意的是使用逆向工程生成的持久化文件有點小問題。主要是主鍵,如果你數據庫中使用了自動增長的話,這里就要手動改一下生成的持久化類。
@Id
@Column(name = "p_id", unique = true, nullable = false, insertable = true, updatable = true)
@GeneratedValue
public Integer getPId() {
?? return this.PId;
}
加上粗體字的這個注解,這個是自動生成Id的值,使用默認的生成策略(使用本地數據庫生成)
到這里我們的持久化類就算大功告成了,下面就來開發EJB3.0的業務邏輯方法了。
3.在這里我們使用無狀態會話bean來開發
@Stateless?//注解說明是一個無狀態會話bean
@Remote?//注解遠程接口
public Class?UserinfoBeanimplements?UserinfoRemote{ //實現了接口
@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的組件就算開發完成了。是不是沒有什么難度的?呵呵,下面繼續開發客戶端吧。
4.開發客戶端調用EJB組件
上面我們看到了客戶端可以是Java客戶端或是web客戶端或是Webservice
我這里就簡單說明一下web客戶端的使用,其實java客戶端寫法都是一樣的,主要注意的地方就是獲取JNDI上下文和lookup的查找格式
首先新建一個web工程
導入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目錄下找到,將該文件復制到web工程的src目錄下,打開并編輯,在末尾添加java.naming.provider.url=localhost這句話
ok現在可以編寫客戶端了,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初始化的時候將EJB的遠程接口引用對象初始化
public void init() throws ServletException {
?? try {
??? InitialContext ic = new InitialContext();
//查找遠程接口的格式為(EJB的實現類/remote)
??? this.ur = (UserinfoRemote) ic.lookup("UserinfoBean/remote");
?? } catch (NamingException e) {
??? e.printStackTrace();
?? }
}
}
自此我們的EJB開發就算是完成了,部署到Jboss運行一下吧!我寫這篇文章,可能里面還有一些細節我沒有注意到,大家可以自己去嘗試一下。應該不會有太大的障礙了。基本要注意的地方我基本上都說明了。
還有一個概念要說明一下:上面的這個例子是調用了遠程接口,如果你有興趣可以再添加一個@Local注解
在Servlet里面調本地接口
??? this.ur = (UserinfoRemote) ic.lookup("UserinfoBean/local");
因為我們使用的Web客戶端部署在同一個Jboss服務器,也就是說EJB和客戶端運行在同一個JVM下,我們就能調用本地接口了。
總結
- 上一篇: 用计算机制作flash动画教案,最新最完
- 下一篇: 业余无线电通信_业余电台操作证书查询方式