`
Rainbow702
  • 浏览: 1078233 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类

JBoss 中配置数据源(datasource),及EntityManager的使用

阅读更多

前提:

EAP版本: EAP6.1

模式:standalone模式

数据库: Postgresql 9.3

数据源模式:NON-XA DataSource

 

正文:

① 将postgresql的jdbc包作成一个module部署到JBoss中。比如,我作成的module如下图所示:

    具体的方法可以参考我另一篇博文: http://rainbow702.iteye.com/blog/2065353



 

② 修改 \jboss-eap-6.1\standalone\configuration下的standalone.xml文件,在其中的“<subsystem xmlns="urn:jboss:domain:datasources:1.1">”下增加一个新的datasource(系统默认自带一个ExampleDS)。下面是新增datasource之后的配置:

 

<datasources>
	<datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
		<connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
		<driver>h2</driver>
		<security>
			<user-name>sa</user-name>
			<password>sa</password>
		</security>
	</datasource>
	<datasource jndi-name="java:jboss/datasources/testDS" pool-name="testDS" enabled="true" use-java-context="true">
		<connection-url>jdbc:postgresql://localhost:5432/test</connection-url>
		<driver-class>org.postgresql.Driver</driver-class>
		<driver>postgresql</driver>
                <!-- 此处通过 postgresql 这个名字指定使用下面 drivers 中相应的 driver-->
		<pool>
			<min-pool-size>32</min-pool-size>
			<max-pool-size>32</max-pool-size>
			<prefill>true</prefill>
		</pool>
		<security>
			<user-name>postgres</user-name>
			<password>123456</password>
		</security>
		<validation>
			<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
			<validate-on-match>true</validate-on-match>
			<background-validation>false</background-validation>
			<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
		</validation>
	</datasource>
	<drivers>
		<driver name="postgresql" module="org.postgresql"/>
                <!-- 此处的 org.postgresql 即为上面①中创建的module。名称必须一致。-->
		<driver name="h2" module="com.h2database.h2">
			<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
		</driver>
	</drivers>
</datasources>

 

 

③ 经过上面两步,datasource就算配置好了。下面说明一下如何来创建EntityManager对象和相关的Entity实体类

④ 创建persistence.xml文件,内容如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
   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_2_0.xsd">
   <persistence-unit name="testUnit" transaction-type="JTA">
      <jta-data-source>java:jboss/datasources/testDS</jta-data-source>
      <!--此处的 data-soruce 须与上面②中配置的名称保持一致-->
      <properties>
         <property name="hibernate.hbm2ddl.auto" value="none" />
         <property name="hibernate.show_sql" value="true" />
      </properties>
   </persistence-unit>
</persistence>

 ⑤ persistence.xml这份文件配置好了之后,应该将它放置在工程的什么位置呢?我一开始也不知道,后来,百度了一下,说是要放到 META-INF目录下,所以,我就将其放在了WebContent/META-INF下了,结果死活不起作用。后来又改成放到  WebContent/WEB-INF/lib下,还是不起作用。直至后来在官方找到了说明:

http://docs.oracle.com/javaee/6/tutorial/doc/bnbqw.html

上面链接的最后,写了persistence.xml可放置的路径。

然后,我改成放在"src/META-INF"(部署的时候会被部署至WEB-INF/class/META-INF)下之后,再重新启动EAP,终于可以了。

 

⑥ 声明与数据库中person表相应的Entity类


     
 

@Entity
@Table(name = "person")
@NamedQueries({
	@NamedQuery(name="user.checkLogin", query="select u from UserEntity u where u.name= :name and u.password=:password")
})
public class UserEntity implements Serializable {

	/**
	 * serialVersionUID
	 */
	private static final long serialVersionUID = 1L;

	@Column(name = "id")
	@Id
	private Integer id;

	@Column(name = "name")
	private String name;
	
	@Column(name="password")
	private String password;

	@Column(name = "nickname")
	private String nickName;

	public UserEntity() {
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getNickName() {
		return nickName;
	}

	public void setNickName(String nickName) {
		this.nickName = nickName;
	}
}

 

⑦这样,Entity可以通过EntityManager来维护了。下面,通过注解来获取EntityManager对象

public abstract class BaseDao<T> {

	private Class<T> entityClass;

        // 获取EntityManager,unitName的值最好明确写出来,且与上面④中定义的unitName保持一致
	@PersistenceContext(unitName="testUnit")
	protected EntityManager em;

	public BaseDao(Class<T> entityClass) {
		this.entityClass = entityClass;
	}

	public Class<T> getEntityClass() {
		return this.entityClass;
	}

}

 然后就可以使用这个EntityManager进行数据库操作了

public class LoginDao extends BaseDao<UserEntity> {

	public LoginDao() {
		super(UserEntity.class);
	}

	public boolean checkLogin(String userName, String password) {
		boolean res = false;
		// 使用em进行数据库的查询
		Query query = this.em.createNamedQuery("user_checkLogin", UserEntity.class);
		query.setParameter("name", userName);
		query.setParameter("password", password);
		List<UserEntity> resList = query.getResultList();
		res = resList.size() > 0;
		return res;
	}
}

 以上,完了。

 

 

PS:

①  请确保数据库的jdbc包与工程使用的JDK版本是相符合的,不然可能会报错。比如,我上面使用的jar包是基于JDK1.7及以上的,但我的工程使用的是JDK1.6,结果就报错了。换成1.7的就没有问题了。

② 可以参考官方文档: https://access.redhat.com/documentation/en-US/JBoss_Enterprise_BRMS_Platform/5/html/BRMS_Administrator_Guide/Configuring_a_Datasource_for_JBoss_Enterprise_Application_Platform_6.html

  • 大小: 29.9 KB
  • 大小: 24 KB
分享到:
评论

相关推荐

    数据源配置所用的JAR

    5. **使用数据源**:在代码中通过`DataSource`接口获取连接,进行数据库操作。 理解并正确配置这些JAR文件对于构建高性能、高可用性的Java应用至关重要。合理使用数据源和连接池可以大大提高系统的并发能力,同时...

    EJB 注释精解(pdf版)

    `persistence.xml`文件是实体Bean的核心配置文件,它通常位于Jar文件的`META-INF`目录下,用于指定实体Bean使用的数据源以及`EntityManager`的默认行为。 **配置示例:** ```xml &lt;jta-data-source&gt;java:/...

    Hibernate3.3+SpringMVC整合需要的所有包

    1. **配置数据源**:在`applicationContext.xml`中定义数据源,如`org.springframework.jdbc.datasource.DriverManagerDataSource`。 2. **创建SessionFactory**:配置`SessionFactory`,并指定Hibernate配置文件...

    ejb3整合Struts1.x实例

    在Java EE应用中,数据源配置通常在`context.xml`或`web.xml`中,通过JNDI(Java Naming and Directory Interface)来访问。例如,该文件可能包含如下配置,用于定义名为`jdbc/MySqlDS`的数据源: ```xml type=...

    eib3.0中的注解

    该文件位于`Jar`文件的`META-INF`目录下,并且用于指定实体Bean使用的数据源以及`EntityManager`对象的默认行为。 - **示例**: ```xml &lt;jta-data-source&gt;java:/MySqlDS ``` 上述配置中,`...

    JPA 开发所要的全部jar包

    同时,配置JPA的实现库,比如在Hibernate中设置数据源、实体扫描路径等。在Spring框架中,还需要配置JPA的DataSource、EntityManagerFactory、TransactionManager等bean。 总的来说,JPA提供了一个强大的工具集,让...

    hibernate3

    在Spring的配置文件中,你需要定义SessionFactory、DataSource、TransactionManager等bean,并设置相关的属性,如数据源、配置文件路径、缓存提供商等。同时,还需要在Hibernate的配置文件(通常为hibernate.cfg.xml...

    基于注解的Spring MVC+Hibernate简单入门

    -- 配置数据源 --&gt; &lt;bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"&gt; &lt;!-- 配置SessionFactory --&gt; &lt;property name="dataSource" ref="dataSource"/&gt; &lt;value&gt;...

Global site tag (gtag.js) - Google Analytics