JBOSS7下部署服务(三):使用自带JPA实现——hibernate

修改jboss配置文件:

jboss-as-7.1.2.Final\standalone\configuration\standalone.xml增加数据源配置
在<subsystem xmlns="urn:jboss:domain:datasources:1.1">下增加
                <xa-datasource jndi-name="java:jboss/datasources/db_xa" pool-name="DS_xa" enabled="true" use-java-context="true" use-ccm="true">
                    <xa-datasource-property name="User">
                        sa
                    </xa-datasource-property>
                    <xa-datasource-property name="Password">
                        ***
                    </xa-datasource-property>
                    <xa-datasource-property name="DatabaseName">
                        db
                    </xa-datasource-property>
                    <xa-datasource-property name="PortNumber">
                        1433
                    </xa-datasource-property>
                    <xa-datasource-property name="ServerName">
                        192.168.1.8
                    </xa-datasource-property>
                    <xa-datasource-class>net.sourceforge.jtds.jdbcx.JtdsDataSource</xa-datasource-class>
                    <driver>mssql.jtds.xa</driver>
                    <xa-pool>
                        <min-pool-size>1</min-pool-size>
                        <max-pool-size>10</max-pool-size>
                        <prefill>true</prefill>
                        <use-strict-min>true</use-strict-min>
                    </xa-pool>
                </xa-datasource>
在<drivers>下增加:
                    <driver name="mssql.jtds.xa" module="net.sourceforge.jtds">
                        <xa-datasource-class>net.sourceforge.jtds.jdbcx.JtdsDataSource</xa-datasource-class>
                    </driver>

添加hibernate配置文件:

在工程目录中/src/db.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<property name="connection.datasource">java:jboss/datasources/db_xa</property>
		<property name="show_sql">true</property>
		<property name="dialect">org.hibernate.dialect.SQLServer2005Dialect</property>
		<property name="current_session_context_class">jta</property>
	</session-factory>
</hibernate-configuration>

添加对hibernate依赖:

/web/WEB-INF/jboss-deployment-structure.xml
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1">
  <deployment>

    <dependencies>
     <module name="org.hibernate"/>
     <module name="org.apache.commons.lang"/>
     <module name="org.javassist"/> 
     <module name="asm.asm"/>
    </dependencies>
    
  </deployment>
</jboss-deployment-structure>

数据库表的对应VO类:

package com.ejb.hello.model.vo;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.ws.rs.FormParam;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name = "user")
@XmlRootElement(name = "user")
@XmlAccessorType(XmlAccessType.FIELD)
public class UserVO implements Serializable {
	
	@Id
	@GeneratedValue(generator = "user-assigned")
	@GenericGenerator(name = "user-assigned", strategy = "assigned")
	@FormParam("userName")
	private String userName;

	@Column(name = "userDesc", nullable = false)
	private String userDesc;
	public String getUserDesc() {
		return userDesc;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public void setUserDesc(String userDesc) {
		this.userDesc = userDesc;
	}

}

测试:

需要引用的类:
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistryBuilder;

import com.ejb.hello.model.vo.UserVO;
测试方法:
	private void testHibernate() {
		Session s = null;
		try {
			Configuration cf = new Configuration().configure("/db.cfg.xml").addAnnotatedClass(UserVO.class);

			s = cf.buildSessionFactory(new ServiceRegistryBuilder().applySettings(cf.getProperties())
					.buildServiceRegistry()).openSession();

			Criteria crit = s.createCriteria(UserVO.class);
			List<UserVO> list = crit.list();
			for (UserVO user : list) {
				logger.info(user.toString());
			}
		} catch (Exception e) {
			logger.error(e);
		} finally {
			if (s != null) {
				s.close();
			}
		}
	}

另一种实现方法:

该方法使用EntityManager及persistence.xml实现
1、src下增加META-INF目录,目录里放入jboss-deployment-structure.xml(内容同前面)及persistence.xml
persistence.xml:
<?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">

    <persistence-unit name="db_ds">
         <jta-data-source>java:jboss/datasources/db_xa</jta-data-source>
    </persistence-unit>
</persistence>
2、在ejb实现类里引入数据源,并进行数据库操作,下面为代码片段
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
@PersistenceContext(unitName= "db_ds")
private EntityManager em;
Query query = em.createQuery( "select t from UserVO t where t.username = 'admin');
list = query.getResultList();
3、注意:这种方法不需要hibernate配置文件db.cfg.xml,可以去掉











你可能感兴趣的:(Hibernate,jboss)