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 (создание, чтение, обновление и удаление), но это уже тема для другой статьи.

12 августа 2012 г.

Базовые операции в git


Если вы ещё не работали с git, то вам следует сначала ознакомиться с ключевыми особенностями этой системы.

Состояние хранилища

Итак, в предыдущей части мы установили и настроили локальный репозиторий git. Теперь давайте создадим в нём какой-нибудь текстовый файл, например, test.txt. В нём сохраним произвольный текст. А затем посмотрим в консоли текущее состояние хранилища:
git status

Добавление файла к git

Он нам покажет, что появился untracked файл, который ещё не добавлен в систему контроля версий. Давайте добавим его, чтобы для него учитывалась история изменений.
git add test.txt
Здесь мы добавили к версионированию определённый файл. Если же таких файлов будет очень много, можно добавить их все сразу, заменив название файла точкой.
git add .
Но используйте эту команду с осторожностью во избежания добавления нежелательных файлов!

Ещё раз посмотрим статус репозитория. Теперь git покажет, что файл был добавлен. Если подсветку в настройках вы подключили правильно, имена добавленных файлов отображаются зелёным цветом.

Фиксация изменений (commit)

Зафиксируем добавление файла test.txt в системе. Обязательно используйте опцию -m для указания пояснительного текста к изменению
git commit -m "file test.txt added"
Если же вы хотите добавить многострочный комментарий при помощи текстового редактора, то можете выполнить просто git commit без параметров. В этом случае откроется текстовый редактор (например, vi или vim) и вы сможете ввести многострочный комментарий. После этого сохраните получивший файл.

В vi(m) сохранение файла производится в режиме ввода команд. Если у вас другой режим, нажмите Esc. Затем введите три символа: двоеточие, w и q. Это означает write (записать файл на диск) и quit (выйти из программы).

Просмотр истории изменений

Теперь это сообщение можно увидеть в истории изменений:
git log
Изменим содержимое нашего файла test.txt. Его статус изменится на modified. Выполним второй коммит, чтобы зафиксировать это изменение. Обратите внимание, что второй раз команду git add выполнять не нужно.

Удаление файла из git

Теперь удалим наш файл test.txt.
git rm test.txt
Смотрим статус - файл удалён. Фиксируем изменение. Обратите внимание, что, если файл уже был добавлен к git, его нельзя удалять стандартной командой rm, а надо делать это средствами git.

Постраничный просмотр истории изменений

Довольно быстро у вас накопится столько коммитов, что они перестанут влезать на экран. Тогда история будет выводится постранично. Для перехода к следующей странице нажимайте пробел. Для выхода нажмите q.

Также можно использовать более компактный вариант лога:
git log --pretty=oneline
В общем-то, этих операций достаточно, чтобы обеспечить базовое версионирование на отдельно взятой рабочей станции.

Работа с ветками (branches)

Git позволяет вести разработку независимых компонентов системы в отдельных ветках. Ветки могут быть как удалённые (remote), которые хранятся на сервере и доступны всем, так и локальными (local), которые хранятся на вашей рабочей машине и доступны только вам. Просмотреть все доступные ветки можно при помощи следующей команды:
git branch -a
Здесь будут отображены как локальные, так и серверные ветки. Активная, т.е. та, в которой вы находитесь сейчас, будет отмечена звёздочкой.

Просмотр только тех веток, которые доступны на сервере и видны всем:
git branch -r
Переключиться на другую ветку:
git checkout имя_ветки
Предположим, что вы начали работу над какой-то конкретной задачей, которая напрямую никак не связана с другими задачами. В таком случае рекомендуется создать отдельную ветку для добавления этого функционала.

Создать новую ветку и сразу перейти в неё:
git checkout -b имя_новой_ветки
Если же вам нужно перейти в ветку, которая есть на сервере, но локально с ней вы ещё ни разу не работали, дополните предыдущую команду, указав имя ветки на сервере:
git checkout -b локальное_имя_ветки origin/имя_ветки_на_сервере

Работа с удалённым репозиторием

Если у вас есть сервер, на котором организован общий репозиторий, вы можете отправить туда сделанные вами изменения. К этому моменту изменения уже должны быть оформлены в виде коммита.

Перед отправкой вы должны убедиться, что ваш локальный репозиторий синхронизирован с удалённым.

Общий вид команды для получения изменений с сервера:
git pull origin имя_локальной_ветки:имя_ветки_на_сервере
Можно также использовать сокращённый вариант:
git pull
После того, как вы убедитесь, что новых изменений не было (или что они были успешно синхронизированы с вашей версией), отправьте ваши изменения на сервер.

Общий вид команды для отправки изменений на сервер:
git push origin имя_локальной_ветки:имя_ветки_на_сервере
Можно также использовать сокращённый вариант:
git push

11 августа 2012 г.

Установка и настройка git


Ранее мы обсуждали достоинства git по сравнению с централизованными системами контроля версий. Теперь рассмотрим установку и настройку.

Установка

Установка под Ubuntu выполняется одной строкой:
sudo apt-get install git-core
Если вы работаете под Windows, можно скачать пакет Git Extensions.

Настройка

Запустим консоль и сразу укажем имя пользователя и его почтовый ящик. Эта информация будет отображаться в истории изменений. Не забудьте про кавычки.
git config --global user.name "Ivan Petrov"
git config --global user.email "ivan.petroff@test.com"
Также для того, чтобы в консоли при работе с git производилась подсветка текста, зададим ещё один параметр:
git config --global color.ui "auto"
Все эти глобальные параметры вы также можете посмотреть и отредактировать в скрытом файле .gitconfig в вашей домашней директории. Под Ubuntu это /home/your_name/.gitconfig.

Организация локального хранилища

В самом простом случае при помощи git можно организовать локальный репозиторий, в котором вы можете фиксировать изменения "для себя". Перейдём в любую директорию и создадим там локальное хранилище:
git init --bare
Обратите внимание, что если вы хотите сделать рабочую копию удалённого репозиторию, опцию --bare применять не нужно!



Теперь у нас есть тестовый репозиторий, поэтому перейдём к базовым командам git.

Ключевые особенности Git

Ключевые особенности

Git - это распределённая система контроля версий, которую создал Линус Торвальдс в процессе разработки ядра Linux.

Ключевой особенностью системы является её децентрализованность. Благодаря git вы можете вносить изменения в ветку (branch), которая хранится в репозитории (хранилище) на удалённом сервере и видна другим разработчикам. С другой стороны, вы можете создать свою локальную ветку, которая будет видна только на вашей рабочей станции. Однако в любой момент вы можете сделать её общедоступной, разместив в репозитории на удалённом сервере. А можете произвести слияние (merge) вашей локальной ветки с репозиторием так, что на сервере она будет выглядеть частью "ствола" дерева изменений.

Если провести аналогию с централизованной системой контроля версий, такой как svn (subversion), то в ней вы не можете создавать свои локальные ветки. Любая ветка svn всегда присутствует на сервере.

В настоящий момент git набирает всё большую популярность среди разработчиков, поэтому давайте рассмотрим эту систему более подробно. Начнём с установки и настройки.