什么是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就部署成功啦。
 
 

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

  1. Docker简明教程

    Docker简明教程 [编者的话]使用Docker来写代码更高效并能有效提升自己的技能.Docker能打包你的开发环境,消除包的依赖冲突,并通过集装箱式的应用来减少开发时间和学习时间. Docker作 ...

  2. CSDN Markdown简明教程5-高速上手

    0.文件夹 文件夹 前言 CSDN Markdown特点 CSDN Markdown高速上手 1 使用快捷键 粗体斜体 引用 链接 高亮代码块 图片 标题 列表 切割线 撤销反复 2 使用离线写作 3 ...

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

    vue.js环境配置以及实例运行简明教程 声明:本文档编写参考如下两篇博客,是对它们的修改与补充,欢迎点击链接查看原文: 原文1:vue.js在windows本地下搭建环境和创建项目 原文2:Vue. ...

  4. 【前端】Github Pages 与域名关联简明教程

    Github Pages 与域名关联简明教程 1. 向你的 Github Pages 仓库添加一个CNAME(一定要*大写*)文件 其中只能包含一个顶级域名,像这样: example.com 如果你是 ...

  5. CGIC简明教程(转摘)

    CGIC简明教程 本系列的目的是演示如何使用C语言的CGI库“CGIC”完成Web开发的各种要求. *********************************     基础知识       1 ...

  6. 2013 duilib入门简明教程 -- 第一个程序 Hello World(3)

    小伙伴们有点迫不及待了么,来看一看Hello World吧: 新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #i ...

  7. 2013 duilib入门简明教程 -- 部分bug (11)

     一.WindowImplBase的bug     在第8个教程[2013 duilib入门简明教程 -- 完整的自绘标题栏(8)]中,可以发现窗口最大化之后有两个问题,     1.最大化按钮的样式 ...

  8. 2013 duilib入门简明教程 -- 部分bug 2 (14)

        上一个教程中提到了ActiveX的Bug,即如果主窗口直接用变量生成,则关闭窗口时会产生崩溃            如果用new的方式生成,则不会崩溃,所以给出一个临时的快速解决方案,即主窗口 ...

  9. 2013 duilib入门简明教程 -- 自绘控件 (15)

        在[2013 duilib入门简明教程 -- 复杂控件介绍 (13)]中虽然介绍了界面设计器上的所有控件,但是还有一些控件并没有被放到界面设计器上,还有一些常用控件duilib并没有提供(比如 ...

随机推荐

  1. Bi-shoe and Phi-shoe(欧拉函数/素筛)题解

    Bi-shoe and Phi-shoe Bamboo Pole-vault is a massively popular sport in Xzhiland. And Master Phi-shoe ...

  2. C# Byte[] 数组操作

    byte[] Strbyte = Encoding.GetEncoding("big5").GetBytes(str);            if (Strbyte.Length ...

  3. C语言中生产随机数 rand()函数

    参考资料:C语言中产生随机数 一:如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间.RAND_MAX定义在stdl ...

  4. python从字符串解析方法名

    方法如下 import requests func_name = 'get' fn_obj = getattr(requests,func_name) fn_obj('http://www.baidu ...

  5. Loadrunner安装详解

    安装 1. 运行"setup.exe" 2. 点击安装,其中会有提示缺少"Microsoft Visual C++ 2005 SP1运行组件",下载这 个组件. ...

  6. vscode中使用EF脚手架生成数据库上下文(scaffold-dbcontext)

    目前在vscode上用netcore + ef core,在用dbfirst的方式生成模型和context上下文一直没有找到方法,之前在vs2017中,的nuget管理控制台输入命令: Scaffol ...

  7. ubuntu 14.04 安装 gflags

    1.下载 git clone https://github.com/gflags/gflags 2.编译 进入源码目录(即gflags文件夹) cmake . make -j 24 sudo make ...

  8. selenium-webdriver 简单教程

    ruby环境下selenium/webdriver可以通过selenium-webdriver.gem包进行安装 gem install selenium-webdriver   支持语言及版本有ru ...

  9. Qt_Android_书

    1. http://bbs.csdn.net/topics/390942701 <<Qt on Android 核心编程>> Qt Quick核心编程 2.

  10. 《A_Pancers》团队项目用户验收评审

    团队项目用户验收评审 一.关于源代码管理的10 个问题: 1.你的团队的源代码控制在哪里?用的是什么系统?如何处理文件的锁定问题? 我们的项目都在github上面,用的win10系统,并且我们的文件没 ...