Erro deploy módulo EJB - Glassfish v2.1 / Netbeans 6.5

Olá pessoal. Estou tendo um sério problema para fazer o deploy de uma aplicação Web pelo Netbeans 6.5. Já tentei diversas soluções (reinstalar o NetBeans, criar novos projetos…) mas o problema persiste.

Primeiro, vou dar as informações sobre o ambiente:

  • Ubuntu Linux 8.10 64-bit
  • Glassfish v2.1
  • Netbeans 6.5
  • Java 1.6.0 u11

Sobre os projetos e suas bibliotecas:

  • sgp-ejb (EJB’s);

    • lib\sgp-lib.jar
    • lib\sscore.jar
  • sgp-war (WEB);

    • lib\sgp-lib.jar
    • lib\sscore.jar
    • lib\sgp-ejb.jar
  • sgp-app-client (Swing);

    • lib\sgp-lib.jar
    • lib\sscore.jar
    • lib\sgp-ejb.jar
  • sgp-lib

  • sscore

Os três projetos principais (ejb, war e app-client) faziam parte de um Enterprise Application, mas diversos erros começaram a ocorrer com o EAR (não conseguia fazer o deploy do módulo ejb), e na falta de conseguir uma solução acabei desmembrando-os. Agora, eu consigo fazer o deploy dos EJB’s e a aplicação Swing faz o acesso a eles perfeitamente (usando apenas as interfaces remotas via RMI/IIOP sem o uso da annotation @EJB).

Não consigo fazer o deploy somente do projeto SGP-WAR (Web). Se eu fizer um “Clean & Build” tudo corre normalmente, o erro acontece apenas ao tentar fazer o deploy (detalhe: o EJB já está funcionando):

[code]# Cannot resolve reference Unresolved Ejb-Ref com.sssistemas.sgp_ejb.R003_PesquisaBean/r001_SessionBean@jndi: @null@com.sssistemas.sgp_ejb.R001_SessionLocal@Session@null

Exception occured in J2EEC Phasejava.lang.RuntimeException: Cannot resolve reference Unresolved Ejb-Ref com.sssistemas.sgp_ejb.R003_PesquisaBean/r001_SessionBean@jndi: @null@com.sssistemas.sgp_ejb.R001_SessionLocal@Session@null

com.sun.enterprise.deployment.backend.IASDeploymentException: Error loading deployment descriptors for module [sgp-war] – Cannot resolve reference Unresolved Ejb-Ref com.sssistemas.sgp_ejb.R003_PesquisaBean/r001_SessionBean@jndi: [/code]

Aqui está o trace completo:

deployed with moduleid = sgp-ejb **RemoteBusinessJndiName: ejb/R002_UsuarioBean; remoteBusIntf: com.sssistemas.sgp_ejb.R002_UsuarioRemote **RemoteBusinessJndiName: ejb/R001_SessionBean; remoteBusIntf: com.sssistemas.sgp_ejb.R001_SessionRemote **RemoteBusinessJndiName: ejb/R003_PesquisaBean; remoteBusIntf: com.sssistemas.sgp_ejb.R003_PesquisaRemote **RemoteBusinessJndiName: ejb/R004_ProjetoBean; remoteBusIntf: com.sssistemas.sgp_ejb.R004_ProjetoRemote LDR5010: All ejb(s) of [sgp-ejb] loaded successfully! Cannot resolve reference Unresolved Ejb-Ref com.sssistemas.sgp_ejb.R003_PesquisaBean/r001_SessionBean@jndi: @null@com.sssistemas.sgp_ejb.R001_SessionLocal@Session@null Exception occured in J2EEC Phasejava.lang.RuntimeException: Cannot resolve reference Unresolved Ejb-Ref com.sssistemas.sgp_ejb.R003_PesquisaBean/r001_SessionBean@jndi: @null@com.sssistemas.sgp_ejb.R001_SessionLocal@Session@null com.sun.enterprise.deployment.backend.IASDeploymentException: Error loading deployment descriptors for module [sgp-war] -- Cannot resolve reference Unresolved Ejb-Ref com.sssistemas.sgp_ejb.R003_PesquisaBean/r001_SessionBean@jndi: @null@com.sssistemas.sgp_ejb.R001_SessionLocal@Session@null at com.sun.enterprise.deployment.backend.Deployer.loadDescriptors(Deployer.java:406) at com.sun.enterprise.deployment.backend.ModuleDeployer.loadDescriptors(ModuleDeployer.java:426) at com.sun.enterprise.deployment.backend.WebModuleDeployer.deploy(WebModuleDeployer.java:160) at com.sun.enterprise.deployment.backend.ModuleDeployer.doRequestFinish(ModuleDeployer.java:182) at com.sun.enterprise.deployment.phasing.J2EECPhase.runPhase(J2EECPhase.java:208) at com.sun.enterprise.deployment.phasing.DeploymentPhase.executePhase(DeploymentPhase.java:108) at com.sun.enterprise.deployment.phasing.PEDeploymentService.executePhases(PEDeploymentService.java:966) at com.sun.enterprise.deployment.phasing.PEDeploymentService.deploy(PEDeploymentService.java:283) at com.sun.enterprise.deployment.phasing.PEDeploymentService.deploy(PEDeploymentService.java:835) at com.sun.enterprise.management.deploy.DeployThread.deploy(DeployThread.java:187) at com.sun.enterprise.management.deploy.DeployThread.run(DeployThread.java:225) Caused by: java.lang.RuntimeException: Cannot resolve reference Unresolved Ejb-Ref com.sssistemas.sgp_ejb.R003_PesquisaBean/r001_SessionBean@jndi: @null@com.sssistemas.sgp_ejb.R001_SessionLocal@Session@null at com.sun.enterprise.deployment.util.EjbBundleValidator.accept(EjbBundleValidator.java:430) at com.sun.enterprise.deployment.WebBundleDescriptor.visit(WebBundleDescriptor.java:1415) at com.sun.enterprise.deployment.archivist.WebArchivist.validate(WebArchivist.java:188) at com.sun.enterprise.deployment.archivist.ApplicationArchivist.openArchive(ApplicationArchivist.java:840) at com.sun.enterprise.deployment.archivist.ApplicationArchivist.openArchive(ApplicationArchivist.java:794) at com.sun.enterprise.deployment.backend.Deployer.loadDescriptors(Deployer.java:365) ... 10 more

Alguém tem alguma idéia do que pode estar acontecendo?

Você está usando a anotação @EJB na aplicação war?

Diferentemente de aplicações stand-alone escritas em Swing, o NetBeans não dá suporte para acessar SessionBeans a partir de um projeto de aplicação Web que esteja fora de um Enterprise Application Project. Deve ser um problema do Netbeans, pois somente o fato de incluir o projeto EJB referenciado dentro do projeto Web - e não usar a referência de nenhuma classe ou interface - é suficiente para acusar o erro.

Solução: criar um projeto EA e colocar tudo dentro dele.