Arquivo para Janeiro, 2009

CommonJ: Usando threads gerenciadas pelo container

Com a relativa baixa de preço dos computadores multiprocessados, tem-se tornado mais comum a construção de aplicações concorrentes ou multi-threads para aproveitar todo o poder que esse tipo de hardware tem. Mas não vou falar sobre os benéficos ou malefícios de programação concorrente, ou da linha do tempo dos processadores, mas sim falarei de um assunto mais específico: uma API que permite usar managed threads, ou seja, threads que são gerenciadas pelo container.

A tal API que me refiro é a CommonJ.

CommonJ é uma especificação criada em conjunto pela IBM e BEA para permitir o uso de programação concorrente em aplicações rodando sob seus respectivos Applications Servers (ou qualquer outro que implemente a especificação), de maneira que o container tenhavisibilidade dessas threads, sendo possível oferecer para elas todos os serviços oferecidos para componentes gerenciados, como controle de transações, segurança, etc.

Em 2003, essa especificação foi submetida ao JCP pela IBM e BEA para se tornar parte do JEE. O processo pode ser acompanhado em http://jcp.org/en/jsr/detail?id=237

O CommonJ é também conhecida como ‘The Timer and Work Manager API’. Mas a parte que nos interessa por enquanto é apenas a ‘Work Manager’.

As principais interfaces

Essa API é muito simples e muito fácil de utilizar. Para um breve entendimento, citarei suas principais interfaces e seu propósito principal. Serei breve pois uma descrição mais detalhada pode ser encontrada nos Javadocs da mesma.

Vamos lá:

WorkManager

É uma das principais interfaces e oferece uma séria de métodos para schedule de threads (aqui chamada de Work).

Caso use Spring Framework, o mesmo possui uma boa abstração para o uso dessa interface. Com isso, a aplicação cliente nem mesmo tem ciência da existencia de uma API chamada CommonJ.

Caso não esteja usando o Spring, você pode obter uma instância do WorkManager programaticamente através de JNDI.

Em ambos os casos, é preciso que o administrador do Application Server configure o WorkManager antes de sua utilização.

Work

Essa interface extende a interface Runnable do Java, então na prática ela será ’sua thread’*.

WorkItem

Esse objeto é usado para se determinar o status de uma determinada thread (Work). Quando se submente um Work para um WorkManager, este último sempre retorna um WorkItem.

Existem ainda outras interfaces que não citarei por enquanto, para nosso propósito essas são suficientes.

Na próxima parte começarei a parte mais legal: códigos! Mostrarei exemplos de como utilizar essa API e mostrarei também como configurá-la no Spring Framework.

Ref:

http://e-docs.bea.com/wls/docs92/commonj/commonj.html