-
-
2. Re: Get ear name
jaikiran Mar 21, 2008 12:02 AM (in response to klejs)I dont think there's a way. Any specific reason you want to do this?
-
3. Re: Get ear name
benc Mar 26, 2008 10:41 AM (in response to klejs)I don't know about klejs's reason, for me it is for JNDI lookups because the default path starts with the ear name. Our build scripts include build number, date, etc in the ear name. It would be nice for the application to be able to determine what the ear name is dynamically instead of having to hard code it somewhere and update it for every new build.
-
4. Re: Get ear name
jaikiran Mar 26, 2008 11:31 AM (in response to klejs)"benc" wrote:
for me it is for JNDI lookups because the default path starts with the ear name. Our build scripts include build number, date, etc in the ear name.
You are right, the default jndi name includes the ear name as well. However, you can override this default jndi name and bind the beans to specific jndi-names of your choice either by using the jboss.xml file or by using annotations (look for @RemoteBinding or @LocalBinding). This way, you don't have to depend on the ear file name. -
5. Re: Get ear name
rpiaggio Jun 19, 2008 1:39 PM (in response to klejs)private static String getEarName() { URL url = Thread.currentThread().getContextClassLoader().getResource(""); Pattern p = Pattern.compile("(?i)/([^\\\\/:\\*\\?<>\\|]+)\\.ear/"); Matcher m = p.matcher(url.getPath()); if (m.find()) { return m.group(1) + "/"; } else { return ""; } }
It's a bit of a hack, but it's the only way I could find.
I don't want to be annotating every single bean, it's error-prone. Wish they would standardize bean naming. -
6. Re: Get ear name
sverker Mar 4, 2010 8:52 AM (in response to rpiaggio)Unforturnatly I've seen that this method doesn't always work, e.g. from an JMX bean.
The reason why I need to get the ear name is that I have a set of modules that are used to build multiple ear files. Hence the jndi names gets different, and that is a feature, but when lookin up the jndi names from beans inside the jar I need to find out which ear is being used. I've searched for a solution but can't find anything.
-
7. Re: Get ear name
jaikiran Mar 4, 2010 9:23 AM (in response to sverker)Which exact version of JBoss AS?
-
-
9. Re: Get ear name
jaikiran Mar 4, 2010 10:17 AM (in response to sverker)sverker wrote:
but when lookin up the jndi names from beans inside the jar I need to find out which ear is being used. I've searched for a solution but can't find anything.
If you use the @org.jboss.ejb3.annotation.RemoteBinding (or org.jboss.ejb3.annotation.LocalBinding or their xml equivalents), you will no longer need to know the ear (or the jar) name. See this example http://www.jboss.org/file-access/default/members/jbossejb3/freezone/docs/tutorial/1.0.7/html/JNDI_Bindings.html
-
10. Re: Get ear name
sverker Mar 4, 2010 10:25 AM (in response to jaikiran)Yes, I know about that but then I don't have the benefit of having the ejb names scoped. I.e. if I have two ear's with the same ejb inside on the same jboss instance then the names collide if I've bound them hard with RemoteBinding or LocalBinding. -
11. Re: Get ear name
laurent4x_x52 Dec 30, 2010 12:19 PM (in response to sverker)Hi Sverker;
I've been struggling with the same exact need for 2 days...
Did you find something ???
Or could the team come up with some easily configurable (not in the code - rather be in xml) way to handle this ???
More than once we have to deal with deploying ears with same ejbs.. same jarsetc...
but needed with different names.
Or is there something we are missing ??
My guest is that we are many guys facing this problem... (just check number of posts relating to this..)
Do you find something ?? Help will be appreciated, sincerly !
Happy New Year to all !
Cheers
-
12. Re: Get ear name
sverker Jan 3, 2011 7:53 AM (in response to laurent4x_x52)I did a workaround. In pom.xml the application.finalName property is defined to the name the ear will have and is used in build section finalName tag. I have a mbean which is configured via a *-service.xml file deployed in the ear. In there I have an attribute definition like this:
<attribute name="EarName">${application.finalName}</attribute>
Maven will replace the macro with the property value. Then I have a ServiceLocator singleton class which is used by all clients to lookup the services, it has a method like this:
private static String getEarName() {
if(earName == null) {
// This will lookup the name of the ear from our mbean
MBeanServer mBeanServer = MBeanServerLocator.locateJBoss();
try {
earName = (String) mBeanServer.invoke( new ObjectName("com.limetransit.sms:service=LimeManagement"),
"getEarName",
new Object[] {},
new String[] {}
);
} catch(Exception e) {
e.printStackTrace();
}
}
return earName + "/";
}May not be the most beautiful solution but it works at least...
-
13. Re: Get ear name
sverker Jan 3, 2011 7:54 AM (in response to sverker)The ServiceLocator has methods like this for all Service beans:
public final SystemStatusService getSystemStatusService(Properties env) throws NamingException {
return (SystemStatusService) getContext(env).lookup(getEarName() + "SystemStatusService/remote");
} -
14. Re: Get ear name
lkasprzy Apr 12, 2012 3:31 AM (in response to jaikiran)Is exist some way to get ear name in Jboss 7.1 version ? As I know the RemoteBinding annotation don't work in 7 version. I have about 15 ears in many diffrent environments with diffrent versions ear (with timestamps) and composed with diffrent version of modules. This versions is changing often, so I have to programatically inject ear name and also module name.