部署Java在服务器端的EJB组件的方法

什么是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

@Entity //表明这是一个实体Bean
@Table (name = "student" ) //和数据库表student 建立映射
public class StudentEntity implements Serializable {
  private static final long serialVersionUID = 4002145187978562529L;

  @Id // 表明是该实体的id
  @GeneratedValue(strategy = GenerationType. AUTO ) //id生成策略
  @Column(name = "id" )//对应student表id字段
  private int id ; 

  @Column(name = "name" ) // 对应student表name字段
  private String name;

  public int getId() {
    return id ;
  }

  public String getName() {
    return name ;
  }

  public void setId(int id) {
    this .id = id;
  }

  public void setName(String name) {
    this .name = name;
  }

}

建立操作接口:

 public interface BaseOperation {

   public List<?> findAll();
 }

该接口只有一个方法,获取所有的学生
 
建立会话Bean

@Stateless //这是一个无状态Bean
@Remote (BaseOperation. class) //指明Bean的remote接口
public class StudentDaoBean implements BaseOperation {

   // EntityManager是由EJB容器自动配置和管理的,unitName属性的值对应
persistence.xml 中< persistence-unit name = "MyEJBProject" transaction-type = "JTA" ></ persistence-unit > name的配置
  @PersistenceContext(unitName = "MyEJBProject" )
  private EntityManager em;

  @SuppressWarnings( "unchecked" )
  public List<?> findAll() {
    System. out .println("查询开始..." );
    List<StudentEntity> list = em.createQuery( " from StudentEntity ").getResultList();
    if (list != null) {
      Iterator<StudentEntity> it = list.iterator();
      while (it.hasNext()) {
        StudentEntity student = it.next();
        System. out .println("学生id:" + student.getId());
        System. out .println("学生名称:" + student.getName());
      }
    }
    System. out .println("查询完毕...." );
    return list;
  }

}

3、数据源配置
这里需要注意下,在jboss6 和jboss7的配置是不同的。
jboss6和以前版本都是在deploy目录下 添加**-ds.xml,这里**表示任意一种数据库名称,如果是mysql,则是mysql-ds.xml文件。而在jboss7中,是不一样的。
将目录切换至Jboss 的安装目录,即%JBOSS_HOME%下,进入modules/com目录,建立文件夹mysqldatabase,进入,建立mysql文件夹,进入,建立main文件夹。
在main目录下,建立module.xml文件,该配置文件内容为:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="com.mysqldatabase.mysql">
   <resources>
     <resource-root path="mysql-connector-java-5.**-bin.jar"/>
   </resources>
   <dependencies>
     <module name="javax.api"/>
     <module name="javax.transaction.api"/>
     <module name="javax.servlet.api" optional="true"/>
   </dependencies>
</module>

尤其这里需要注意的是,module 节点属性name的值,就是刚才咱们建立的文件夹的路径。resources表示mysql驱动的路径。意味着,需要将mysql的驱动放在main目录下。即main目录下包含两个文件,module.xml和数据库驱动文件。
 
在做完上一步后,切换到%JBOSS_HOME%\standalone\configuration目录下,
打开standalone.xml,搜索datasources,进行如下配置

<datasources>
        <datasource jndi-name="java:jboss/KouMySQLDS" pool-name="MySQLDS" enabled="true" use-java-context="true">
          <connection-url>jdbc:mysql://localhost:3306/student</connection-url>
          <driver>mysql</driver>
          <security>
            <user-name>root</user-name>
            <password>1234</password>
          </security>
        </datasource>
        <drivers>
          <driver name="mysql" module="com.mysqldatabase.mysql">
            <driver-class>com.mysql.jdbc.Driver</driver-class>
            <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
          </driver>
        </drivers>
      </datasources>

jndi-name表示数据源jndi名称,connection-url表示连接的url字符串;这里默认使用3306端口,使用student库,用户名和密码即第一步配置的。module配置的即刚刚配置的module的路径。
 
jboss的相关配置已经完成,接着切换到刚新建的工程,其中有一个persistence.xml配置文件,该文件做如下配置,其中jta-data-source 就是上面配置的jndi-name.

< jta-data-source> java:jboss/KouMySQLDS </jta-data-source >
      < properties>
        < property name= "hibernate.hbm2ddl.auto" value ="validate" />
        < property name= "hibernate.jdbc.fetch_size" value ="15" />
        < property name= "hibernate.jdbc.batch_size" value ="10" />
        < property name= "hibernate.show_sql" value ="true" />
        < property name= "hibernate.format_sql" value ="true" ></ property>
      </ properties>

到此为止,服务端代码和数据源配置已经完成。接下来需要做的就是如何部署代码以及如何在客户端调用该EJB服务。
 
4、部署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就部署成功了。
 
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,编写客户端方法了。

public static void main(String[] args) {

    Properties props = new Properties();
    props.setProperty(Context. URL_PKG_PREFIXES,"org.jboss.ejb.client.naming" );
    try {
      Context context = new InitialContext(props);
      // 这里需要注意字符串的写法:ejbservice 表示ejb的包名,StudentDaoBean表示咱们实际调用的会话Bean,org.easynoder.ejb2.dao.BaseOperation表示 对应的接口
      BaseOperation op = (BaseOperation) context
          .lookup("ejb:/ejbservice//StudentDaoBean!org.easynoder.ejb2.dao.BaseOperation" );
      op.findAll();
    } catch (NamingException e) {
      e.printStackTrace();
    }
  }

