Dear ranchers:
I have this web application (SoftBudgetWeb.war), which references ejbs in two
EJB jars, SoftBudgetEJB.jar and SignonEJB.jar. Also, SoftBudgetEJB.jar refrences ejbs in SignonEJB.jar via annotations.
I'm deploying them as separate modules instead of all in one ear on glassfish v2.
SignonEJB deploys ok and so does SoftBudgetEJB.
When I try to deploy SoftBudgetWeb I get the following error:
Unresolved <ejb-link>: signon.SignonEJB
Exception occured in J2EEC Phasejava.lang.RuntimeException: Error: Unresolved <ejb-link>: signon.SignonEJB
com.sun.enterprise.deployment.backend.IASDeploymentException: Error loading deployment descriptors for module [SoftBudgetWeb] -- Error: Unresolved <ejb-link>: signon.SignonEJB
at com.sun.enterprise.deployment.backend.Deployer.loadDescriptors(Deployer.java:390)
at com.sun.enterprise.deployment.backend.ModuleDeployer.loadDescriptors(ModuleDeployer.java:423)
at com.sun.enterprise.deployment.backend.WebModuleDeployer.deploy(WebModuleDeployer.java:157)
at com.sun.enterprise.deployment.backend.ModuleDeployer.doRequestFinish(ModuleDeployer.java:179)
at com.sun.enterprise.deployment.phasing.J2EECPhase.runPhase(J2EECPhase.java:191)
at com.sun.enterprise.deployment.phasing.DeploymentPhase.executePhase(DeploymentPhase.java:108)
at com.sun.enterprise.deployment.phasing.PEDeploymentService.executePhases(PEDeploymentService.java:919)
at com.sun.enterprise.deployment.phasing.PEDeploymentService.deploy(PEDeploymentService.java:279)
at com.sun.enterprise.deployment.phasing.PEDeploymentService.deploy(PEDeploymentService.java:788)
at com.sun.enterprise.management.deploy.DeployThread.deploy(DeployThread.java:187)
at com.sun.enterprise.management.deploy.DeployThread.run(DeployThread.java:223)
Caused by: java.lang.RuntimeException: Error: Unresolved <ejb-link>: signon.SignonEJB
at com.sun.enterprise.deployment.util.EjbBundleValidator.accept(EjbBundleValidator.java:530)
at com.sun.enterprise.deployment.WebBundleDescriptor.visit(WebBundleDescriptor.java:1406)
at com.sun.enterprise.deployment.archivist.WebArchivist.validate(WebArchivist.java:188)
at com.sun.enterprise.deployment.archivist.ApplicationArchivist.openArchive(ApplicationArchivist.java:790)
at com.sun.enterprise.deployment.archivist.ApplicationArchivist.openArchive(ApplicationArchivist.java:744)
at com.sun.enterprise.deployment.backend.Deployer.loadDescriptors(Deployer.java:349)
I'm not using annotations in my Web module and I declare references to ejbs in web.xml and sun-web.xml.
Here are my <ejb-ref>s in my web.xml:
<ejb-ref>
<ejb-ref-name>ejb/SignonEJB</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home/>
<remote>br.com.pedrasoftware.signon.ejb.SignonEJB</remote>
</ejb-ref>
<ejb-ref>
<ejb-ref-name>ejb/BudgetManagerEJB</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home/>
<remote>br.com.pedrasoftware.softbudget.ejb.BudgetManagerEJB</remote>
</ejb-ref>
<ejb-ref>
<ejb-ref-name>ejb/TransactionManagerEJB</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home/>
<remote>br.com.pedrasoftware.softbudget.ejb.TransactionManagerEJB</remote>
</ejb-ref>
<ejb-ref>
<ejb-ref-name>ejb/NamedTxManagerEJB</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home/>
<remote>br.com.pedrasoftware.softbudget.ejb.NamedTxManagerEJB</remote>
</ejb-ref>
<ejb-ref>
<ejb-ref-name>ejb/CategoryManagerEJB</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home/>
<remote>br.com.pedrasoftware.softbudget.ejb.CategoryManagerEJB</remote>
</ejb-ref>
<ejb-ref>
<ejb-ref-name>ejb/FundManagerEJB</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home/>
<remote>br.com.pedrasoftware.softbudget.ejb.FundManagerEJB</remote>
</ejb-ref>
and in my sun-web.xml:
<ejb-ref>
<ejb-ref-name>ejb/BudgetManagerEJB</ejb-ref-name>
<jndi-name>br.com.pedrasoftware.softbudget.ejb.BudgetManagerRemote</jndi-name>
</ejb-ref>
<ejb-ref>
<ejb-ref-name>ejb/CategoryManagerEJB</ejb-ref-name>
<jndi-name>br.com.pedrasoftware.softbudget.ejb.CategoryManagerRemote</jndi-name>
</ejb-ref>
<ejb-ref>
<ejb-ref-name>ejb/FundManagerEJB</ejb-ref-name>
<jndi-name>br.com.pedrasoftware.softbudget.ejb.FundManagerRemote</jndi-name>
</ejb-ref>
<ejb-ref>
<ejb-ref-name>ejb/NamedTxManagerEJB</ejb-ref-name>
<jndi-name>br.com.pedrasoftware.softbudget.ejb.NamedTxManagerRemote</jndi-name>
</ejb-ref>
<ejb-ref>
<ejb-ref-name>ejb/SignonEJB</ejb-ref-name>
<jndi-name>br.com.pedrasoftware.signon.ejb.SignonRemote</jndi-name>
</ejb-ref>
<ejb-ref>
<ejb-ref-name>ejb/TransactionManagerEJB</ejb-ref-name>
<jndi-name>br.com.pedrasoftware.softbudget.ejb.TransactionManagerRemote</jndi-name>
</ejb-ref>
here's how I annotate SignonEJB to call it signon.SignonEJB:
@Stateless (name="signon.SignonEJB")
public class SignonEJB implements SignonRemote, SignonLocal{
here is my annotation on an ejb in SoftBudgetEJB, which references SignonEJB:
@Stateless (name="softbudget.FundManagerEJB")
@EJB (name="ejb/SignonLocal",
beanInterface=SignonLocal.class,
beanName="signon.SignonEJB",
mappedName="br.com.signon.ejb.SignonLocal")
public class FundManagerEJB implements FundManagerRemote {
@PersistenceContext (unitName="SoftBudgetPU")
private EntityManager manager;
@EJB (name="ejb/SignonLocal")
private SignonLocal signon;
Could anyone help please?