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 [email protected] 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 }

建立操作接口:

1 public interface BaseOperation {
2
3     public List<?> findAll();
4 }

该接口只有一个方法,获取所有的学生

建立会话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 }

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>

尤其这里需要注意的是,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>

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>

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

 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     }

运行这段代码,可以成功的查询到数据库的数据啦。

至此,EJB就部署成功啦。

时间: 2024-10-18 05:01:31

Jboss7 部署EJB3 简明教程的相关文章

Markdown简明教程5-CSDN Markdown快速上手

0.目录 目录 前言 CSDN Markdown特点 CSDN Markdown快速上手 1 使用快捷键 粗体斜体 引用 链接 高亮代码块 图片 标题 列表 分割线 撤销重复 2 使用离线写作 3 使用导入导出 4 个性定制文章模板 声明 1. 前言 Markdown是一种轻量级的标记语言,把作者从繁杂的排版工作中解放出来,实现易读易写的文章写作,已经逐渐成为事实上的行业标准.CSDN博客支持Markdown可以让广大博友更加专注于博客内容,大赞.但是,不少博友可能对Markdown比较生疏,本

TR069协议向导——一个帮助你了解TR069协议的简明教程(一)

您也能够到下面地址下载: http://download.csdn.net/source/993034 1.为什么须要TR069 随着VoIP.IPTV等越来越多IP终端设备的普及(尤其在家庭中的普及),大量设备的配置和维护变得越来越困难,大大提高了网络产品运营商的成本,传统的基于SNMP的网管系统面对众多的终端设备时显得力不从心,限制了宽带接入市场的发展速度和规模.TR069定义了一套全新的网管体系结构,包含"管理模型","交互接口","管理參数&quo

【前端】vue.js环境配置以及实例运行简明教程

vue.js环境配置以及实例运行简明教程 声明:本文档编写参考如下两篇博客,是对它们的修改与补充,欢迎点击链接查看原文: 原文1:vue.js在windows本地下搭建环境和创建项目 原文2:Vue.js开发环境搭建 VUE.JS简介 何为Vue.js Vue.js(读音 /vju?/, 类似于 view)是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合.另一方面,Vue

CGIC简明教程(转摘)

CGIC简明教程 本系列的目的是演示如何使用C语言的CGI库“CGIC”完成Web开发的各种要求. *********************************     基础知识       1.使用CGIC的基本思路       2.获取Get请求字符串       3.反转义       4.获取请求中的参数值    进阶训练       5.用CGIC实现文件上传********************************* 1:使用CGIC的基本思路 C语言编程是一项复杂且容易

docker简明教程(二)

前言这篇博文承接我的上一篇<docker简明教程一> http://9399369.blog.51cto.com/9389369/1758576 相对于上一篇来说这篇所讲到的知识会高深一点因为学习的过程不就是一步步的由简单到复杂嘛但是我的风格没变用简单的文字让朋友们学习高深的docker技术.如果觉得我写的好的话顶我上推荐希望能让跟多人看到.学习和受益. 二十二.Docker导出容器到本地文件 不管是容器不是处于运行状态都可以导出 首先查看那容器状态 [[email protected] ~]

solidity 0.5.7简明教程

以太坊不仅是一种加密数字货币,它更是功能完备的智能合约平台,solidity就是用来开发以太坊上的智能合约的原生开发语言.solidity最早发布于2015年,它是第一种图灵完备的智能合约专用开发语言.目前除了以太坊之外,在其他区块链中也逐渐开始支持solidity,例如hyperledger fabric.tendermint等.在这个solidity快速教程中,我们将使用最新0.5.7版的solidity,以一个具体的案例来介绍solidity智能合约的开发.部署与交互,希望对你快速掌握so

Lisp简明教程

此教程是我花了一点时间和功夫整理出来的,希望能够帮到喜欢Lisp(Common Lisp)的朋友们.本人排版很烂还望多多海涵! <Lisp简明教程>PDF格式下载 <Lisp简明教程>ODT格式下载 具体的内容我已经编辑好了,想下载的朋友可以用上面的链接.本人水平有限,如有疏漏还望之处(要是有谁帮我排排版就好了)还望指出!资料虽然是我整理的,但都是网友的智慧,如果有人需要转载,请至少保留其中的“鸣谢”页(如果能有我就更好了:-)). Lisp简明教程 整理人:Chaobs 邮箱:[

Linux防火墙iptables简明教程

前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔除了许多冗余的内容,提取出尽量多的精华部分成文,和大家共同学习,本文涉及的内容包括如下 Linux防火墙iptables简明教程 1.安装iptables 2.查看现有的iptables规则 3.删除某iptables规则 4.清除现有iptables规则 5.创建规则 6.设置开机启动 7.保存i

Markdown简明教程4-Markdown UML图

1. 前言 Markdown是一种轻量级的标记语言,把作者从繁杂的排版工作中解放出来,实现易读易写的文章写作,已经逐渐成为事实上的行业标准.CSDN博客支持Markdown可以让广大博友更加专注于博客内容,大赞.但是,不少博友可能对Markdown比较生疏,本博接下来用一个系列文章<Markdown简明教程>扼要介绍Markdown,希望可以对大家有所帮助. 系列教程目录 关于Markdown Markdown基本使用 Markdown表格和公式 Markdown UML图 CSDN Mark