Getting Cannot resolve reference Local ejb-ref not

2019-07-04 08:55发布

I'm trying to figure out why I need to implement both of these interfaces in order to avoid deployment issues.

Java Code

ExamplePlanAssembler.java

@Local
public interface ExamplePlanAssembler {
   ExamplePlan toBO(ExamplePlanEntity entity);
}

ExtendedExamplePlanAssembler.java

@Local
public interface ExtendedExamplePlanAssembler 
extends ExamplePlanAssembler{
   ExtExamplePlan toBO(ExamplePlanEntity entity, ExtExamplePlanEntity extEntity);
}

ExtendedExamplePlanAssemblerImpl.java

@Stateless
public class ExtendedExamplePlanAssemblerImpl 
implements ExtendedExamplePlanAssembler {
   /* Method impls removed */
}

ExamplePlanServiceImpl.java

@Stateless
public class ExamplePlanServiceImpl 
implements ExamplePlanService {
   private ExamplePlanAssembler examplePlanAssembler ;
   @EJB
   public void setAssembler(ExamplePlanAssembler examplePlanAssembler) {
       this.examplePlanAssembler = examplePlanAssembler;
    }
}

Deployment Error

[#|.507-0500|SEVERE|gf3.1.2|javax.enterprise.system.tools.deployment.org.glassfish.deployment.common
|_ThreadID=83;_ThreadName=Thread-7;|Cannot resolve reference Local ejb-ref name=
com.myco.services.business.ExampleServiceImpl/examplePlanAssembler,Local 3.x interface =
com.myco.services.assembly.ExamplePlanAssembler,ejb-link=null,lookup=,mappedName=,jndi-name=,refType=Session|#]

[#|.508-0500|SEVERE|gf3.1.2|javax.enterprise.system.core.com.sun.enterprise.v3.server
|_ThreadID=83;_ThreadName=Thread-7;|Exception while deploying the app [mycoservicesear]|#]

[#|.508-0500|SEVERE|gf3.1.2|javax.enterprise.system.core.com.sun.enterprise.v3.server
|_ThreadID=83;_ThreadName=Thread-7;|Cannot resolve reference Local ejb-ref name=
com.myco.services.business.ExampleServiceImpl/examplePlanAssembler,Local 3.x interface =
com.myco.services.assembly.ExamplePlanAssembler,ejb-link=null,lookup=,mappedName=,jndi-name=,refType=Session
java.lang.RuntimeException: Cannot resolve reference Local ejb-ref name=
com.myco.services.business.ExampleServiceImpl/examplePlanAssembler,Local 3.x interface =
com.myco.services.assembly.ExamplePlanAssembler,ejb-link=null,lookup=,mappedName=,jndi-name=,refType=Session


[#|.516-0500|SEVERE|gf3.1.2|javax...gf.deployment.admin
|_ThreadID=83;_ThreadName=Thread-7;|Exception while deploying the app [mycoservicesear] : Cannot resolve reference Local ejb-ref name=
com.myco.services.business.ExampleServiceImpl/examplePlanAssembler,Local 3.x interface =
com.myco.services.assembly.ExamplePlanAssembler,ejb-link=null,lookup=,mappedName=,jndi-name=,refType=Session|#]

The Fix?!

If I change my interface impl to implement not only the ExtendedExamplePlanAssembler interface, but also the parent ExamplePlanAssembler interface, my deployment error disappears.

ExtendedExamplePlanAssemblerImpl.java (v2)

@Stateless
public class ExtendedExamplePlanAssemblerImpl 
implements ExtendedExamplePlanAssembler,  ExamplePlanAssembler{
   /* Method impls removed */
}

The Question

Why does adding the parent interface to my implements declaration resolve deployment issues?

2条回答
Summer. ? 凉城
2楼-- · 2019-07-04 09:26

you can not extend an interface I need you to try implementing the interface (you can implement both interfaces in the same bean class) but for now you need to replace the keyword "extends" with "implements"

@Local
public interface ExtendedExamplePlanAssembler 
 extends ExamplePlanAssembler{
  ExtExamplePlan toBO(ExamplePlanEntity entity, ExtExamplePlanEntity  extEntity);
}
查看更多
小情绪 Triste *
3楼-- · 2019-07-04 09:32

EJB Spec says so,

As an example, the client views exposed by a particular session bean are not inherited by a subclass that also happens to define a session bean.

@Stateless
public class A implements Foo { ... }
@Stateless
public class B extends A implements Bar { ... }

Assuming Foo and Bar are local business interfaces and there is no associated deployment descriptor, session bean A exposes local business interface Foo and session bean B exposes local business interface Bar, but not Foo.

Reference here. Section 4.9.2.1 of EJB3.1 Spec

查看更多
登录 后发表回答