Desconstruindo EJB

29
Centro de Estudos e Sistemas Avançados do Recife Desconstruindo EJB Luiz Borba Luiz Eugênio (left)

Transcript of Desconstruindo EJB

Page 1: Desconstruindo EJB

Centro de Estudos e Sistemas Avançados do Recife

Desconstruindo EJB

Luiz Borba Luiz Eugênio (left)

Page 2: Desconstruindo EJB

Desconstruindo EJB

❑ Motivado pelos problemas que enfrentamos – Problemas com EJB – Como contornar os problemas

Page 3: Desconstruindo EJB

Problemas com EJB

❑ Problemas de produtividade ❑ Custo de desenvolvimento ❑ Custo total para o cliente ❑ Problemas de portabilidade ❑ Problemas de performance ❑ Restrições do EJB

Page 4: Desconstruindo EJB

Problemas de produtividade

❑ Para testes unitários, tem que “levantar” um EJB Container

❑ Tempo de compilação excessivo (geração de stubs e skeletons)

❑ Debug remoto é mais lento ❑ Ferramentas são mais complexas e pesadas ❑ Ferramentas ainda são pouco maduras e

apresentam diversos problemas (redeploy do BAS e no BES)

❑ Ainda pouca experiência com desenvolvimento de aplicações distribuidas

Page 5: Desconstruindo EJB

Problemas de produtividade

❑ Mapeamento CMP – Não tem herança e pelo jeito, não vai ter nunca – Não mapeia relacionamentos (no EJB2 criaram o

CMR, mas, tem limitações) ❑ Caso SISREG

– Temos sempre que implementar na mão herança e relacionamentos, complicando o uso dos Beans

Page 6: Desconstruindo EJB

Custo de desenvolvimento

❑ Equipamento mais caro – Para rodar o container + ferramenta de

desenvolvimento é preciso uma boa máquina – Cesar teve que fazer um upgrade de memória

(256Mb para 768Mb) ❑ Ferramentas caras

– Ferramentas free não possuem bom suporte a EJB (ex. JBuilder Personal, Netbeans e Eclipse versus JBuilder Enterprise, Forte e WSAD)

❑ Dificuldade de encontrar mão de obra especializada ❑ Baixa produtividade

Page 7: Desconstruindo EJB

Custo total para o cliente

❑ Custo alto da aplicação (mão de obra especializada, hardware de desenvolvimento mais caro, ferramentas de desenvolvimento mais caras, baixa produtividade)

❑ Custo do servidor de aplicação – BES AppServer Edition 5.0.1 – U$ 12k / CPU – IBM Websphere Enterprise 4.1 – U$ 35k / CPU – OAS 9i Enterprise 9.0.2 – U$ 20k / CPU – OAS X ORION

(fonte: http://www.flashline.com/components/appservermatrix.jsp) ❑ Mão-de-obra especializada (administrador de

sistemas com conhecimento em servidores de aplicação) – raro e caro

Page 8: Desconstruindo EJB

Problemas de portabilidade

❑ O mapeamento CMP (Deployment Descriptor) não é portável

❑ Nem sempre existem ferramentas para conversão (aliás, normalmente não existem), e quando existem, não funcionam 100% (tem que fazer uma parte manualmente)

❑ Nem sempre podem ser convertidas sem perda de informação (WebLogic x BAS)

❑ Não garante a portabilidade entre banco de dados diferentes (EJB 1.1)

Page 9: Desconstruindo EJB

Problemas de portabilidade

❑ Usando EJB QL (EJB 2.0) poderia ser garantido a portabilidade entre bancos, mas, ainda é muito nova e possui muitas limitações: – order by vai sair no EJB 2.1 – Funções de agregação – Funções de manipulação de datas

❑ DATASUS tenta migrar para outros Servidores de Aplicação e outros Bancos de Dados e o custo é alto

Page 10: Desconstruindo EJB

Problemas de performance

❑ Alterações feitas em outros sistemas ou feitas diretamente no banco são refletidas imediatamente pelos beans – Queries precisam ser feitas para validar informações

em cache – Queries tem que ser completas (select * ...), porque

nem todos os bancos possuem um timestamp que guarde o momento da última alteração ou um campo de versão do registro

