12/08/2009

How to get module name and app name

Java EE 6 brings an easy and portable way to get the module name and application name of the current app, using @Resource field injection or lookup:

    @Resource(lookup="java:module/ModuleName")
private String moduleName;

@Resource(lookup="java:app/AppName")
private String appName;
The above code can be in any Java EE component classes, such as servlet, servlet filter, web listener class, JSP tag handler class, JSF managed bean, EJB bean class, interceptor class, application client main class, and their super classes as well.

You can also look up the module name and app name by their reserved jndi names:
//look up inside a method
String mname = (String) initialContext.lookup("java:module/ModuleName");
String anmae = (String) initialContext.lookup("java:app/AppName");
If you only need moduleName or appName in a particular method, I feel looking them up on-demand is slightly better.

From Java EE 6 forward, the default module name is the base name of a WAR, ejb-jar, or application client jar, that is, the jar name without the .war and .jar extension. One can customize it in descriptors (web.xml, ejb-jar.xml, application-client.xml), though this is rarely needed.

The default app name is the basename of a EAR, i.e., the EAR name without the .ear extension. One can customize it in application.xml.