Search code examples
jbossjboss-eap-7

Getting EJB module name dynamically for JNDI on EAP 7


How can we get the EJB module name dynamically for JNDI on EAP 7 we have looked into the post on stack overflow here to get the module name

  • We don't want to override in ejb-jar.xml.
  • We don't want to customise the module name in maven so it is fixed.
  • Nor we looking are looping at looping as we are currently implemented

URL url = clazz.getResource(""); 
   String [] strArray = url.getPath().split("/");  
   for (int i=0; i<strArray.length; i++){  
        if (strArray[i].contains(".jar")){  
              moduleName = strArray[i].substring(0, strArray[i].length() - 4);  
              break;  
        }  
}

jndiName = "java:app/"+moduleName+"/"+clazz.getSimpleName()+"!"+clazz.getCanonicalName();

Is there a cleaner way

java:app/<module-name>/<bean-name>!<fully-qualified-bean-interface-name> 

Solution

  • Overriding EJB module name by using

    ejb-jar.xml

    <?xml version="1.1" encoding="UTF-8"?>
    <ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
             version="3.1">
        <module-name>my-module</module-name>
    </ejb-jar> 
    

    For application name overriding use application name in application.xml

    The above solution helps in making application versioning information separate from its dependency for example while creating JNDI name to look up remote EJB in EAP 7.