❑ Atualizações em CMP são sincronizadas no banco no máximo até o fim da transação – Quando em uma mesma transação fazer consultas

sob atualizações feitas antes, a informação pode não ter sido colocada no banco ainda (Rotinas Batch do DATASUS) – solução: atualizações usando DAO

Page 11: Desconstruindo EJB

Problemas de performance

❑ Para fazer finds, precisamos de 1+n queries para trazer todos os dados (no caso de CMP, o servidor pode otimizar isso, mas, não acontece sempre)

❑ Fazer chamadas remotas para Entity Beans, é inviável (padrão DTO)

❑ Entity Beans não precisam ser distribuidos (Interfaces Locais - EJB 2)

Page 12: Desconstruindo EJB

Restrições EJB

❑ Nada de Threads ❑ Nada de java.io.* ❑ Nada de Sockets ❑ Nada de AWT ❑ Nada de JNI ❑ Nada de (mais um bocado de coisas)... ❑ Ainda tem um monte de restrições com o uso de

classloaders, reflection, atributos estáticos, sincronização, security manager, e por aí vai...

Page 13: Desconstruindo EJB

E tem mais...

❑ O Servidor de Aplicação oferece uma série de recursos que a gente não utiliza, não porque não quer, mas, porque não precisa

Page 14: Desconstruindo EJB

Estudo de caso (DATASUS – SISREG)

❑ É um sistema que vai ser instalado em vários pontos do país

❑ Projeto de implantação comprometido pelo custo ❑ Alternativas sendo cogitadas

– Reaproveitamento de Hardware (CNS) – Servidores gratuitos (JBOSS) – Bancos de Dados gratuitos (POSTGRESQL) – Mão-de-obra gratuita ? (escravos)

Page 15: Desconstruindo EJB

Como contornar os problemas ?

❑ Principais ”vantagens” de Enterprise Java Beans: – Distribuição dos componentes gerenciadas pelo

container – Persistência de componentes gerenciadas pelo

container – Transações gerenciadas pelo container – Portabilidade entre diversos servidores de aplicação.

Page 16: Desconstruindo EJB

Distribuição

❑ Nem sempre é necessário distribuir nossas aplicações – Um desenvolvedor implementando um caso de uso

poucas vezes precisa testar de forma distribuída – Alguns sistemas não precisam de distribuição

❑ A arquitetura do CESAR pode auxiliar no isolamento da distribuição

❑ A implementação de uma camada de distribuição pode ser desenvolvida em separado ou substituída sem grandes impactos na aplicação

Page 17: Desconstruindo EJB

Distribuição

❑ FachadaControlador é o ponto de distribuição ❑ Somente a FachadaControlador precisa ser um

objeto remoto ❑ As regras de negócio ficam na implementação do

controlador

Controlador B

Cadastro

Fachada Controlador B

Repositório

Cadastro

Repositório

Cadastro

Repositório

Controlador A

Cadastro

Fachada Controlador A

Repositório

Cadastro

Repositório

Cadastros

Repositórios

Page 18: Desconstruindo EJB

Distribuição

❑ Podemos ter diversos tipos de implementação para a FachadaControlador (ex. CORBA, RMI, Web Services ou até um Session Bean)

❑ Referência para o controladores obtida através de um ServiceLocator que pode retornar uma referência local ou remota sempre utilizando a interface da FachadaControlador

❑ FachadaControlador completa pode ser facilmente gerada por uma ferramenta (ex. QualitiCoder)

Page 19: Desconstruindo EJB

Tecnologias de Distribuição

❑ CORBA (GIOP/IIOP) – Brokers tem custo alto em ambientes legados – Implementação de aplicações necessita de maior

esforço – Independente de linguagem – Independente de plataforma – Serviços básicos, de infra-estrutura e de domínios

específicos padronizados – Solução mais utilizada para integração com legado – Suporta comunicação síncrona/assíncrona

Page 20: Desconstruindo EJB

Tecnologias de Distribuição

❑ RMI/IIOP – Comunicação síncrona – Comunicação possível com aplicações não-Java – Dependente de linguagem (Java) – Normalmente utiliza um broker CORBA – Solução utilizada para comunicação entre Enterprise

Java Beans

