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:
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
Construa o projeto do cliente de aplicativo com o NB
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.