You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomee.apache.org by Vamsavardhana Reddy <c1...@gmail.com> on 2008/08/07 17:00:17 UTC

EJB reference computed as Remote reference even though the business interface has no @Remote annotation

I am using DeploymentLoader to process an EJB3 annotated ejb jar and obtain
meta-data complete descriptors.  I am using @EJB annotation to inject a
session bean.  I am noticing that even though the business interface has no
@Remote annotation on it is resulting in an EjbRef rather than EjbLocalRef.
(I am examining the org.apache.openejb.jee.SessionBean object created).
Isn't EjbRef used for remote references?  If I specify @Local on the
business interface explicitly then it is resulting in EjbLocalRef.  Doesn't
absence of @Remote on the interface mean the interface is local?  Is this a
problem?  If not, what is the idea behind the way it is working now?

++Vamsi

Re: EJB reference computed as Remote reference even though the business interface has no @Remote annotation

Posted by David Blevins <da...@visi.com>.
]On Aug 7, 2008, at 8:00 AM, Vamsavardhana Reddy wrote:

> I am using DeploymentLoader to process an EJB3 annotated ejb jar and  
> obtain
> meta-data complete descriptors.  I am using @EJB annotation to  
> inject a
> session bean.  I am noticing that even though the business interface  
> has no
> @Remote annotation on it is resulting in an EjbRef rather than  
> EjbLocalRef.
> (I am examining the org.apache.openejb.jee.SessionBean object  
> created).
> Isn't EjbRef used for remote references?  If I specify @Local on the
> business interface explicitly then it is resulting in EjbLocalRef.   
> Doesn't
> absence of @Remote on the interface mean the interface is local?

The deployment descriptor is the ultimate authority so truthfully  
we're not exactly safe assuming that we should use EjbLocalRef when  
the interface is annotated with @Local.  For all intense purposes we  
don't know what kind of ref an @EJB to a 3.0 business interface will  
end up being until we resolve it and see how the referee classified  
that business interfaces.

> If not, what is the idea behind the way it is working now?

Right, so the way we have it now is that when in doubt we use the  
EjbRef.  We added a little non-xml field that allows us to flag it as  
ambiguous:

     @XmlTransient
     protected Type refType = Type.REMOTE;

     public Type getRefType() {
         return refType;
     }

So leaving the AnnotationDeployer, that method will return Type.REMOTE  
or Type.UNKNOWN.  Later on in the deployment chain when we resolve the  
reference to the target bean we potentially update that yet again to  
be Type.LOCAL.

-David