I have multiple JavaEE6 applications (.war) deployed in a JBoss 7.4. All of these applications contain a common library which provides a Singleton-Bean implementation. This singleton-bean is configured differently for each application using the JBoss modules folder and should log some application specific information - This is working already fine.
However I have difficulties distinguishing which log line comes from which application.
When the server starts for each application (my-app1, my-app2, ...) I have the following output in the log:
INFO 10:45:54,998 (EjbJndiBindingsDeploymentUnitProcessor.java:setupJNDIBindings:183) -JNDI bindings for session bean named MyBean in deployment unit deployment "my-app1.war" are as follows:
java:global/my-app1/MyBean!my.package.MyBean
java:app/my-app1/MyBean!my.package.MyBean
java:module/MyBean!my.package.MyBean
java:global/my-app1/MyBean
java:app/my-app1/MyBean
java:module/MyBean
This output is exactly what I need, so I would like to retrieve the global jndi name under which MyBean was deployed in my code:
import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import org.apache.log4j.Logger;
@Singleton
@Startup
public class MyBean {
private static final Logger log = Logger.getLogger(MyBean.class);
@PostConstruct
private void postConstruct() {
String appName = ""; // .getGlobalJndiNameOfThisInstance();
log.info("MyBean available for application " + appName);
// and log further application specific info
}
}
When researching this I only find vast information on how to lookup beans via jndi, which I don't need. Can I extract the app-name somehow via creating a new InitialContext()
?
I found how to lookup the name. It is available via jndi-lookup under the name java:app/AppName
or java:module/ModuleName
.
I extended my EJB as follows:
import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import org.apache.log4j.Logger;
@Singleton
@Startup
public class MyBean {
@Resource(lookup = "java:app/AppName")
String appName;
private static final Logger log = Logger.getLogger(MyBean.class);
@PostConstruct
private void postConstruct() {
log.info("MyBean available for application " + appName);
// and log further application specific info
}
}