13 августа 2012 г.

Подключение к postgres через jboss datasource

Предположим, вы используете JBoss 6 в качестве сервера приложений. Если вы хотите получить доступ к БД из-под JBoss, вам нужно прежде всего скачать драйвер postgres.

На официальной странице доступно много различных вариантов драйверов. Выбрать нужный  вам несложно - это зависит от двух параметров: версия JDK и версия postgres. JDK у вас скорее всего 1.6 или 1.7, а последняя версия postgres на момент написания этого поста - 9.1. Так что с большой долей вероятности могу утверждать, что вам подойдёт файл 9.1-902 JDBC 4. Скачайте его и положите его в папку JBOSS_HOME/server/your_configuration/lib, где JBOSS_HOME - директория, в которой находится ваш сервер приложений, а your_configuration - конфигурация, которую вы используете (скорее всего default, если вы не указали иного).

Далее вам нужно создать два файла: один persistence.xml и один файл datasource с параметрами доступа к БД.

Параметры подключения к базе данных указываются в файле datasource, обычно имя такого файла заканчивается на -ds.xml. Поскольку мы подключаемся к postgres, то логично назвать файл postgres-ds.xml, хотя имя может быть и другим. Пример postgres-ds.xml:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE datasources PUBLIC "-//JBoss//DTD JBOSS JCA Config 1.5//EN"
                          "http://www.jboss.org/j2ee/dtd/jboss-ds_1_5.dtd">
<datasources>
    <local-tx-datasource>
    <jndi-name>PostgresDS</jndi-name>
    <connection-url>jdbc:postgresql://localhost:5432/h</connection-url>
    <driver-class>org.postgresql.Driver</driver-class>
    <user-name>h</user-name>
    <password>123456</password>
    <metadata>
    <type-mapping>PostgreSQL</type-mapping>
    </metadata>
    </local-tx-datasource>
</datasources>

  • jndi-name - логическое имя для этого источника данных, оно потребуется нам далее.
  • connection-url - строка подключения к БД, здесь указывается localhost и стандартный порт 5432. После последнего слеша пишется имя самой базы данных, к которой мы хотим подключиться, в данном случае база называется h.

В принципе, назначение всех параметров понятно по названию, так что не буду их здесь расписывать.


Рабочий пример 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="manager1" transaction-type="JTA">
    <jta-data-source>java:/PostgresDS</jta-data-source>
    <class>org.test.entities.MessageEntity</class>
    <properties>
    <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
    <property name="hibernate.show_sql" value="false" />
    </properties>
    </persistence-unit>
</persistence>

В этом файле вы указываете различные параметры, необходимые для работы PersistenceContext. Обратите внимание на значение параметра name тэга persistence-unit (manager1). Вскоре нам потребуется это значение.

  • jta-data-source - логическое имя источника данных, на которое я уже обратил Ваше внимание чуть выше.
  • class - сущность для таблицы в БД, поля которой отображаются непосредственно в поля таблицы. В этой сущности при помощи аннотаций указываются такие параметры, как имена таблицы и столбцов, первичный ключ, последовательность для первичного ключа и т.п. служебная информация. Обратите внимание, что здесь нужно прописывать все классы-сущности, с которыми вы работаете.


Свойство hibernate.show_sql отвечает за отображение генерируемых запросов к БД в лог сервера.

В принципе этих двух файлов достаточно, чтобы работать с БД. Теперь можно создать какой-нибудь класс, в котором в качестве приватного поля сделать EntityManager:

@PersistenceContext(name = "manager1")
private EntityManager entityManager;
Обратите внимание на имя в аннотации. Оно должно совпадать со значением persistence-unit name в файле persistence.xml. EntityManager позволяет проводить различные манипуляции с классами-сущностями, прежде всего основные операции CRUD (создание, чтение, обновление и удаление), но это уже тема для другой статьи.

Комментариев нет:

Отправить комментарий