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方法不变,调用方法返回结果的相关代码此处略去。

时间: 2024-10-14 04:35:05

JBoss7部署EJB连接MySQL的相关文章

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; //创建数据库 

hibernate 连接 mysql 乱码的情况

在本地开发环境中,一切正常,部署到服务器后(windows 2003 + tomcat)含有中文的查询和表单提交都有乱码,从以下几个方面检查并解决了问题: 1.将所有jsp.js.css文件默认编码改为了utf-8,未解决问题. 2.struts2的配置文件中加入了节点:<constant name="struts.i18n.encoding" value="UTF-8" />  ,未解决问题. 3.web.xml中做如下确认和修改,未解决问题. <

Servlet连接MySQL数据库

今天写Servlet的代码需要连接到数据库,但是由于最近没有写过数据库的代码,频繁出错,所以有必要记录下来,下次遇到这种情况可以及时修正 首先连接数据库需要的步骤 1.通过反射加载Driver类 1 String className = "com.mysql.jdbc.Driver"; 2 Class.forName(className); 2.创建连接通道 1 String url = "jdbc:mysql://localhost/dbjdbc"; 2 Stri

JDBC连接MySQL数据库及演示样例

JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,能够为多种关系数据库提供统一訪问,它由一组用Java语言编写的类和接口组成.JDBC为数据库开发者提供了一个标准的API,据此能够构建更高级的工具和接口,使数据库开发者能够用纯 Java API 编写数据库应用程序,而且可跨平台执行,而且不受数据库供应商的限制.

Delphi XE中使用dbExpress连接MySQL数据库疑难问题解决(对三层的例子配置有帮助)

Delphi IDE中包含一个Data Explorer的组件,如下图所示: 该组件基于dbExpress(包含TSQLConnection.TSQLDataSet.TSQLQuery.TSQLStoredProc.TSQLTable.TsqlServerMethod.TSQLMonitor.TSimpleDataSet).但是因为该组件只提供了各种数据库的抽象驱动,没有提供底层的与数据库直接交互的驱动库,因此,要想使用具体某种数据库,还需要搭配提供商驱动.本文以Delphi XE在Window

Discuz Windows 部署 配置 php mysql

Discuz! X 是一款以 PHP 为编程语言,以 MySQL 为数据库,并使用 Apache/IIS/Nginx(任意一种即可) 提供 web 服务的产品.要搭建 Discuz! X 站点,服务器必须安装由 PHP.MySQL.Apache/IIS/Nginx 构成的环境.其中,IIS 主要用于 Windows 服务器,Apache.Nginx 多用于 Linux 服务器(即 LAMP 和 LNMP) 下面以在 Windows 服务器上部署 IIS.MySQL.PHP 为例,演示搭建环境的具

MySQLdb库连接MySQL数据库

Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具.Cacti是通过 snmpget来获取数据,使用 RRDtool绘画图形,而且你完全可以不需要了解RRDtool复杂的参数.它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构.host以及任何一张图,还可以与LDAP结合进行用户验证,同时也能自己增加模板,功能非常强大完善.界面友好.软件 Cacti 的发展是基于让 RRDTool 使用者更方便使用该软件,除了基本的 Snmp 流量

远程连接MySql的时候报1130的错误

用Navicat for MySQL远程连接MySql的时候报1130的错误 ERROR 1130: Host 192.168.3.100 is not allowed to connect to this MySQL server 无法连接远程数据库用户权限问题.结果这样子操作mysql库,即可解决.在本机登入mysql后,更改"mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称'

web 前端:连接mysql中文乱码问题的解决办法

当使用tomcat部署servlet连接时,总是出现各种原因的中文乱码问题.有的是因为mysql的默认字符集的问题,有的是客户端的字符配置问题. 现在对于这两种问题进行配置,来解决乱码. 服务器端(mySQL)的字符集配置: show charset://显示支持的所有字符集,大约有40多种: SHOW VARIABLES LIKE 'character_set_%';//查看SQL使用的编码格式: set character_set_client = utf8;//将SQL的一个属性改为utf