Jboss7 部署EJB3 簡明教程

什麼是EJB?
EJB 是 Java 企業Bean, 是JavaEE服務端 企業組件模型,它的設計目標與核心應用是部署分佈式應用程序。話很少說,直接看如何在本機部署EJB3。
 
部署環境:
操做系統:Windows 8.1
EJB容器:Jboss 7.1
DB: MySQL 5.6.10
IDE: MyEclipse 10
JDK: 1.6
 
一、建立數據庫、表
因爲在此過程當中,須要和數據庫通訊,須要首先建立數據庫表。
建立數據庫: create database student;  //建立數據庫 student
建立表: create table student(   //建立表student 和 數據庫同名
`id` integer(11) not null, 
`name` varchar2(20) default null,
primary key (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=latin1
插入一條數據:
insert into student values(1,'easynoder');
commit;
給本地的root用戶(生產環境請勿這樣作)指定訪問權限。
grant all privileges  on *.* to root@localhost indentified by "1234"
 
經過以上步驟,須要的數據庫表已創建好。可經過root用戶訪問全部數據。
 
二、編寫實體Bean、用戶操做接口和會話Bean
 
創建EJB工程,名爲 MyEJBProject。該工程META-INFO目錄下包含一個文件persistence.xml文件。該文件用來配置數據源,稍後進行配置。
接着創建實體Bean
 1 @Entity  //代表這是一個實體Bean
 2 @Table (name = "student" ) //和數據庫表student 創建映射
 3 public class StudentEntity implements Serializable {
 4 
 5     private static final long serialVersionUID = 4002145187978562529L;
 6 
 7     @Id // 代表是該實體的id
 8     @GeneratedValue(strategy = GenerationType. AUTO ) //id生成策略
 9     @Column(name = "id" )//對應student表id字段
10     private int id ; 
11 
12     @Column(name = "name" ) // 對應student表name字段
13     private String name;
14 
15     public int getId() {
16         return id ;
17     }
18 
19     public String getName() {
20         return name ;
21     }
22 
23     public void setId(int id) {
24         this .id = id;
25     }
26 
27     public void setName(String name) {
28         this .name = name;
29     }
30 
31 }
View Code
創建操做接口:
1 public interface BaseOperation {
2 
3     public List<?> findAll();
4 }
View Code
該接口只有一個方法,獲取全部的學生
 
創建會話Bean
 1 @Stateless //這是一個無狀態Bean
 2 @Remote (BaseOperation. class) //指明Bean的remote接口
 3 public class StudentDaoBean implements BaseOperation {
 4      
 5      // EntityManager是由EJB容器自動配置和管理的,unitName屬性的值對應
 6 persistence.xml 中< persistence-unit name = "MyEJBProject" transaction-type = "JTA" ></ persistence-unit > name的配置
 7     @PersistenceContext(unitName = "MyEJBProject" )
 8     private EntityManager em;
 9 
10     @SuppressWarnings( "unchecked" )
11     public List<?> findAll() {
12         System. out .println("查詢開始..." );
13         List<StudentEntity> list = em.createQuery( " from StudentEntity ").getResultList();
14         if (list != null) {
15             Iterator<StudentEntity> it = list.iterator();
16             while (it.hasNext()) {
17                 StudentEntity student = it.next();
18                 System. out .println("學生id:" + student.getId());
19                 System. out .println("學生名稱:" + student.getName());
20             }
21         }
22         System. out .println("查詢完畢...." );
23         return list;
24     }
25 
26 }
View Code
 
三、數據源配置
這裏須要注意下,在jboss6 和jboss7的配置是不一樣的。
jboss6和之前版本都是在deploy目錄下 添加**-ds.xml,這裏**表示任意一種數據庫名稱,若是是mysql,則是mysql-ds.xml文件。而在jboss7中,是不同的。
將目錄切換至Jboss 的安裝目錄,即%JBOSS_HOME%下,進入modules/com目錄,創建文件夾mysqldatabase,進入,創建mysql文件夾,進入,創建main文件夾。
在main目錄下,創建module.xml文件,該配置文件內容爲:
 
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <module xmlns="urn:jboss:module:1.1" name="com.mysqldatabase.mysql">
 3      <resources>
 4           <resource-root path="mysql-connector-java-5.**-bin.jar"/>
 5      </resources>
 6      <dependencies>
 7           <module name="javax.api"/>
 8           <module name="javax.transaction.api"/>
 9           <module name="javax.servlet.api" optional="true"/>
10      </dependencies>
11 </module>
View Code
尤爲這裏須要注意的是,module 節點屬性name的值,就是剛纔我們創建的文件夾的路徑。resources表示mysql驅動的路徑。意味着,須要將mysql的驅動放在main目錄下。即main目錄下包含兩個文件,module.xml和數據庫驅動文件。
 
在作完上一步後,切換到%JBOSS_HOME%\standalone\configuration目錄下,
打開standalone.xml,搜索datasources,進行以下配置
 
 1 <datasources>
 2                 <datasource jndi-name="java:jboss/KouMySQLDS" pool-name="MySQLDS" enabled="true" use-java-context="true">
 3                     <connection-url>jdbc:mysql://localhost:3306/student</connection-url>
 4                     <driver>mysql</driver>
 5                     <security>
 6                         <user-name>root</user-name>
 7                         <password>1234</password>
 8                     </security>
 9                 </datasource>
10                 <drivers>
11                     <driver name="mysql" module="com.mysqldatabase.mysql">
12                         <driver-class>com.mysql.jdbc.Driver</driver-class>
13                         <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
14                     </driver>
15                 </drivers>
16             </datasources>
View Code
jndi-name表示數據源jndi名稱,connection-url表示鏈接的url字符串;這裏默認使用3306端口,使用student庫,用戶名和密碼即第一步配置的。module配置的即剛剛配置的module的路徑。
 
jboss的相關配置已經完成,接着切換到剛新建的工程,其中有一個persistence.xml配置文件,該文件作以下配置,其中jta-data-source 就是上面配置的jndi-name.
 
1 < jta-data-source> java:jboss/KouMySQLDS </jta-data-source >
2            < properties>
3                < property name= "hibernate.hbm2ddl.auto" value ="validate" />
4                < property name= "hibernate.jdbc.fetch_size" value ="15" />
5                < property name= "hibernate.jdbc.batch_size" value ="10" />
6                < property name= "hibernate.show_sql" value ="true" />
7                < property name= "hibernate.format_sql" value ="true" ></ property>
8            </ properties>
View Code
到此爲止,服務端代碼和數據源配置已經完成。接下來須要作的就是如何部署代碼以及如何在客戶端調用該EJB服務。
 
四、部署EJB服務。
將以前在工程中寫的全部代碼打成jar包,命名爲ejbservice.jar。同時,只將實體Bean和接口打包成jar包,命名爲ebjinterface.jar,這個jar未來用於客戶端調用使用。
將ejbservice.jar放入%JBOSS_HOME%\standalone\deployments目錄下。在jboss啓動時,會自動掃描該目錄。而後部署該jar。
 
ok,咱們將jboss配置到MyEclipse下,在MyEclipse中啓動Jboss,觀察控制檯的輸出。
若是出現了 Deployed "ejbservice.jar" 這個日誌,說明ejb就部署成功了。
 
五、客戶端如何調用呢?
客戶端調用須要兩個必備條件:
引入jboss-ejb-client.properties配置、 jboss-client.jar和ejbinterface.jar。其中jboss-client.jar 位於jboss bin/client目錄下。ejbinterface.jar是咱們剛剛建立的客戶端須要使用的接口jar包。
jboss-ejb-client.properties配置以下:
endpoint.name= client-endpoint
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED= false
remote.connections= default
remote.connection.default.host= localhost
remote.connection.default.port= 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS= false
remote.connection.default.username= yourUsername
remote.connection.default.password= yourPassword
 
有了這兩個條件,就能夠安心的創建個測試類EJBTest.java,編寫客戶端方法了。
 
 1      public static void main(String[] args) {
 2 
 3         Properties props = new Properties();
 4         props.setProperty(Context. URL_PKG_PREFIXES,"org.jboss.ejb.client.naming" );
 5         try {
 6             Context context = new InitialContext(props);
 7             // 這裏須要注意字符串的寫法:ejbservice 表示ejb的包名,StudentDaoBean表示我們實際調用的會話Bean,org.easynoder.ejb2.dao.BaseOperation表示 對應的接口
 8             BaseOperation op = (BaseOperation) context
 9                     .lookup("ejb:/ejbservice//StudentDaoBean!org.easynoder.ejb2.dao.BaseOperation" );
10             op.findAll();
11         } catch (NamingException e) {
12             e.printStackTrace();
13         }
14     }
View Code
運行這段代碼,能夠成功的查詢到數據庫的數據啦。
 
至此,EJB就部署成功啦。
相關文章
相關標籤/搜索