Намедни понадобилось перевести свой старый проект на Glassfish. Проект построен на SpringMVC, и как не сложно догадаться в качестве главного хранилища данных использует гадкий MySQL.
По умолчанию, как и предполагалось, ничего не заработало, не найдя вразумительных ответов по теме в гуглах, пришлось часок поковыряться самостоятельно, и решение было найдено.
В старой версии проекта использовался пресловутый JdbcTemplate и URL коннекта прописывался непосредство в XML конфиге Spring’а.
Однако, какой смысл использовать это неповоротливое, в плане масштабируемости решение, если мы переводим весь проект на могучий Glassfish, где есть удобная в настройке поддержка JNDI ресурсов и пулов, и даже контроль транзакционности “из коробки”.
Первое, что понадобится сделать — это правильно сконфигурировать наше веб приложение. Для этого понадобиться внести правки в конфигурацию контекста Spring, web.xml, а также создать специальный sun-web.xml декскриптор.
applicationContext.xml:
<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:
<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, и вуа-ля, всё работает.