View Javadoc
1   package ejava.util.ejb;
2   
3   /**
4    * This class provides utiltity functions for working with an EJB in the JNDI
5    * tree. 
6    */
7   public class EJBClient {
8       /**
9        * This method provides a convenience wrapper around the alternate  
10       * getEJBLookupName() helper method. This can be used by EJB clients
11       * trying to locate EJBs that are part of a deployment that did not
12       * turn off maven version numbers in the deployment. This method assumes
13       * the EAR and EJB versions are the same value and will appropriately 
14       * append the version to the EAR and EJB names when forming the 
15       * jboss-ejb-client JNDI name.
16       * @param earName
17       * @param ejbModuleName
18       * @param distinctName
19       * @param ejbClassName
20       * @param remoteInterface
21       * @param version
22       * @return String jndi name that can be used for lookup
23       */
24  	public static String getEJBClientLookupName(
25      		String earName,
26      		String ejbModuleName,
27      		String distinctName,
28      		String ejbClassName,
29      		String remoteInterface,
30      		boolean stateful,
31      		String version) {
32      	return getEJBClientLookupName(
33      			String.format("%s-%s",earName,version), 
34      			String.format("%s-%s", ejbModuleName, version), 
35      			distinctName, 
36      			ejbClassName, 
37      			remoteInterface,
38      			stateful);
39      }
40      
41  	/**
42  	 * This method returns an remote JNDI name that is usable by the 
43  	 * jboss-ejb-client org.jboss.ejb.client.naming.ejb.ejbURLContextFactory
44  	 * context factory. To use this, list "org.jboss.ejb.client.naming"
45  	 * as one of your java.naming.factory.url.pkgs and be sure to have
46  	 * org.jboss:jboss-ejb-client listed as a dependency. The physical
47  	 * name will look like the following in JBoss:<p/>
48  <pre>
49  java:jboss/exported/(ear)/(module)/(ejbClass)!(remoteInterface)	 
50  </pre>
51  	 * <p/>
52  	 * JNDI names returned will be in the following form:<p/>
53  <pre>
54  ejb:(ear)/(module)/(distinctName)/(ejbClass)!(remoteInterface)
55  ejb:(ear)/(module)/(distinctName)/(ejbClass)!(remoteInterface)?stateful
56  </pre><p/>
57  	 * Where the distinct name is commonly an empty string.<p/>
58  	 * @param earNameVersion
59  	 * @param ejbModuleNameVersion
60  	 * @param distinctName
61  	 * @param ejbClassName
62  	 * @param remoteInterface
63  	 * @return String jndi name that can be used for lookup
64  	 */
65      public static String getEJBClientLookupName(
66      		String earNameVersion,
67      		String ejbModuleNameVersion,
68      		String distinctName,
69      		String ejbClassName,
70      		String remoteInterface,
71      		boolean stateful) {
72  
73      	return new StringBuilder("ejb:")
74      		.append(earNameVersion).append("/")
75      		.append(ejbModuleNameVersion).append("/")
76      		.append(distinctName==null?"":distinctName).append("/")
77      		.append(ejbClassName).append("!")
78      		.append(remoteInterface)
79      		.append(stateful?"?stateful" : "")
80      		.toString();
81      }
82  
83      /**
84       * This method returns a JNDI name usable with JBoss remote-naming
85       * for EJBs deployed within an EAR.<p/>
86       * org.jboss.naming.remote.client.InitialContextFactory<p/>
87       * The physical JNDI name will be listed as:<p/>
88       * <pre>
89  java:jboss/exported/(ear)/(module)/(ejbClass)!(remoteInterface)
90       </pre></p>
91       * The name returned will have the following form:<p/>
92       * <pre>
93  (ear)/(module)/(ejbClass)!(remoteInterface)
94       * </pre>
95       * @param earNameVersion
96       * @param ejbModuleNameVersion
97       * @param ejbClassName
98       * @param remoteInterface
99       * @return String jndi name that can be used for lookup
100      */
101     public static String getRemoteLookupName(
102     		String earNameVersion,
103     		String ejbModuleNameVersion,
104     		String ejbClassName,
105     		String remoteInterface) {
106 
107     	return new StringBuilder()
108     		.append(earNameVersion).append("/")
109     		.append(ejbModuleNameVersion).append("/")
110     		.append(ejbClassName).append("!")
111     		.append(remoteInterface)
112     		.toString();
113     }
114     
115     /**
116      * This method returns a JNDI name usable with JBoss remote-naming for
117      * EJBs deployed within a WAR (i.e., no EAR).<p/>
118      * The physical JNDI name will be listed as:<p/>
119      * <pre>
120 java:jboss/exported/(war)/(ejbClass)!(remoteInterface)
121      </pre>
122      * The name returned will have the following form:<p/>
123      * <pre>
124 (war)/(ejbClass)!(remoteInterface)
125      * </pre>
126      * @param moduleNameVersion
127      * @param ejbClassName
128      * @param remoteInterface
129      * @return String jndi name that can be used for lookup
130      */
131     public static String getRemoteLookupName(
132     		String moduleNameVersion,
133     		String ejbClassName,
134     		String remoteInterface) {
135 
136     	return new StringBuilder()
137     		.append(moduleNameVersion).append("/")
138     		.append(ejbClassName).append("!")
139     		.append(remoteInterface)
140     		.toString();
141     }
142 }