EJB / Herança

Site do TopLink na OTN:
http://otn.oracle.com/products/ias/toplink/content.html

Starting Guide:
http://otn.oracle.com/docs/products/ias/doc_library/903doc_otn/toplink.903/b10061/toc.htm

Tutoriais:
http://otn.oracle.com/docs/products/ias/doc_library/903doc_otn/toplink.903/b10062/toc.htm

QuickTour:
http://otn.oracle.com/products/ias/toplink/quicktour/index.htm

Demonstrações:
http://otn.oracle.com/products/ias/toplink/mwdemos/content.html

Vale ressaltar que o TOPLINK é uma camada de persistência que trabalha com qualquer banco de dados em qualquer servidor de aplicacoes J2EE.
[ ] ´s

Valeu, Adriano :wink:

Bom.

O foco dessas qualidades sistêmicas é avaliar a saude de um sistema. A J2EE foca disponibilizar serviços amigavelmente para suportar os niveis de qualidade exigidos para que um sistêma esteja saudável e aceitável para os “stakeholders”.

Portanto, sem fugir do tópico de Herança, o uso de EJBs se faz necessário em alguns sistemas e em outros não seriam indicados ( depende do tamano e capacidade desejados ). É por isso que hoje existem 6 tipos de EJBs.

Como todo framework, tem seus benefícios, custos e limitações. A Herança em EJBs é uma dessas limitações. O maiores benefícios são, segurança, diminuição da complexiade transacional e failover. Acho que para se ter esses benefícios, vale a pena ter um desenvolvimento mais complexo, e até para pagar melhor o desenvolvedores. O mercado paga bem melhor quem conhece EJB ao invés de quem conhece Hibernate, Struts e Prevlayer. Que coisa???

Entretanto, todo sistema distribuido, relacionado a BI (B2B, B2C, C2C, EDI, e etc) pode usar EJBs para implementar a solução com uma qualidade desses serviços em nível ótimo, sem esquecer de todo o suporte dos J2EE Containers (WEB e EJB). Até porque essas aplicações vão ser suportadas pelos robustos AppServers (SunOne, WebSphere, Oracle, WebLogics, etc). Quem investiu nessas ferramentas, espera obter o melhor delas, e para isso o uso do EJBs se faz necessário. Sem herança, é claro.

E a discussão não é se EJB é bom… Mas se herança é indicado? A respota é não. Pode ser feita, com alguma restrições, mas não é bom. Vários autores pregam o uso da Agregação ou Composição ao invés de se usar herança, e assim ter modelos menos complexo, mais flexiveis e mais orientados a serviços. Outra ironia… EJBs foram desenhados para prover serviços de negócios e não ser o negócio. Mais um ponto pelo qual a herança não é indicada.

Para finalizar, eu sempre indico que os técnicos façam treinamentos específicos antes de lidar com tecnologia. Basta ver a quantidade de posts com dúvidas tão básicas que são feitas no nosso forum todos os dias. Isso porque as pessoas insistem em começar a usar sem antes conhecer. Sabe qual o maior mal do brasileiro? Usar a TV sem antes ler o manual. Isso é ruim, cria gaps de conhecimento e durante o processo de construção de um sistema pode ser desastrozo.

[Propaganda sobre os cursos da Sun cortada pelo moderador]

Um bom trabalho a todos.

Acho injusto a censura sobre o meu topico… Toda opnião aqui deveria ser respeitada garantindo nosso direito de expressão…

Não estava fazendo propaganda, até porque não ganho comissão.

Essa atitude por parte do moderador vai no mínimo contra aos propósitos do forum, que é criar um debate construtivo e compartilhado de conhecimento.

Que fique registrado meu voto de descontentamento.

Um bom artigo sobre o tema,

o interessante desse artigo eh que o cara eh claro, sem deixar o EGO dele atrapalhar na resposta! :x

http://www.onjava.com/pub/a/onjava/2002/09/04/ejbinherit.html

Pra bom entendedor…

Abraco a todos.

Pessoal,

Desculpe se escrevi no local errado ou com a formatação errada. Esta é minha primeira mensagem para este grupo.
Eu nunca fiz curso algum na Sun, portanto acho que estou na categoria dos despreparados, segundo o Oziel. Mas como tenho 18 anos de experiência em Informática, 5 anos de experiência em Java e mais de 60 artigos publicados em revistas sobre o tema, acho que vou dar meu palpite mesmo assim.

Herança nada têm a ver com a velocidade de um sistema. O Websphere implementa herança em EJBs (inclusive com polimorfismo), sem queda de performance perceptível. Eu testei. Não estou falando o que ouví.

Também não vejo o que têm a ver a falta de herança com qual a camada em que os EJBs estão situados. Existe alguma regra para adotar herança ou não em cada uma das camadas ?

Se discutir a falta de herança nos EJBs for falta de preparo para a tecnologia EJBs, acho que existe um mundo de pessoas por aí que não conhecem nada (inclusive eu). Existem pelo menos umas 10 listas de discussão espalhadas pelo mundo falando sobre o tema, em sites respeitáveis. Aceitar cegamente as palavras que um fabricante prega faz com que não vejamos com clareza a verdade.
A função dos consultores e especialistas deveria ser não vender a posição de um fabricante, mas sim mostrar os prós e contras para o cliente

Meu palpite é que a opção por não implementar herança foi simplesmente para facilitar o mecanismo de distribuição. Se um EJB não têm filho, não corremos o risco de colocar o EJB pai em uma máquina e o EJB filho em outra. Adotar algo mais próximo dos componentes faz com que os componentes fiquem mais soltos (minha opinião).

Realmente a maioria dos especialistas sugere a adoção de composição (e não agregação) ao invés de herança. Mas isto não é unanimidade.
O que se prega é que a herança pode quebrar o princípio do encapsulamento. Se você está utilizando uma classe filha em um sistema, e por alguma razão altera a classe pai, você pode arrebentar com o comportamento da filha, decorrente desta alteração. Isto fere o princípio do encapsulamento. O que se sugere é instanciar o pai, e colocá-lo como composto dentro do filho (sim, porque cada filho terá sua instância de pai, e portanto não pode ser uma agregação). Cada vez que você precisar chamar um código do pai, o faz através de delegação. Supondo que os códigos do filho estejam criados de uma forma apropriada, o código fica mais robusto. Feiérrimo, mas é o recomendado.

Por último, os JDOs foram criados como resposta para uma infinidade de empresas que não necessitam dos mecanismos de distribuição e nem segurança dos EJBs, mas eram obrigados a ter o overhead por falta de um outro padrão.
Existe uma grande quantidade de empresas que estão adotando EJBs, quando este não deveria ser o caso. Leiam o artigo do Martin Fowler (que deve estar também na categoria dos despreparados), que fala exatamente sobre este problema http://www.sdmagazine.com/documents/sdm0304a/

Gostaria de deixar claro que não sou contra os EJBs
Um abraço a todos desta lista.

Somente para responder a pergunta original, existe um artigo sobre herança em EJBs no endereço http://www.onjava.com/pub/a/onjava/2002/09/04/ejbinherit.html
No final do artigo o autor diz que pode funcionar em um servidor e não funcionar em outros. Se você quizer fazer códigos portáveis, acho que deve evitar utilizar esta idéia.