Настройка связки Glassfish / MySQL / Spring

Posted Thursday, March 18, 2010 under J2EE, Java, Spring, Базы данных, Фреймворки.

Намедни понадобилось перевести свой старый проект на Glassfish. Проект построен на SpringMVC, и как не сложно догадаться в качестве главного хранилища данных использует гадкий MySQL.

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

В старой версии проекта использовался пресловутый JdbcTemplate и URL коннекта прописывался непосредство в XML конфиге Spring’а.

Однако, какой смысл использовать это неповоротливое, в плане масштабируемости решение, если мы переводим весь проект на могучий Glassfish, где есть удобная в настройке поддержка JNDI ресурсов и пулов, и даже контроль транзакционности “из коробки”.

Первое, что понадобится сделать — это правильно сконфигурировать наше веб приложение. Для этого понадобиться внести правки в конфигурацию контекста Spring, web.xml, а также создать специальный sun-web.xml декскриптор.

applicationContext.xml:

<bean id="jndiDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName"><value>java:comp/env/jndiSourceName</value></property>
</bean>
...

Далее, необходимо объявить ссылку на указанный выше ресурс в веб дескрипторе, если мы хотим использовать пространство java:comp/env.

web.xml:

...
<resource-ref>
    <res-ref-name>jndiSourceName</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>
...

Последнее на уровне конфигурации, что прийдется сделать — это создать специальный дескриптор для Glassfish в папке WEB-INF.

sun-web.xml:

<sun-web-app>
    <resource-ref>
        <res-ref-name>jndiSourceName</res-ref-name>
        <jndi-name>realJNDINameInGlassfish</jndi-name>
    </resource-ref>
</sun-web-app>

Далее конфигурируем Glassfish. Для этого понадобиться сделать 2 вещи.

Скачиваем MySQL Connector/J, распаковываем и копируем mysql-connector-java-x.x.x-bin.jar в папку домена Glassfish ./domain1/lib/ext.

Перезапускаем сервер.

Далее идём в консоль Glassfish по пути Resources->JDBC-> Connection Pools и создаём новый пул, при этом Resource Type выбираем javax.sql.DataSource, Database Vendor: MySQL соответственно. Жмём Next и на следующей страничке выбираем Datasource Classname: com.mysql.jdbc.jdbc2.optional.MysqlDataSource.

В параметрах указываем, User, Password, ServerName, Port. Это то, что необходимо указать обязательно и о чем пишется в любом QuickStart Guide.

Однако, о чем умалчивает документация — это о том, что также нужно руками прописать URL и Url, что представляет собой стандартную запись урлы коннекшены. По крайней мере, у меня всё заработало только после того, как я прописал эти параметры.

Последним шагом заходим в JDBC Resources и создаём новый ресурс с именем, которое соответствует указанному в конфиге sun-web.xml.

Рестартуем приложение из админ-консоли Glassfish, и вуа-ля, всё работает.

Leave a Reply