[jboss-user] [JBoss Microcontainer Users] - Re: How to get DeploymentUnit?
I've to implement a class as follows: | import java.lang.reflect.Type; | import javax.ejb.EJB; | import javax.naming.Context; | import javax.naming.InitialContext; | import javax.naming.NamingException; | import javax.ws.rs.ext.Provider; | import com.sun.jersey.core.spi.component.ComponentContext; | import com.sun.jersey.spi.inject.Injectable; | import com.sun.jersey.spi.inject.InjectableProvider; | | @Provider | public class EJBProvider implements InjectableProviderEJB, Type { | public InjectableObject getInjectable(ComponentContext componentCtx, | EJB ejbAnnotation, | Type type) { | if (!(type instanceof Class?)) | return null; | | Class? clazz = (Class?) type; | | String beanInterface = ejbAnnotation.beanInterface().getName(); | if (Object.class.getName().equals(beanInterface)) { | beanInterface = clazz.getName(); | } | | String jndiName = ???; // get jndi name via beanInterface | | Context ctx = null; | try { | ctx = new InitialContext(); | Object obj = ctx.lookup(jndiName); | | return new InjectableObject() { | public Object getValue() { | return obj; | } | }; | } | catch (NamingException e) { /* error handling */ } | finally { /* close ctx */ } | } | } So my 1st problem is: how to get the jndi name when the interface of an EJB is available? I was trying the following where I only would need the DeploymentUnit object. Perhaps there are alternatives. Any hint is highly appreciated! //import org.jboss.deployers.structure.spi.DeploymentUnit; | //import org.jboss.ejb3.common.resolvers.plugins.FirstMatchEjbReferenceResolver; | //import org.jboss.ejb3.common.resolvers.spi.EjbReference; | //import org.jboss.ejb3.common.resolvers.spi.EjbReferenceResolver; | | EjbReference ref = new EjbReference(ejbAnnotation.beanName(), | beanInterface, | ejbAnnotation.mappedName()); | EjbReferenceResolver resolver = new FirstMatchEjbReferenceResolver(); | | DeploymentUnit du = ???; // How to get DeploymentUnit? Via ClassLoader? | | String jndiName = resolver.resolveEjb(du, ref); | View the original post : http://www.jboss.org/index.html?module=bbop=viewtopicp=4266911#4266911 Reply to the post : http://www.jboss.org/index.html?module=bbop=postingmode=replyp=4266911 ___ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user
[jboss-user] [JBoss Microcontainer Users] - Re: How to get DeploymentUnit?
BTW, the whole deployment is in an EAR, the class EJBProvider (see above) is in a web module, and the referenced EJB of course in an EJB module. View the original post : http://www.jboss.org/index.html?module=bbop=viewtopicp=4266914#4266914 Reply to the post : http://www.jboss.org/index.html?module=bbop=postingmode=replyp=4266914 ___ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user
[jboss-user] [JBoss Microcontainer Users] - Re: How to get DeploymentUnit?
Juergen.Zimmermann wrote : | So my 1st problem is: how to get the jndi name when the interface of an EJB is available? | Dunno, this is EJB question not MC. ;-) Either ask on their forum or check Weld-int where, afair, something similar had to be implemented. Juergen.Zimmermann wrote : | | | DeploymentUnit du = ???; // How to get DeploymentUnit? Via ClassLoader? | | | | ClassLoader cl = clazz.getClassLoader(); | Module module = ClassLoading.getModuleForClassLoader(cl); | if (module instanceof AbstractDeploymentClassLoaderPolicyModule) | { |AbstractDeploymentClassLoaderPolicyModule deploymentModule = (AbstractDeploymentClassLoaderPolicyModule)module; |DeploymentUnit unit = deploymentModule.getDeploymentUnit(); | This way you get the deployment unit owning the classloader/module, but to actually get the right deployment unit you would need to check the whole hierarchy of this unit. e.g. get class's source location, and check it against unit's and sub-units classpath roots. View the original post : http://www.jboss.org/index.html?module=bbop=viewtopicp=4266915#4266915 Reply to the post : http://www.jboss.org/index.html?module=bbop=postingmode=replyp=4266915 ___ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user
[jboss-user] [JBoss Microcontainer Users] - Re: How to get DeploymentUnit?
Juergen.Zimmermann wrote : the class EJBProvider (see above) is in a web module You can use MC-int to get DeploymentUnit from ServletContext. * http://anonsvn.jboss.org/repos/jbossas/projects/mc-int/trunk/servlet/ View the original post : http://www.jboss.org/index.html?module=bbop=viewtopicp=4266916#4266916 Reply to the post : http://www.jboss.org/index.html?module=bbop=postingmode=replyp=4266916 ___ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user
[jboss-user] [JBoss Microcontainer Users] - Re: How to get DeploymentUnit?
Thank you very much for your help! View the original post : http://www.jboss.org/index.html?module=bbop=viewtopicp=4266918#4266918 Reply to the post : http://www.jboss.org/index.html?module=bbop=postingmode=replyp=4266918 ___ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user
[jboss-user] [JBoss Microcontainer Users] - Re: How to get DeploymentUnit?
Actually that's not correct (hence my off the top of my head), as Module/ClassLoader can be created from different/multiple (sub)deployments. e.g. ear + jars Why exactly do you need DeploymentUnit? What is your environment - where do you want to access DU from? Looks like class's classloader is your starting point. Why? Give more details and we'll find the solution together. View the original post : http://www.jboss.org/index.html?module=bbop=viewtopicp=4266887#4266887 Reply to the post : http://www.jboss.org/index.html?module=bbop=postingmode=replyp=4266887 ___ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user