Sobre o JBoss AS
O JBoss AS 7 é a versão mais recente do container Java EE mantindo pela Red Hat, trata-se da versão open source do projeto. A Red Hat também disponibiliza o JBoss EAP 6, como um produto (suporte e treinamento). Ambas as versões 6 e 7, na teoria, contam com a mesma base de código e features.
O JBoss sofreu uma grande reestruturação, se compararmos com versões anteriores (4 e 5). Um novo mecanismo para definir e utilizar módulos, melhorias consideráveis na performance e na administração do servidor são algumas características do JBoss AS 7. As mudanças afetam a forma de administrar o servidor, um exemplo disso é a própria configuração do DataSource.
O JBoss AS pode ser operado em dois modos: managed domain aonde múltiplas instâncias ativas são orquestradas (controladas) por um ponto (host) central; a outra é a standalone aonde uma única instância do servidor é utilizada (parecido com as versões antigas). Nesse post eu utilizo o JBoss no modo standalone.
Instalar o driver do MySQL
Depois de baixar o driver JDBC do MySQL, é necessário instalar o driver como um módulo do JBoss. No diretório do JBoss, na pasta modules crie a estrutura de sub-pastas \com\mysql\main, e copie o jar do driver dentro dessa pasta.
Nessa pasta, crie o arquivo module.xml, com o conteúdo a seguir:
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.1" name="com.mysql"> <resources> <resource-root path="mysql-connector-java-5.1.24-bin.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
Note a definição do nome do módulo com.mysql, na tag module de acordo com a estrutura de diretórios criada. A pasta main não é considerada, ela indica ao JBoss que essa é a versão principal do módulo. O JBoss permite a configuração de diferentes versões do mesmo módulo! Na tag resource-root indicamos o jar do MySQL contido no diretório main, que é justamente quem implementa o módulo. Outro detalhe são as dependências do módulo, definidas na tag dependencies.
Definir o DataSource
Uma vez que o módulo foi instalado, a próxima etapa é configurar o DataSource. Acesse o arquivo jboss7.../standalone/configuration/standalone.xml e adicione o conteúdo da tag datasource e driver, como a seguir:
<?xml version='1.0' encoding='UTF-8'?> <server xmlns="urn:jboss:domain:1.2"> ... <subsystem xmlns="urn:jboss:domain:datasources:1.0"> <datasources> ... <datasource jndi-name="java:jboss/datasources/MysqlDS" pool-name="MySqlDS" enabled="true" use-java-context="true"> <!-- url jdbc --> <connection-url>jdbc:mysql://localhost:3306/db</connection-url> <!-- identificador do driver --> <driver>com.mysql</driver> <transaction-isolation> TRANSACTION_READ_COMMITTED </transaction-isolation> <pool> <min-pool-size>10</min-pool-size> <max-pool-size>100</max-pool-size> <prefill>true</prefill> </pool> <security> <user-name>root</user-name> <!-- usuario mysql --> <password>root</password> <!-- senha --> </security> </datasource> <drivers> ... <!-- definicao do driver --> <driver name="com.mysql" module="com.mysql"> <xa-datasource-class>com.mysql.jdbc.Driver</xa-datasource-class> </driver> </drivers> </datasources> </subsystem> ... </server>
Importante: Não remova nenhum conteúdo desse arquivo. Provalvemente já existe a configuração do driver e do datasource para o Hypersonic, um exemplo do JBoss. Mantenha essas configurações.
A tag driver indica que o módulo que nós acabamos de instalar, deve ser utilizado como um driver JDBC. Nela, indicamos qual é o nome do driver. Na outra tag driver, que fica dentro da definição do datasource, colocamos o nome do driver deve ser utilizado. O restante das tags indicam as informações de conexão com o MySQL e informações para criação do datasource (pool e transação).
Coloque o JBoss AS no ar, execute o arquivo jboss...\bin\standalone.sh (Windows standalone.bat). Verifique as informações do DataSource no log:
yaw@m21:/opt/jboss-as-7.1.1.Final/bin$./standalone.sh ================================================================= JBoss Bootstrap Environment JBOSS_HOME: /opt/jboss-as-7.1.1.Final JAVA: /usr/lib/jvm/java-7-oracle/bin/java JAVA_OPTS: -server -XX:+TieredCompilation -Xms64m -Xmx512m ... ================================================================= 00:30:55,948 INFO [org.jboss.modules] JBoss Modules version 1.1.1.GA 00:30:56,105 INFO [org.jboss.msc] JBoss MSC version 1.0.2.GA 00:30:56,149 INFO [org.jboss.as] JBoss AS 7.1.1.Final "Brontes" starting ... 00:30:57,184 INFO [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 27) JBAS010404: Deploying non-JDBC-compliant driver class com.mysql.jdbc.Driver (version 5.1) ... 00:30:57,667 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-4) JBAS010400: Bound data source [java:jboss/datasources/MysqlDS] ...
Agora você pode desenvolver aplicações Java EE com JBoss e MySQL, através desse DataSource. Veja como seria o persistence.xml (JPA) para utilizar esse datasource:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="appUnit"> <!-- jndi-name --> <jta-data-source>java:jboss/datasources/MysqlDS</jta-data-source> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.connection.charSet" value="UTF-8"/> </properties> </persistence-unit> </persistence>
http://twitter.com/edermag
http://www.yaw.com.br
7 comments:
Muito bom cara! Me ajudou demais. Obrigado!
Eu não entendi o fato de no Glassfish ser possível subir a depedência do MySQL pelo Maven e no JBoss ter que criar toda essa parafernalha de modulos, é isso mesmo?
Concordo com o kipple, não tem uma forma de configurar direto na aplicação?
Os conectores versão 5.1.30+ precisam declarar driver-class> no standalone.xml
driver name="mysql" module="com.mysql">
xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
driver-class>com.mysql.jdbc.Driver /driver-class >
</driver
Pro pessoal que acha isso complicado, em um ambiente corporativo se atualiza aplicações o tempo todo, nos ambientes de desenvolvimento, de teste, de homologação e de produção. Cada uma apontando pra um banco específico (concordam que não se deve testar nos dados do ambiente de produção?). Deixando cada JBoss configurado pra um banco, você não precisa mexer no código fonte a cada mudança de ambiente, só pra mudar o banco. Isso evita inconsistências e riscos da aplicação de desenvolvimento escrever nos dados de produção ou de testes por exemplo, no caso de um descuido. Eu uso personagens de videogame pra fazer testes. Imagine alguém pesquisando usuários que realizaram uma operação, e encontrarem o Pacman na lista?
tem como fazer essa configuração fora do standalone.xml? Trabalho em uma empresa e tenho um projeto que precisa conetar um um banco oracle só que o suporte do nosso servidor Jboss não quer configurar direto no standalone e falam que tem como fazer esse tipo de conexão direto pela aplicação ou colocando na pasta de deploy. Tem como fazer isso? Alguém tem algum exemplo que funcione?
Post a Comment