Нужен ли мне источник данных в проекте JPA Hibernate? - PullRequest
9 голосов
/ 17 ноября 2011


Я готовлю приложение с использованием JPA 2.0, Hibernate в качестве поставщика, MySQL 5 в качестве базы данных, который будет развернут на JBoss AS 7.0.2.
Я уже настроил некоторые основы в persistence.xmlи у меня возникли какие-то проблемы.Я заметил, что некоторые люди также определяют некоторый конкретный DataSource на уровне JBoss Management Console.
Мой вопрос.Мне действительно нужно беспокоиться о каком-либо источнике данных или о чем-то подобном в приложении Hibernate?
Я думал, что это важно в старом подходе JDBC.
В некоторых книгах, где показаны примеры, такой конфигурации в постоянстве нет.xml или hibernate.cfg.xml
Нужно ли помещать соединитель mysql в каталог JBOSS_HOME / standalone / deployments, чтобы использовать 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>

Ответы [ 2 ]

9 голосов
/ 17 ноября 2011

Ну, вы можете получить доступ к базе данных:

  • , предоставив URL / драйвер / пароль / и т.д.информация в persistence.xml с использованием свойств вашего провайдера jpa (в вашем случае hibernate.connection.*) или стандартизированных javax.persistence.jdbc.* в JPA 2.0 - это в основном похоже на приведенный вами пример,
  • создать источник данных в 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.* свойства являются JPA-провайдером обязательное требование для Java SE , но оно необязательно для Java EE .

Надеюсь, это поможет!

2 голосов
/ 17 ноября 2011

Нужно ли помещать MySQL-коннектор в каталог JBOSS_HOME / standalone / deployments, чтобы использовать MySQL в моем приложении?

Да, вам нужно установить Mysql J / connector для использования его в качестве JDBCВодитель.Ваш сервер приложений (JBOss, Weblogic, Glassfish и т. Д.) Не предоставляет его, поскольку зависит от используемой СУБД (в данном случае Mysql) и ее версии.

В случае JBoss 7драйвер JDBC может быть установлен в контейнер одним из двух способов: либо в качестве развертывания, либо в качестве основного модуля.Для плюсов / минусов обоих режимов подробное объяснение вы можете проверить в следующей документации: http://community.jboss.org/wiki/DataSourceConfigurationInAS7

...