Java EE – quem implementa a especificação?

Eu tenho alguma experiência em Java e Java EE. Eu li as várias perguntas no SO para entender exatamente o que é Java EE? E poucas respostas em SO são: what-exactly-is-java-ee , what-is-java-ee

Tenho algumas duvidas:

1) Se o Java EE é apenas uma especificação, quem os implementa? Os servidores de aplicativos (como JBOSS, GlassFish) implementam essas especificações?

2) Se eu estiver correto, a especificação EJB é implementada pelo contêiner EJB e acredito que o EJB Container seja parte do Application Server. Agora, quando nós, como desenvolvedores, escrevemos um código EJB, o que estamos realmente fazendo? A dúvida que tenho é que o contêiner EJB implementa a especificação EJB, então estamos sobrescrevendo algumas “partes de especificação” do EJB? Como é que alguma parte do EJB é implementada pelo contêiner EJB e alguma coisa que os desenvolvedores estão escrevendo? OU é que alguma parte do EJB deve ser fornecida pelo contêiner EJB e alguma parte a ser desenvolvida pelos desenvolvedores? Estou tendo dificuldade em entender isso.

Por favor, alguém pode ajudar a entender isso?

Qualquer um pode implementar a especificação java ee ( JSR342 ), ou qualquer jsr que faça parte dela. Quando o fizerem, podem (depois de comprar e passar no Compatibility Test Suite ) ser compatíveis com a especificação. Há vários fornecedores com seus servidores de aplicativos compatíveis com o Java ee , mas nenhum fornecedor implementa a especificação Java ee completa. Por exemplo, glassfish (a implementação de referência java ee) usa a implementação CDI da Red Hat. Às vezes, o fornecedor não implementa nenhuma parte da especificação Java ee, eles pegam glassfish, adicionam suas bibliotecas específicas de fornecedor e o liberam sob seu nome. Para reivindicar a compatibilidade, eles ainda precisam passar pelo processo de certificação e executar o CTS.

Descobrir todos os fornecedores que implementam a especificação não é tão fácil, pois nem todos passam pelo processo de certificação. Por exemplo, o Apache CXF não é certificado por si só, mas é certificado como parte do JBoss da Red Hat.

Cada especificação tem uma API e um pdf escrito, os quais definem o comportamento obrigatório de cada implementação. Isso é o que você usa quando escreve o código EJB. Por exemplo, quando você cria um ejb:

import javax.ejb.Singleton; @Singleton public class MySingleton{ ... } 

A anotação @Singleton é parte da especificação, mas a class MySingleton é seu código EJB, não faz parte da especificação. O contêiner EJB sabe o que fazer com a class.

Nos casos de especificações Java (Java EE, JSF, outros JSRs) você normalmente tem uma implementação de referência criada durante a elaboração da especificação (Glassfish no caso do Java EE), então você tem outros provedores que podem criar sua própria implementação da especificação alegando que é “melhor” de alguma forma).

Você, como desenvolvedor, escreve código que pode usar os resources fornecidos pela especificação, que seriam executados corretamente em qualquer implementação compatível.

Sim, os fornecedores de contêiner (servidor de aplicativos) EJB, como o RedHat, implementam a especificação J2EE em seus produtos (como o JBoss).

O que eles não fazem é implementar qualquer lógica de negócios (apenas o “encanamento” se você quiser). É aí que entram os desenvolvedores de aplicativos.

Assim como o Apache HTTPD ou nginx implementam a especificação do protocolo HTTP, mas isso não faz um site.

Qualquer um pode implementar a especificação J2EE, embora eu não recomende que você tente fazer isso sozinho. Você está certo, isso geralmente é implementado por servidores de aplicativos para que você possa executar seu aplicativo em um contêiner compatível com J2EE. Há também bibliotecas de código aberto, que, quando combinadas e adicionadas ao Tomcat, implementam a especificação (por exemplo, tomee).

Quando você escreve seu aplicativo, você está utilizando os benefícios do ambiente J2EE, que lhe permitirá escrever aplicativos complexos e focar nas necessidades de seus requisitos específicos.

1) Servidores de Aplicação implementam a especificação e, ao liberar seus servidores, eles fornecerão os detalhes de sua implementação. Para uma referência, por favor, olhe para este link , que especifica as várias JSR implementadas pelo JBOSS 7.

2) Quando estamos apenas usando qualquer implementação fornecida pelo servidor de aplicativos, a instância será retirada da implementação fornecida pelo servidor. Considerando que, se tivermos substituído uma class, nossa class substituída será fornecida em nossas operações.

    Intereting Posts