zoukankan      html  css  js  c++  java
  • 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
     
    1、创建数据库、表
    由于在此过程中,需要和数据库通信,需要首先创建数据库表。
    创建数据库: 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用户访问所有数据。
     
    2、编写实体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
     
    3、数据源配置
    这里需要注意下,在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%standaloneconfiguration目录下,
    打开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服务。
     
    4、部署EJB服务。
    将之前在工程中写的所有代码打成jar包,命名为ejbservice.jar。同时,只将实体Bean和接口打包成jar包,命名为ebjinterface.jar,这个jar将来用于客户端调用使用。
    将ejbservice.jar放入%JBOSS_HOME%standalonedeployments目录下。在jboss启动时,会自动扫描该目录。然后部署该jar。
     
    ok,我们将jboss配置到MyEclipse下,在MyEclipse中启动Jboss,观察控制台的输出。
    如果出现了 Deployed "ejbservice.jar" 这个日志,说明ejb就部署成功了。
     
    5、客户端如何调用呢?
    客户端调用需要两个必备条件:
    引入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就部署成功啦。
     
     
  • 相关阅读:
    win10安装tomcat7
    分布式任务调度平台XXL-Job搭建
    定时任务
    分散读取与聚集写入
    通道(Channel)的原理获取
    直接缓冲区和非缓冲区
    摘:"error LNK2019: 无法解析的外部符号 该符号在函数 中被引用" 错误原因
    摘:static,const,inline,define的意义
    摘:LIB和DLL的区别与在VC中的使用
    VS2010 DLL库生成和使用
  • 原文地址:https://www.cnblogs.com/benshan/p/4376823.html
Copyright © 2011-2022 走看看