我需要JPA-Hibernate项目中的DataSource吗




我正在准备一些使用JPA 2.0、Hibernate作为提供程序、MySQL 5作为数据库的应用程序,这些应用程序将部署在JBoss as 7.0.2上。
我已经在persistence.xml中配置了一些基础知识,我遇到了一些麻烦。我注意到,有些人还在JBoss管理控制台级别定义了一些特定的DataSource
我的问题是,我真的需要担心Hibernate应用程序中的一些DataSource或类似的东西吗
我认为它在旧JDBC方法中很重要
在一些有示例的书中,persistence.xml或hibernate.cfg.xml中没有这样的配置
我必须将mysql连接器放在JBOSS_HOME/stalone/deploments目录中才能在我的应用程序中使用mysql吗

这是我的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="SomeApp">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/somedb" />
            <property name="hibernate.connection.username" value="" />
            <property name="hibernate.connection.password" value="" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
        </properties>
    </persistence-unit>
</persistence>

好吧,您可以通过以下方式访问数据库:

  • 提供url/driver/password/等。persistence.xml中的信息,使用您的jpa提供者属性(在您的情况下为hibernate.connection.*(或jpa 2.0标准化的javax.persistence.jdbc.*属性-这基本上看起来像您发布的示例
  • 在ApplicationServer中创建一个数据源,并在persistence.xml中引用它(通过您在创建过程中提供的JNDI名称(,这可能看起来与此类似(为了简洁起见,没有XML模式定义(:

    <persistence>
        <persistence-unit name="SomeApp">
            <provider>org.hibernate.ejb.HibernatePersistence</provider>
            <jta-data-source>jdbc/myDB</jta-data-source>
        </persistence-unit>
    </persistence>
    

您现在实际要做的(使用这些属性(是使用JDBC。


我肯定会在ApplicationServer中创建数据源,而不是在persistence.xml的属性中提供它。它允许您动态更改最终数据库、类型、凭据、管理连接池等,甚至无需触摸描述符。

它也更安全,因为凭据不会写在服务器上的普通文件中。

附带说明一下,请记住,javax.persistence.jdbc.*属性是Java SE环境的JPA提供程序必须要求,但对于Java EE来说,它是可选的。

希望能有所帮助!

是否必须将mysql连接器放入JBOSS_HOME/standalone/deploments目录中使用MySQL应用

是的,您需要将MysqlJ/connector用作JDBC驱动程序。您的应用程序服务器(JBOss、Weblogic、Glassfish等(不提供它,因为这取决于您正在使用的RDBMS(在本例中为Mysql(及其版本

在JBoss7的情况下,JDBC驱动程序可以通过以下两种方式之一安装到容器中:作为部署或作为核心模块。关于这两种模式的优缺点,您可以查看以下文档进行详细说明:http://community.jboss.org/wiki/DataSourceConfigurationInAS7