Configurando um serviço de pooling no JBoss 6

Postado em

Olá caros leitores meu nome é Victor Neves, final de 2012 recebi o convite do grande Maurício Magnani para escrever sobre algum assunto para seu blog. Fiquei meio perdido por não saber o que escrever pois sou desenvolvedor e não trabalho profundamente com JBoss, tudo o que sei é o necessário para botar um projeto WEB no ar e uma coisinha ou outra que a maioria dos outros desenvolvedores não sabem (por causa do tempo que já trabalho com JBoss e por causa da minha séria patologia que é curiosidade)… pelo menos aqui na empresa que trabalho. Sou desenvolvedor java a quase 4 anos, e sempre gostei de utilizar algumas soluções Red Hat como JBoss e Hibernate, menos Linux, por enquanto continuo sendo adepto do Debian em casa e no trabalho hehe

Procurando o que escrever percebi que o Maurício não havia postado nada ainda sobre criação de services no JBoss, então aí vai!

Vamos criar um JBoss MBean service que irá prover um pool de conexão usando o C3P0.

O JBoss oferece a opção de poder criar componentes, serviços, que possam a vir prover algum tipo de serviço. Existem dois tipos de Mbean service: os que dependem de um outro serviço do JBoss e os que não dependem de outro serviço do JBoss.

No exemplo que vamos trabalhar esse serviço é escrito em XML.

Dentro do XML começaremos inserindo


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE server>

<server>

<mbean code="com.mchange.v2.c3p0.jboss.C3P0PooledDataSource" name="jboss:service=C3P0PooledDataSource">

Onde em code nós definiremos a classe que será usada para o serviço, no caso, iremos implementar a classe C3P0PooledDataSource.

Feito isso, nós devemos agora definir algumas configurações sobre o banco de dados e o datasource configurado. Então colocamos :


<attribute name="JndiName">java:pg_aeroportoDS</attribute>

<attribute name="JdbcUrl">jdbc:postgresql://10.1.1.16:5432/aeroporto</attribute>

<attribute name="DriverClass">org.postgresql.Driver</attribute>

<attribute name="User">aeroporto</attribute>

<attribute name="Password">plutonio</attribute>

Agora vamos analisar, em JndiName colocamos o nome do datasource que será vinculado esse serviço de pooling, aqui estamos trabalhando como se houvesse um datasource chamado pg_aeroporto-ds.xml em nosso diretório deploy , depois configuramos a conexão ao banco, o driver utilizado, usuário e senha.

Obs.: as configurações aqui devem coincidir com as configurações no datasource.

Feito isso, vamos configurar os detalhes básicos de nosso pooling:


<attribute name="AcquireIncrement">5</attribute>

<attribute name="CheckoutTimeout">60</attribute>

<attribute name="IdleConnectionTestPeriod">300</attribute>

<attribute name="MaxPoolSize">40</attribute>

<attribute name="MinPoolSize">5</attribute>

Vejamos, AcquireIncrement determina quantas conexões o C3P0 tentará adquirir quando não houver mais conexões disponíveis, seu valor default é 3 (porém, nunca irá ultrapassar o número máximo de conexões permitidas). CheckoutTimeout determina quanto tempo em millisegundos um cliente irá esperar pela aquisição de ima conexão, seu valor default é 0. IdleConnectionTestPeriod determina um período em segundos que o C3P0 testará se uma conexão está ativa ou inativa, seu valor default é 0, ou seja, nunca testará. MaxPoolSize determina o número máximo de conexões que o pool irá manter por um determinado tempo, sem valor default é 15. MinPoolSize define o número mínimo de conexões que o pool irá manter, seu valor default é 3.

Mas vocês estão lembrados de que eu disse que existem dois tipos de MBean services? Pois é, esse serviço de pooling depende do serviço de JNDI. Então devemos colocar no final de nosso arquivo:

<depends>jboss:service=Naming</depends>

Notemos, que esses atributos acima são métodos da classe C3P0PooledDataSource, assim como esses, existem outros métodos nessa classe!😉

É como se o JBoss instanciasse essa classe por conta própria, populasse esse objeto com os valores que definimos no XML e deixasse esse objeto disponível para uso.

O serviço deve ser salvo com o final -service.xml, então o nome poderia ser c3p0-service.xml e deverá ser salvo no diretório deploy da instância que você está usando.

Nosso serviço de pooling ficaria assim :

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE server>

<server>

<mbean code="com.mchange.v2.c3p0.jboss.C3P0PooledDataSource"
name="jboss:service=C3P0PooledDataSource">
<attribute name="JndiName">java:pg_aeroportoDS</attribute>

<attribute name="JdbcUrl">jdbc:postgresql://10.1.1.16:5432/aeroporto</attribute>

<attribute name="DriverClass">org.postgresql.Driver</attribute>

<attribute name="User">aeroporto</attribute>
<attribute name="Password">plutonio</attribute>
<attribute name="AcquireIncrement">5</attribute>

<attribute name="CheckoutTimeout">60</attribute>

<attribute name="IdleConnectionTestPeriod">300</attribute>

<attribute name="MaxPoolSize">40</attribute>
<attribute name="MinPoolSize">5</attribute>
<depends>jboss:service=Naming</depends>
</mbean>
</server>

Espero que tenham gostado. Abraços Fraternos.

Para saber mais :

http://www.mchange.com/projects/c3p0/

http://access.redhat.com/knowledge/docs/en-US/JBoss_Enterprise_Application_Platform/4.2/html/Server_Configuration_Guide/Using_JMX_as_a_Microkernel-JBoss_MBean_Services.html

JBoss in action – Jamae, Javid & Johnson, Peter. Ed Manning 2009

5 comentários em “Configurando um serviço de pooling no JBoss 6

    Mauricio Magnani Jr disse:
    30 de janeiro de 2013 às 13:39

    É vdd nunca falei sobre criação de MBean😀

    Vlw Victor boa dica🙂

    Abs

      victorneves007 respondido:
      30 de janeiro de 2013 às 13:45

      da pra fazer um mbean usando a interface scheduler do JBoss, uma vez eu fiz um JAR, e configurei um mbean que ficava executando um método que imprimia “usando um schedule” a cada 5 segundos… se voce parar pra pensar, dá pra deixar o JBoss responsável por várias execuções cronometradas…
      como por exemplo executar um método que limpe o diretório log com logs com mais de x meses….

        Mauricio Magnani Jr disse:
        30 de janeiro de 2013 às 13:54

        Legal… não havia pensado nisso!
        É um excelente exemplo.

    carlos evangelista disse:
    30 de janeiro de 2013 às 19:52

    Victor, boas dicas.São simples, porém muito importantes. Recomendo a leitura para todos que estejam projetando soluções em arquitetura J2EE.

    Ataxexe disse:
    31 de janeiro de 2013 às 16:37

    Abriu com chave de ouro, Victor! Excelente dica!

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s