Por que as bibliotecas não funcionam fora do ambiente do servidor de aplicativos?
Na verdade, eles podem. A maioria das bibliotecas pode ser usada diretamente autônoma (em Java SE) ou incluída em um .war (quase sempre é o Tomcat). Algumas partes do Java EE, como JPA, têm seções explícitas em suas respectivas especificações que informam como devem funcionar e ser usadas no Java SE.
Na verdade, não é tanto um ambiente de servidor de aplicativos em si que está em jogo aqui, mas a presença de todas as outras bibliotecas e o código de integração que as une.
Por causa disso, as anotações serão varridas apenas uma vez para todas as suas classes, em vez de cada biblioteca (EJB, JPA, etc) fazendo essa varredura repetidamente. Também por causa disso, as anotações CDI podem ser aplicadas aos beans EJB e os gerenciadores de entidade JPA podem ser injetados neles.
Por que preciso de algo enorme como JBoss apenas para compilar um código simples para enviar um e-mail?
Existem algumas coisas erradas com esta pergunta:
- Para compilar, você só precisa do jar da API, que está abaixo de 1 MB para o Perfil da Web e um pouco mais de 1 MB para o perfil completo.
- Para rodar você obviamente precisa de uma implementação, mas "massivo" é um exagero. O OpenJDK, por exemplo, tem cerca de 75 MB e o TomEE (uma implementação de Perfil da Web que contém suporte para correio) tem apenas 25 MB. Mesmo GlassFish (uma implementação de perfil completo) tem apenas 53 MB.
- O Mail funciona perfeitamente no Java SE (e, portanto, no Tomcat), bem como usando o mail.jar e o activation.jar independentes .
Por que as bibliotecas Java EE não são "padrão" e estão incluídas no download JVM regular e / ou SDK?
O Java EE, de certa forma, foi uma das primeiras tentativas de dividir o já enorme JDK em blocos que são mais fáceis de gerenciar e baixar. As pessoas já estão reclamando que as classes gráficas (AWT, Swing) e Applets estão dentro do JRE quando tudo o que fazem é executar alguns comandos em um servidor headless. E então você também deseja incluir todas as bibliotecas Java EE no JDK padrão?
Com o eventual lançamento do suporte à modularidade, teremos apenas um pequeno JRE básico com muitas coisas instaláveis separadamente como pacotes. Talvez um dia muitas ou mesmo todas as classes que agora compõem o Java EE também o sejam. O tempo vai dizer.
Por que existem tantas ofertas de Java EE quando, na verdade, existem apenas dois tipos principais de Java padrão (Oracle JVM / SDK | OpenJDK JVM / JDK)?
Existem mais do que apenas dois tipos de Java SE. Há pelo menos o IBM JDK, o BEA anterior (JRocket, que está sendo incorporado ao Oracle / Sun por causa da aquisição), várias outras implementações de código aberto e uma série de implementações para uso integrado.
A razão por trás do Java SE e EE serem uma especificação é que muitos fornecedores e organizações podem implementá-lo e, portanto, incentiva a competição e mitiga o risco de dependência do fornecedor.
Realmente não é diferente com compiladores C e C ++, onde você tem muitas ofertas concorrentes, todas aderindo ao padrão C ++.
Por que a versão da biblioteca Java EE não está em sincronia com os lançamentos da biblioteca Java padrão (Java EE 6 vs. Java 7)
O Java EE é baseado no Java SE, portanto, fica para trás. No entanto, as versões correspondem. Java EE 5 requer Java SE 5. Java EE 6 requer Java SE 6 e assim por diante. Acontece que principalmente quando o Java SE X é atual, o Java EE X-1 é atual.