Em posts anteriores, configurei o acesso ao banco de dados utilizando o Hibernate e o JPA. Os links são:
Neste post, irei explicar como configurar o acesso ao banco de dados no servidor de aplicações JBoss Application Server 7 (JBoss AS 7). Para quem não conhece o JBoss AS 7 ou não sabe o que é um servidor de aplicações para o Java, é possível encontrar material em:
Este post não inclui a instalação do servidor, ou seja, é necessário instalar o JBoss AS 7 para depois conseguir seguir o exemplo que irei demonstrar aqui.
Primeiro escolha o banco de dados que irá utilizar, baixe o drive do banco para Java (JDBC). Entre na pasta de instalação do JBoss AS 7 e encontre a subpasta modules. No meu exemplo estou acessando um banco de dados Postgresql, então dentro de modules, encontre a subpasta org e se ainda não existir, crie dentro de org a subpasta postgresql. Entre na pasta postgresql e crie uma subpasta main. Copie para a pasta main o arquivo do drive JDBC para o Postgresql e crie o arquivo module.xml com o seguinte conteúdo:
<?xml version=”1.0″ encoding=”UTF-8″?>
<module xmlns=”urn:jboss:module:1.0″ name=”org.postgresql”>
<resources>
<resource-root path=”postgresql-9.1-902.jdbc4.jar”/>
</resources>
<dependencies>
<module name=”javax.api”/>
<module name=”javax.transaction.api”/>
</dependencies>
</module>
Crie o banco de dados e em seguida entre na pasta do JBoss AS 7, subpasta standalone, configuration e edite o arquivo standalone.xml. Dentro deste arquivo localize a tag datasources e adicione o drive para o banco de dados que irá utilizar. No meu exemplo foi adicionado o seguinte conteúdo:
<driver name=”postgresql-driver” module=”org.postgresql”>
<xa-datasource-class>org.postgresql.Driver</xa-datasource-class>
</driver>
Agora é necessário configurar o acesso ao banco de dados. Para isto, no mesmo arquivo e tag datasources do exemplo anterior, adicione o conteúdo para identificar o banco de dados conforme abaixo:
<datasource jta=”true” jndi-name=”java:/pgjOpenProject” pool-name=”pgjOpenProject” enabled=”true” use-java-context=”true”>
<connection-url>jdbc:postgresql://localhost:5432/jopenproject</connection-url>
<driver>postgresql-driver</driver>
<security>
<user-name>jproject</user-name>
<password>123456</password>
</security>
<statement>
<prepared-statement-cache-size>100</prepared-statement-cache-size>
<share-prepared-statements>true</share-prepared-statements>
</statement>
</datasource>
Pronto, sua configuração para o servidor JBoss AS 7 acessar o banco de dados foi criada. Agora, entre no seu projeto Java e configure o arquivo persistence.xml para utilizar esta conexão. Para isto, crie o arquivo persistence.xml dentro da pasta META-INF com o seguinte conteúdo:
<?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=”primary”>
<jta-data-source>java:/pgjOpenProject</jta-data-source>
<properties>
<property name=”hibernate.hbm2ddl.auto” value=”create-drop” />
<property name=”hibernate.show_sql” value=”true” />
</properties>
</persistence-unit>
</persistence>
Agora apenas crie suas classes Entities e suas classes para gerenciamento delas. Não é necessário ficar copiando arquivos do Hibernate ou outro framework ORM para o projeto, apenas o drive JDBC para o servidor JBoss. Também não é necessário controlar suas transações, pois o próprio servidor JBoss consegue fazer isto automático (mas isto não será explicado neste post). Ao criar uma Entity, não é necessário mapear elas dentro de nenhum arquivo, pois o servidor já vai entender que tem que fazer isto com as classes anotadas como Entity (não entraremos em mais detalhes). Também pode ser utilizado injeção de dependências com CDI para que o servidor crie nossa EntityManager, veja o exemplo de um método para persistir um objeto:
public void save(GrupoCliente obj) {
if (obj.getId() == null) {
try {
em.persist(obj);
log.info(“Grupo de Cliente ” + obj + ” cadastrado com sucesso!”);
} catch (Exception e) {
String erro = “Erro ao cadastrar registro com Grupo de Cliente! Registro ” + obj;
log.info(erro);
throw new RuntimeException(erro);
}
} else {
try {
em.merge(obj);
log.info(“Grupo de Cliente ” + obj + ” alterado com sucesso!”);
} catch (Exception e) {
String erro = “Erro ao alterar registro com Grupo de Cliente ” + obj;
log.info(erro);
throw new RuntimeException(erro);
}
}
grupoClienteEventSrc.fire(obj);
}
Pronto!