运行这段代码,可以成功的查询到数据库的数据啦。
 
至此,EJB就部署成功啦。

(0)

相关推荐

  • java EJB 加密与解密原理的一个例子

    加密与解密原理的一个例子 package lockunlock; import Java.awt.*;  import java.awt.event.*;  import java.Applet.*;  import javax.Swing.*;  import java.util.*;  public class LockUnlock extends JApplet {  private boolean isStandalone = false;  //Get a parameter valu

  • Java中BEAN与EJB的区别浅析

    Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean.但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性.Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的.Enterprise Java Bean 相当于DCOM,即分布式组件.它

  • JavaBean(EJB) 3.0 全新体验

    引言 期待以久的EJB3.0规范在最近发布了它的初稿.在本文中将对新的规范进行一个概要性的介绍,包括新增的元数据支持,EJBQL的修改,实体Bean模型访问bean上下文的新方法和运行时环境等等.作者还讨论了EJB在未来要作出的调整以及EJB3.0与其他开发规范之间的关系. 开始 无论如何由于EJB的复杂性使之在J2EE架构中的表现一直不是很好.EJB大概是J2EE架构中唯一一个没有兑现其能够简单开发并提高生产力的组建.EJB3.0规范正尝试在这方面作出努力以减轻其开发的复杂性.EJB3.0减轻

  • 部署Java在服务器端的EJB组件的方法

    什么是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; //创建

  • Java集成swagger文档组件

    一:简介   Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步.Swagger 让部署管理和使用功能强大的API从未如此简单. 二:集成swagger 1.引入pom.xml文件包(导入4个jar包) 注意:jdk1.8以上才能运行swagger2 <!--swagger--> <dependency

  • 在docker中部署tomcat并且部署java应用程序的步骤详解

    先给大家简单说下Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口. 1.先说如何在docker中部署tomcat 第一步:root用户登录在系统根目录下创建文件夹tomcat7,命令如:mkdir tomcat7,并且切换到该目录下:cd tomcat7: 第二步:创建Dockerfile,命令如:touch Docker

  • Docker学习笔记之Docker部署Java web系统

    Docker部署Java Web系统 1.在root目录下创建一个路径test/app mkdir test && cd test&& mkdir app &&cd app 2.将apache-tomcat-7.0.29.tar.gz及jdk-7u25-linux-x64.tar.gz拷贝 到app目录下 3.解压两个tar.gz文件 tar -zxvf apache-tomcat-7.0.29.tar.gz tar -zxvf jdk-7u25-linux

  • Java NIO服务器端开发详解

    一.NIO类库简介 1.缓冲区Buffer Buffer是一个对象,包含一些要写入和读出的数据. 在NIO中,所有的数据都是用缓冲区处理的,读取数据时,它是从通道(Channel)直接读到缓冲区中,在写入数据时,也是从缓冲区写入到通道. 缓冲区实质上是一个数组,通常是一个字节数组(ByteBuffer),也可以是其它类型的数组,此外缓冲区还提供了对数据的结构化访问以及维护读写位置等信息. Buffer类的继承关系如下图所示: 2.通道Channel Channel是一个通道,网络数据通过Chan

  • 关于weblogic部署Java项目的包冲突问题的解决

    我们可能会用各种应用服务部署我们的Java应用,比如Tomcat.WAS.weblogic等.Tomcat和WAS可能会比较少遇到一些奇怪的问题,但是用weblogic部署项目则经常遇到一些比如包冲突问题,路径问题等奇怪但又常见的问题. 今天我就讲讲关于weblogic部署Java项目包冲突的问题.下面我举个例子: 当我在weblogic部署Java项目之后,启动没报任何错,没有异常.但是当我操作某个功能的时候页面就报错了: 后台报了这个错: Root cause of ServletExcep

  • Java类库BeanUtils组件使用方法及实例详解

    BeanUtils BeanUtils是Apache commens组件里面的成员,由Apache提供的一套开源api,用于简化对javaBean的操作,能够对基本类型自动转换. JavaBean BeanUtils组件是用于简化javaBean的操作,那么什么是javaBean呢?简单来说,javaBean实质就是java类,只不过是遵循了某种规范的java类. javaBean的特点: 必须具有一个无参的构造方法 属性必须私有化 私有化的属性必须通过public类型的方法来暴露,也就是说要出

  • Java多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask详解

    CyclicBarrier 接着讲多线程下的其他组件,第一个要讲的就是CyclicBarrier.CyclicBarrier从字面理解是指循环屏障,它可以协同多个线程,让多个线程在这个屏障前等待,直到所有线程都达到了这个屏障时,再一起继续执行后面的动作.看一下CyclicBarrier的使用实例: public static class CyclicBarrierThread extends Thread { private CyclicBarrier cb; private int sleep

  • windows 部署JAVA环境安装iDea的详细步骤

    Java环境部署 下载所需软件和依赖 安装 jdk 路径可选别的盘.但是指向时得注意我自己时装在 F 盘的,在f盘里新建文件夹 Java,Java里再新建两个文件夹 jre1.8.0_152 和 jdk1.8.0_152,安装 jdk时就路径为 F:\Program Files\Java\jdk1.8.0_152 自动弹出安装 jre 安装路径不改 路径可选别的盘.但是指向时得注意,例如我自己的 jdk 安装路径为 F:\Program Files\Java\jre1.8.0_152 安装完成后

随机推荐