JBoss7部署EJB连接MySQL

栏目: Java · 发布时间: 7年前

内容简介:JBoss7部署EJB连接MySQL

该文章记录了在原有SmartHome项目基础上加入 MySql 数据库、配置数据源、添加实体类和配置文件、添加调用方法等,并成功使用客户端程序连接WebService,远程调用EJB连接数据库获取到数据。

开发环境:Win7,jdk1.7,JBoss AS7.1.1Final,MySql 5.6,MyEclipse 10。

一、MySQL

建表等,此处略去。(注意连接使用remote用户,不能使用localhost用户)

二、在JBoss7中配置MySQL数据源

在JBoss中配置数据库的连接需要两个步骤:

1. 安装JDBC的驱动

首先进入JBoss安装目录,即%JBOSS_HOME%下,进入modules/com/,新建mysql文件夹,进入,建立main文件夹。在main目录下,加入如下两个文件:

• JBOSS_HOME/modules/com/mysql/main/mysql-connector-java-5.1.17-bin.jar• JBOSS_HOME/modules/com/mysql/main/module.xml

mysql-connector-java-5.1.17-bin.jar 是JDBC驱动,下载链接:

http://dev.mysql.com/downloads/connector/j/

module.xml 文件,记录了添加模块的相关配置,代码如下。其中module节点的name就是建立的文件夹路径,resources表示mysql驱动的路径。

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

2. 在配置中加入数据源

修改/JBOSS_HOME/standalone/configuration目录下的standalone.xml文件,找到datasources子系统,修改配置如下,其中jndi-name表示数据源名称:

<subsystem xmlns="urn:jboss:domain:datasources:1.0">
<datasources>
   <datasource enabled="true" jndi-name="java:/MySqlDS" jta="true" pool-name="MySqlDS_Pool" use-ccm="true" use-java-context="true">
    <connection-url>jdbc:mysql://115.xxx.xxx.xxx:3306/smarthome1</connection-url>
    <driver>mysql</driver>
    <pool/>
    <security>
      <user-name>admin</user-name>
      <password>123456</password>
    </security>
    <statement/>
    <timeout>
      <idle-timeout-minutes>0</idle-timeout-minutes>
      <query-timeout>600</query-timeout>
    </timeout>
 </datasource>
  <drivers>
    <driver module="com.mysql" name="mysql">
      <driver-class>com.mysql.jdbc.Driver</driver-class>
      <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
    </driver>                   
  </drivers>
 </datasources>
</subsystem>

找到jpa子系统,修改配置如下,注意datasource与上面jndi名称一致:

<subsystem xmlns="urn:jboss:domain:jpa:1.0">
     <jpa default-datasource="java:/MySqlDS"/>
</subsystem>

若以上配置成功,则在JBoss7不部署任何EJB的情况下启动不会报错,查看JBOSS_HOME/modules/com/mysql/main/路径,会发现生成了mysql-connector-java-5.1.17-bin.jar.index文件,表示该模块添加成功。

三、编写Bean实体及其配置文件、添加调用方法

Bean实体(注意不要自动生成serial version ID,否则会报错):

package smartHome.po;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity  //表明这是一个实体Bean
@Table (name = "data" ) //和数据库表data 建立映射
public class Data implements Serializable{
	@Id // 表明是该实体的id
	@GeneratedValue(strategy = GenerationType. AUTO ) //id生成策略
	@Column(name = "id" )//对应data表id字段
	private Integer id; // 数据编号
	@Column(name = "uid" ) // 对应data表uid字段
	private String uid; // 用户ID
	@Column(name = "room" ) // 对应data表room字段
	private String room; // 房间名称:客厅、卧室
	@Column(name = "type" ) // 对应data表type字段
	private String type; // 数据类型:温度temp、湿度humd、光照度light、报警alarm
	@Column(name = "value" ) // 对应data表value字段
	private String value; // 数据值
	//setter和getter方法省略
}

在Session接口和ServiceSession类中增加调用数据库的方法:

@PersistenceContext(unitName = "Data" )
private EntityManager em;
// 根据用户ID和房间ID获取数据库数据
@SuppressWarnings("unchecked")
public ResultMap getDataByUIDandRoomID(String room) {
	ResultMap resultMap = new ResultMap();
	String status = null; // 结果状态:success,fail,overtime,error
	String description = null; // 结果描述,fail时描述失败原因
	HashMap<String, Object> resultData=new HashMap<String, Object>();
	System.out.println("查询开始...");
	List<Data> list = em.createQuery( "FROM Data ").getResultList();
	if (list != null) {
		status="success";
		Iterator<Data> it = list.iterator();
		while (it.hasNext()) {
			Data data = it.next();
			if(data.getUid().equals(user.getID()) && data.getRoom().equals(room)){
				resultData.put(data.getType(), data.getValue());
				System.out.println("数据类型:" + data.getType());
				System.out.println("数据值:" + data.getValue()); 
			}			   
		}
	}
	else{
		status="fail";
		description="未找到该用户所在房间信息";
	}
	System.out.println("查询完毕...." );
	resultMap.setStatus(status);
	resultMap.setDescription(description);
	resultMap.setResultData(resultData);
	return resultMap;
}

在工程的META-INF目录下加入persistence.xml文件,该文件会参考使用的datasource来匹配实体与数据库,代码如下:(并注意将工程打包成jar时添加该文件)

<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence  
	http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
	<!-- Name属性用于定义持久化单元的名字 (name必选,空值也合法) -->
	<persistence-unit name="Data" transaction-type="JTA">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
			<!-- Jta-data-source 用于指定持久化提供商使用的JTA数据源的全局JNDI名称(可选) -->
			<jta-data-source>java:/MySqlDS</jta-data-source>
		<properties>
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
		</properties>
	</persistence-unit>
</persistence>

客户端连接EJB方法不变,调用方法返回结果的相关代码此处略去。


以上所述就是小编给大家介绍的《JBoss7部署EJB连接MySQL》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据结构C++语言描述

数据结构C++语言描述

William Ford,William Topp / 刘卫东 沈官林 / 清华大学出版社 / 1999-09-01 / 58.00

一起来看看 《数据结构C++语言描述》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

SHA 加密
SHA 加密

SHA 加密工具