-
1. Re: Accessing correct bean version if multiple EARs deployed
jaikiran Jul 25, 2006 7:03 AM (in response to nigelwhite)I havent thought whether there are any other ways of doing this, but the first thing that comes to my mind is passing the earName as an <env-entry>. You may bind the earName through the env-entry and later on lookup the same in your code:
String earName = ctx.lookup("java:/comp/env/earName"); ctx.lookup(earName + "BeanClassName/local");
-
2. Re: Accessing correct bean version if multiple EARs deployed
nigelwhite Jul 25, 2006 8:35 AM (in response to nigelwhite)In which of the many XML config files would this <env-entry> element go, and what would the syntax be?
(Thanks for helping BTW!) -
3. Re: Accessing correct bean version if multiple EARs deployed
nigelwhite Jul 25, 2006 8:43 AM (in response to nigelwhite)Ah, just a thought. Each EAR would have to have its own env-entry. So they'd have tro be called different names, so we're back where we started.
We need to be able to enquire of the container what EAR fiel we are executing out of. -
4. Re: Accessing correct bean version if multiple EARs deployed
jaikiran Jul 25, 2006 8:53 AM (in response to nigelwhite)You can add it to the web.xml file. Here's an extract from the dtd of the web.xml:
<!-- The env-entry element contains the declaration of a web application's environment entry. The declaration consists of an optional description, the name of the environment entry, and an optional value. If a value is not specified, one must be supplied during deployment. --> <!ELEMENT env-entry (description?, env-entry-name, env-entry-value?, env-entry-type)> <!-- The env-entry-name element contains the name of a web applications's environment entry. The name is a JNDI name relative to the java:comp/env context. The name must be unique within a web application. Example: <env-entry-name>minAmount</env-entry-name> Used in: env-entry --> <!ELEMENT env-entry-name (#PCDATA)> <!-- The env-entry-type element contains the fully-qualified Java type of the environment entry value that is expected by the web application's code. The following are the legal values of env-entry-type: java.lang.Boolean java.lang.Byte java.lang.Character java.lang.String java.lang.Short java.lang.Integer java.lang.Long java.lang.Float java.lang.Double Used in: env-entry --> <!ELEMENT env-entry-type (#PCDATA)> <!-- The env-entry-value element contains the value of a web application's environment entry. The value must be a String that is valid for the constructor of the specified type that takes a single String parameter, or for java.lang.Character, a single character. Example: <env-entry-value>100.00</env-entry-value> Used in: env-entry --> <!ELEMENT env-entry-value (#PCDATA)>
For more information, you can find the dtd at:
http://java.sun.com/dtd/web-app_2_3.dtd
So your entry will look like, in Apicio1-1-11.ear :<env-entry> <description>Name of my application ear</description> <env-entry-name>earName</env-entry-name> <env-entry-value>Apicio1-1-11<env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry>
And in Apicio1-2-0.ear it would be:<env-entry> <description>Name of my application ear</description> <env-entry-name>earName</env-entry-name> <env-entry-value>Apicio1-2-0<env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry>
You will have to change the value of this env-entry for each application ear, when you are deploying the application.
Your code, however would remain the same:
String earName = ctx.lookup("java:comp/env/earName"); ctx.lookup(earName + "BeanClassName/local");
So for Apicio1-2-0.ear, the lookup of env-entry would return the value Apicio1-2-0 and for Apicio1-1-11.ear, it would return Apicio1-1-11
Try it out. -
5. Re: Accessing correct bean version if multiple EARs deployed
jaikiran Jul 25, 2006 9:11 AM (in response to nigelwhite)Sometime back a similar question was asked. On searching the JBossAS JIRA, found this:
http://jira.jboss.com/jira/browse/EJBTHREE-617 -
6. Re: Accessing correct bean version if multiple EARs deployed
nigelwhite Jul 25, 2006 9:29 AM (in response to nigelwhite)Not quite the same. They were asking to snip any version information off so that you would just use Aspicio/BeanClassName/local.
I want to *preserve* version information, and have multiple versions of the EJBs in the JNDI tree.
It's just that inside the EAR, the code needs to know which is the appropriate one to look up. -
7. Re: Accessing correct bean version if multiple EARs deployed
jaikiran Jul 25, 2006 9:33 AM (in response to nigelwhite)My understanding of http://jira.jboss.com/jira/browse/EJBTHREE-617 is that the user will be provided an option of configuring the name through some descriptor file like application.xml. The stripping of the version from the name might *just be an example*. I might be wrong, but this is what i understood out of it.
-
8. Re: Accessing correct bean version if multiple EARs deployed
nigelwhite Jul 26, 2006 5:25 AM (in response to nigelwhite)I went with a utility class to look up beans.
The source for this class is generated by the ANT build script to prepend the name of the EAR file being built to the beginning of the JNDI name.
So I have an EJBUtil class which containspublic static Object getLocalEJB(String name) throws NamingException { return lookup("@ear_name@/" + name + "/local"); }
Which gets "fixed" by a filter in the build which knows the EAR file name.