Pilhas 8 + EJB 3.1 + JTA + CDI + JPA 2?

Alguém pode me dizer se é atualmente possível “colar” um perfil Web Java EE 6 parcial no Jetty? Eu encontrei um monte de artigos sobre a integração de contêineres EJB 3 independentes, provedores JTA, etc, com versões mais antigas do Jetty, portanto, eu poderia fazer tudo funcionar em conjunto. Eu gostaria de montar um servlet 3.0 + CDI + EJB 3.1 + JTA (se necessário, tudo que eu realmente quero é o gerenciamento de transação declarativa) + JPA 2 ambiente Jetty 8 (ou Tomcat 7 se não houver alternativas Jetty estão disponíveis). Minhas perguntas são: pode ser feito? Alguém já conseguiu fazer isso? Quaisquer artigos sobre como obter OpenEJB, Atomikos, Weld, EclipseLink e Jetty (ou qualquer outro stack semelhante) trabalhando juntos? Qualquer mágica pom.xml “fazer tudo” arquivos lá fora?

PS: Sim, eu sei que poderia usar o GlassFish (que eu gosto muito). Estou apenas imaginando como seria difícil conseguir algo semelhante trabalhando com um Contêiner de Servlet e como os dois ambientes se compariam em termos de complexidade, desempenho, tamanho, velocidade de implantação, consumo de resources de hardware etc.

Eu descreveria isso como ainda nos estágios iniciais, mas aqui está o que temos até agora:

http://svn.apache.org/repos/asf/openejb/trunk/openejb3/assembly/openejb-jetty/

Note que o Apache TomEE vive em um caminho similar, ou seja, ‘assembly / openejb-tomcat’. O plano é chamar a versão Jetty do Apache JetSet e tê-la totalmente integrável. A maioria das pessoas com commit está atualmente trabalhando para que o Apache TomEE seja oficialmente certificado pelo Java EE 6 Web Profile. Eu descreveria esse trabalho para estar nos últimos estágios. Temos uma ótima configuração no Amazon EC2 para executar o perfil da web TCK contra o TomEE usando cem instâncias spot EC2 t1.micro. É bem legal. O contrato do TCK com o Apache e o Oracle não nos permite compartilhar o access publicamente. No entanto, qualquer committer do Apache pode assinar um NDA para obter access.

Ok, então eu menciono tudo sobre o TomEE porque o plano é assim que terminarmos com a versão do Tomcat, para fazer tudo de novo com o Jetty (JetSet). Muitos de nós, commiters, eu e Jonathan Gallimore, por exemplo, preferimos o Jetty por uma grande margem. Mas como o código de integração do Tomcat estava muito mais avançado e tinha mais usuários, decidimos apenas finalizá-lo primeiro. Existe uma quantidade incrível de trabalho que não é específica do Tomcat e que poderemos utilizar na versão do Jetty; obtendo access ao TCK legalmente, os montes de código para executá-lo, mais montes de código para automatizá-lo e vários bits de integração que são genéricos e não específicos do Tomcat.

Tudo o que disse, não há razão para que os outros tenham que esperar para trabalhar em uma versão do Jetty só porque a maioria de nós ainda está terminando a versão do Tomcat. Os projetos do Apache devem ser vistos como indivíduos trabalhando juntos, não empresas como Oracle ou Redhat ou VMWare. Isso pode ser bom e ruim. A parte boa é que se você ou qualquer outra pessoa quiser hackear a versão do Jetty, você pode fazer isso agora. Você terá que enviar patches por algum tempo até que você ganhe commit, mas ter alguém que faça o comando commit atual não é tão ruim assim. Se você começar pequeno e permanecer ativo e aberto, geralmente é muito fácil ganhar commit. A chave para obter patches rapidamente é um stream constante de patches de tamanho pequeno a moderado. Qualquer passo para a frente ou para os lados sem passos para trás é um bom remendo na minha opinião. Desde que as pessoas possam ver para onde você está indo, é bom o suficiente. Certamente mais Ágil do que a abordagem de um único grande patch e permite que toda a magia realmente divertida e colaborativa aconteça ao longo do caminho.

Alguns tópicos que seriam bons lugares para dizer olá. O primeiro passo é apenas dizer olá. Não é necessário ter código na mão para falar na lista de desenvolvedores ou ser levado a sério:

http://openejb.979440.n4.nabble.com/Jetty-Integration-td1457408.html http://openejb.979440.n4.nabble.com/Jetty-Integration-td2318962.html

O Tomcat tem essa pilha implementada em um servidor chamado TomEE (anteriormente TomTom).

Estes são os componentes que usa.

Connector Apache Geronimo Connector CDI Apache OpenWebBeans EJB Apache OpenEJB Javamail Apache Geronimo JavaMail JPA Apache OpenJPA JSF Apache MyFaces JSP Apache Tomcat JSTL Apache Tomcat JTA Apache Geronimo Transaction Servlet Apache Tomcat 

Tanto quanto Jetty eu não tenho certeza. OpenEJB é sua única opção para EJB fora de um contêiner JavaEE6 (AFAIK) e não tenho certeza se o Jetty é 100% testado com isso. Para o CDI, você sempre pode usar algo como o Seam.

Na minha opinião, acredito que o framework Spring seria sua melhor opção para o contêiner Jetty (que é apenas a minha opinião embora). Na minha experiência depois de tentar fazer com que o Tomcat trabalhasse com o Open EJB, o Spring é muito mais fácil de configurar.

Você também precisa lembrar que o Open EJB não implementa toda a pilha do EJB 3.1 neste momento.

O Open EJB também não é testado no Tomcat 7. Então você tem que ficar com o Tomcat 6 se você seguir esse caminho.

O OpenEjb não lançou uma versão com suporte a JPA2, embora sua versão de desenvolvimento suporte o AFAIK do JPA2. Estou usando o OpenEjb incorporado no Jetty6, porque ainda não consegui fazer meu aplicativo funcionar em novos jetties. Eu acho que há um trabalho em andamento para obter um OpenEJB totalmente integrado ao Jetty como o TomEE, mas isso pode estar um pouco distante.

O Geronimo é uma pilha J2EE completa que é executada em cima do Jetty.

Há um documento sobre sua configuração em https://cwiki.apache.org/GMOxDOC30/configuring-virtual-host-in-jetty.html