Michel Zanini

Blog sobre o framework Spring e tecnologias relacionadas

Archive for Junho 2008

Rod Johnson fala sobre EJB

sem comentários

Trecho retirado de uma entrevista do Rod Johnson na InfoQ:

“I think with respect to EJB, I think my views are pretty well known on it. I mean EJB is just a bad technology. I can’t quite understand the desire that, at least Sun and some of the vendors seem to have to keep EJB alive. I think it has reached the point where it has a negative brand value. So for example a surprising number of large organizations like banks ban the use of EJB now. And realistically I think there were two choices: one was to either decide that maybe we should just end-of-life this, and the other was to accept that there was no point in backward compatibility with failed previous versions, and they start from scratch; that something obviously could be more successful without the baggage.”

Abraços.
Michel Zanini.

Escrito por michelzanini

Junho 18, 2008 em 12:48 am

Publicado em Java

Etiquetado com

Usando FactoryBean com Spring

com um comentário

Em muitos casos será necessário criar um objeto no ApplicationContext que não é um Java Bean. Ou em alguns casos, é necessário executar algum método de inicialização no objeto criado, ou algum procedimento customizado. Para esses casos o Spring possuí o conceito de FactoryBean.

FactoryBean é uma interface que possui três métodos para implementar, como visto a seguir:

Na maioria dos casos é mais adequado estender a classe abstrata AbstractFactoryBean que implementa a interface acima. Por default, ao estender essa classe o objeto criado é um singleton, que é o mais comum na maioria dos casos. Na AbstractFactoryBean restam os métodos ‘getObjectType’ e ‘createInstance’ para implementer. O ‘createInstance’ difere do ‘getObject’ pois só é chamado uma única vez (para singleton’s), e varias vezes para prototypes.

Como exemplo, vamos criar uma classe ‘KeyStoreFactoryBean’ que implementa essa interface. O objetivo é a criação de KeyStore’s de forma prática dentro do ApplicationContext. Note que um KeyStore não é um Java Bean, portanto essa é uma maneira adequada de permitir injetar KeyStore’s dentro de outros objetos do ApplicationContext. Portanto, começamos com uma implementação inicial:

A instância retornada será do tipo java.security.KeyStore e poderá ser injetada em qualquer setKeyStore(KeyStore) de outro Java Bean do ApplicationContext. Veja um exemplo desse bean declarado no ApplicationContext:

Para tornar nosso exemplo realista vamos tornar o KeyStoreFactoryBean configurável. Para isso vamos adicionar quatro propriedades. O local que o arquivo KeyStore está (podendo ser no classpath, filesystem, URL, etc), uma senha para abrir o KeyStore, o tipo de KeyStore (ex: pkcs12, jks, etc) e o provider a ser utilizado. Os últimos dois parâmetros assumem valores padrões do Java, conforme esperado.

O código interessante é a implementação do método ‘createInstance’. Aqui criamos um KeyStore de acordo com os parâmetros passados. Veja o exemplo completo:

Repare na utilização da classe ‘org.springframework.core.io.Resource’ do Spring. Ela permite injetar qualquer arquivo, estando no classpath, no filesystem, URL, etc. Isso facilita a configuração.

Dessa forma é possível criar um KeyStore dessa forma no ApplicationContext:

Como vimos, um FactoryBean pode auxiliar em muito a criação de objetos difíceis de configurar. É muito utilizado para configurar objetos de frameworks externos dentro do Spring.

OBS: O exemplo completo da classe KeyStoreFactoryBean pode ser encontrado no módulo ws-security do projeto spring-ws, sub-projeto do springframework.

Abraços,
Michel Zanini.

Escrito por michelzanini

Junho 11, 2008 em 9:57 pm

Publicado em spring

Etiquetado com , ,