❑ RMI/JRMP – Comunicação síncrona – Comunicação apenas entre aplicações Java – Dependente de linguagem (Java)

Page 21: Desconstruindo EJB

Tecnologias de Distribuição

❑ Web Services (SOAP/HTTP) – Baixo desempenho devido as mensagens XML – Independente de linguagem – Independente de plataforma – Necessita de mais amadurecimento (suporte a

segurança e transações distribuídas) – Utilização de XML como base facilita a integração com

outros sistemas – Suporta comunicação síncrona/assíncrona

Page 22: Desconstruindo EJB

Transações

❑ Normalmente precisamos de transações, contudo nem sempre distribuídas

❑ Não precisamos criar dependências de uma tecnologia específica – Mudança do mecanismo não deve afetar a aplicação

❑ Utilizando conceitos da arquitetura CESAR, criamos uma camada de abstração do mecanismo de transações

Page 23: Desconstruindo EJB

Transações

❑ Criamos uma API para abstração dos mecanismos ❑ Para cada mecanismo de transação implementamos

um conjunto de interfaces da API ❑ FachadaControlador delimita o início e final das

transações

Controlador A

Cadastro

Fachada Controlador A

Repositório

Cadastro

Repositório

Cadastros

Repositórios

public void aMethod() throws ControladorException { Transaction.begin();

try { ControladorA.getInstance().aMethod();

Transaction.commit(); } catch (ControladorException ex) { Transaction.abort(); throw ex; } }

Page 24: Desconstruindo EJB

Tecnologias de Transações

❑ CORBA Object Transaction Service (OTS) – Independência de linguagens – Independência de plataformas – Serviço padronizado – Suporte a transações distribuídas

❑ Java Transaction Architecture/Service – Comunicação possível com aplicações não-Java – Implementa o OTS – Independente de plataformas – Serviço padronizado – Suporte a transações distribuídas

Page 25: Desconstruindo EJB

Tecnologias de Transações

❑ Transações baseadas no mecanismos de persistência (ex. JDBC, JDO) – Não suporta distribuição

❑ Transações FIC – Solução CESAR que atendeu a demanda de muitos

sistemas

Page 26: Desconstruindo EJB

Persistência

❑ Ponto mais fraco de Enterprise Java Beans – Relacionamentos gerenciados pelo container

extremamente restritivo. No final implementamos os relacionamentos manualmente (EJB 2.0)

– Linguagem de consulta padronizada não atende ao mínimo (ex. falta funções de ordenação, agregação e para manipulação de datas)

– O mapeamento CMP não é portável. – Portabilidade com baixo custo é uma lenda. As

poucas ferramentas que tentam converter sempre perdem informações depois da conversão

❑ Existem diversas soluções maduras para mapeamento objeto/relacional

Page 27: Desconstruindo EJB

Tecnologias de persistência

❑ Object/Relational Mapping Tool – Exolab Castor (free) – Hibernate (free) – Jakarta ObJectRelationalBridge (OJB) (free) – ObjectMatter VBSF O/R Mapping Tool – WebGain TopLink – Thought Cocobase

❑ Java Data Objects (JDO) – Pode resolver o problema da falta de um padrão Java

para mapeamento objeto-relacional – Algumas ferramentas de mapeamento já começaram

a se adequar a este padrão

Page 28: Desconstruindo EJB

Estimativa de Esforço

❑ Comparativo com Modelo 01 (EJB), Modelo 02 (Arquitetura 1) e Modelo 05 (Reaact – VBSF)

Caso de uso

Modelo 01 EJB

Modelo 02 Arquit. 1

Modelo 05 Reaact

Novo Modelo

Simples 2 1,5 1 1

Médio 4 3 2 2

Complexo 7 5 4 4

Muito Complexo

10 7 5,20 5,20

Page 29: Desconstruindo EJB

Conclusão

❑ Enterprise Java Beans não resolve todos os nossos problemas com baixo custo

❑ Com pequenas mudanças podemos: – Não ficar presos a uma tecnologia – Melhorar mais a produtividade – Não comprometer em nada aspectos de

escalabilidade (provavelmente até podemos melhorar nesse aspecto)

❑ Estamos fazendo um esforço no sentido de elaborar uma alternativa ao EJB já para o projeto SIMAC