Cliente do aplicativo usando anotação @EJB e Maven no Glassfish

Existe um exemplo no site do NetBeans sobre como criar o Application Client usando projetos simples (sem o Maven). Existem 4 projetos necessários (EJB, EAR, Lib, Program). Este tutorial é simples e funciona perfeitamente.

Eu quero perguntar como fazer o mesmo com o Maven? Eu não consigo obter todas as dependencies corretamente assim quando eu tento chamar o método EJB, ele me dá NullPointerException . Alguém pode me dizer, os principais passos (preferidos usando o NetBeans) que precisa ser feito? Porque estou confuso sobre quantos projetos precisam ser criados? Eu sei, que eu preciso de projetos de aplicativos, EAR e EJB e é isso? Quais configurações especiais precisam ser gravadas nesses arquivos pom.xml?

EDIT1:

Eu não quero explícito JNDI Eu quero ser capaz de usar annotations @EJB.

Aqui estão os passos:

  1. Crie a biblioteca Java Class para manter a class de interface usando a pasta Maven do menu New Project. Escolha o aplicativo Java na pasta Maven.
  2. Crie o aplicativo corporativo seguindo o tutorial do NB. A única diferença é que você tem que usar a pasta Maven do menu New Project
  3. Construa a biblioteca de classs
  4. Assegure-se de que a biblioteca de classs seja uma dependência no Aplicativo Corporativo.
  5. Execute o aplicativo Enterpise. NB irá implantá-lo no servidor GF
  6. Crie o Application Client usando a pasta do Maven. Não use o recurso de inserir código NB para injetar o EJB sem estado aqui, porque ele trava (pelo menos na minha versão: NB 7.2). Em vez disso, basta copiar e colar o código mostrado no tutorial. Você não precisa de nenhum descritor de implantação / ejb.
  7. Modifique o POM do aplicativo cliente para usar o maven-assembly-plugin para obter um jar com dependencies. Se você não seguir essa etapa, a implementação falhará porque o GF não consegue carregar a class de interface. Adicione as seguintes linhas à guia plugins (altere a class principal conforme apropriado):

       maven-assembly-plugin 2.4   jar-with-dependencies    com.entapp.entappclient.Main      make-assembly package  single     
  8. Construa o projeto do cliente de aplicativo com o NB

  9. Execute o aplicativo cliente usando o comando do cliente de aplicativo do GF: appclient -jar EntAppClient-1.0-SNAPSHOT-jar-with-dependencies.jar

Link Útil: Tesouro Enterrado do Java EE: o Recipiente do Aplicativo Cliente por Jason Lee

Nota importante

Para implementar o cliente em outras JVMs, é necessário instalar o appclient em cada máquina cliente e configurar a propriedade do servidor de destino. O appclient parece ter uma estrutura muito complicada, que você não pode produzir simplesmente adicionando essas linhas (além dos artefatos de persistência do EclipseLink):

  org.glassfish.appclient gf-client 3.1.1 pom compile  

Adicionar esses artefatos ao cliente compila perfeitamente, mas o jar não funciona. E isso é compreensível, já que o arquivo sun-acc.xml está faltando (esse arquivo é necessário porque contém a propriedade target-server). Portanto, acho que a única maneira é usar o script package-appclient conforme a documentação vinculada .

Há um FAQ EJB útil que menciona sobre como usar o @EJB para acessar o EJB remoto usando o ejb-ref junto com o sun-web.xml ou agora é um glassfish-web.xml como o seguinte link: –

E se eu tiver várias instâncias do Appserver em execução e quiser acessar um componente EJB remoto entre elas?

Se você gostaria de comparar entre ejb-ref e ejb-local-ref , você pode ver mais informações em Qual é a relação entre @EJB e ejb-ref / ejb-local-ref?

Eu espero que isso possa ajudar.

    Intereting Posts