View Javadoc
1   package org.apache.maven.plugins.ear;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.util.List;
23  
24  /**
25   * The JBoss specific configuration, used to generate the jboss-app.xml deployment descriptor file
26   * 
27   * @author <a href="snicoll@apache.org">Stephane Nicoll</a>
28   */
29  class JbossConfiguration
30  {
31      static final String VERSION_3_2 = "3.2";
32  
33      static final String VERSION_4 = "4";
34  
35      static final String VERSION_4_2 = "4.2";
36  
37      static final String VERSION_5 = "5";
38  
39      static final String VERSION = "version";
40  
41      static final String SECURITY_DOMAIN = "security-domain";
42  
43      static final String UNAUHTHENTICTED_PRINCIPAL = "unauthenticated-principal";
44  
45      static final String JMX_NAME = "jmx-name";
46  
47      static final String LOADER_REPOSITORY = "loader-repository";
48  
49      static final String LOADER_REPOSITORY_CLASS_ATTRIBUTE = "loaderRepositoryClass";
50  
51      static final String LOADER_REPOSITORY_CONFIG = "loader-repository-config";
52  
53      static final String CONFIG_PARSER_CLASS_ATTRIBUTE = "configParserClass";
54  
55      static final String MODULE_ORDER = "module-order";
56  
57      static final String DATASOURCES = "data-sources";
58  
59      static final String DATASOURCE = "data-source";
60  
61      static final String LIBRARY_DIRECTORY = "library-directory";
62  
63      private final String version;
64  
65      private boolean jbossThreeDotTwo;
66  
67      private boolean jbossFour;
68  
69      private boolean jbossFourDotTwo;
70  
71      private boolean jbossFive;
72  
73      private final String securityDomain;
74  
75      private final String unauthenticatedPrincipal;
76  
77      private final String jmxName;
78  
79      private final String loaderRepository;
80  
81      private final String loaderRepositoryConfig;
82  
83      private final String loaderRepositoryClass;
84  
85      private final String configParserClass;
86  
87      private final String moduleOrder;
88  
89      private final List<String> dataSources;
90  
91      private final String libraryDirectory;
92  
93      JbossConfiguration( String version, String securityDomain, String unauthenticatedPrincipal, String jmxName,
94                                 String loaderRepository, String moduleOrder, List<String> dataSources,
95                                 String libraryDirectory, String loaderRepositoryConfig, String loaderRepositoryClass,
96                                 String configParserClass )
97          throws EarPluginException
98      {
99          if ( version == null )
100         {
101             throw new EarPluginException( "jboss version could not be null." );
102         }
103         else
104         {
105             this.version = version;
106             if ( version.equals( JbossConfiguration.VERSION_3_2 ) )
107             {
108                 this.jbossThreeDotTwo = true;
109             }
110             else if ( version.equals( JbossConfiguration.VERSION_4 ) )
111             {
112                 this.jbossFour = true;
113             }
114             else if ( version.equals( JbossConfiguration.VERSION_4_2 ) )
115             {
116                 this.jbossFourDotTwo = true;
117             }
118             else if ( version.equals( JbossConfiguration.VERSION_5 ) )
119             {
120                 this.jbossFive = true;
121             }
122             else
123             {
124                 // CHECKSTYLE_OFF: LineLength
125                 throw new EarPluginException( "Invalid JBoss configuration, version[" + version + "] is not supported." );
126                 // CHECKSTYLE_ON: LineLength
127             }
128             this.securityDomain = securityDomain;
129             this.unauthenticatedPrincipal = unauthenticatedPrincipal;
130             this.jmxName = jmxName;
131             this.loaderRepository = loaderRepository;
132             this.moduleOrder = moduleOrder;
133             this.dataSources = dataSources;
134             this.libraryDirectory = libraryDirectory;
135             this.loaderRepositoryConfig = loaderRepositoryConfig;
136             this.loaderRepositoryClass = loaderRepositoryClass;
137             this.configParserClass = configParserClass;
138         }
139     }
140 
141     /**
142      * Returns the targeted version of JBoss.
143      * 
144      * @return the jboss version
145      */
146     public String getVersion()
147     {
148         return version;
149     }
150 
151     /**
152      * Returns true if the targeted JBoss version is 3.2.
153      * 
154      * @return if the targeted version is 3.2
155      */
156     public boolean isJbossThreeDotTwo()
157     {
158         return jbossThreeDotTwo;
159     }
160 
161     /**
162      * Returns true if the targeted JBoss version is 4.
163      * 
164      * @return if the targeted version is 4
165      */
166     public boolean isJbossFour()
167     {
168         return jbossFour;
169     }
170 
171     /**
172      * Returns true if the targeted JBoss version if 4 or higher (that is 4, 4.2 or 5).
173      * 
174      * @return true if the targeted version is 4+
175      */
176     public boolean isJbossFourOrHigher()
177     {
178         return jbossFour || jbossFourDotTwo || jbossFive;
179     }
180 
181     /**
182      * Returns true if the targeted JBoss version is 4.2.
183      * 
184      * @return if the targeted version is 4.2
185      */
186     public boolean isJbossFourDotTwo()
187     {
188         return jbossFourDotTwo;
189     }
190 
191     /**
192      * Returns true if the targeted JBoss version if 4.2 or higher (that is 4.2 or 5).
193      * 
194      * @return true if the targeted version is 4.2+
195      */
196     public boolean isJbossFourDotTwoOrHigher()
197     {
198         return jbossFourDotTwo || jbossFive;
199     }
200 
201     /**
202      * Returns true if the targeted JBoss version is 5.
203      * 
204      * @return if the targeted version is 5
205      */
206     public boolean isJbossFive()
207     {
208         return jbossFive;
209     }
210 
211     /**
212      * The security-domain element specifies the JNDI name of the security manager that implements the
213      * EJBSecurityManager and RealmMapping for the domain. When specified at the jboss level it specifies the security
214      * domain for all j2ee components in the deployment unit.
215      * <p/>
216      * One can override the global security-domain at the container level using the security-domain element at the
217      * container-configuration level.
218      * <p/>
219      * Only available as from JBoss 4.
220      * 
221      * @return the JNDI name of the security manager
222      */
223     public String getSecurityDomain()
224     {
225         return securityDomain;
226     }
227 
228     /**
229      * The unauthenticated-principal element specifies the name of the principal that will be returned by the
230      * EJBContext.getCallerPrincipal() method if there is no authenticated user. This Principal has no roles or
231      * privileges to call any other beans.
232      * <p/>
233      * Only available as from JBoss 4.
234      * 
235      * @return the unauthenticated principal
236      */
237     public String getUnauthenticatedPrincipal()
238     {
239         return unauthenticatedPrincipal;
240     }
241 
242     /**
243      * The jmx-name element allows one to specify the JMX ObjectName to use for the MBean associated with the ear
244      * module. This must be a unique name and valid JMX ObjectName string.
245      * 
246      * @return the object name of the ear mbean
247      */
248     public String getJmxName()
249     {
250         return jmxName;
251     }
252 
253     /**
254      * The loader-repository specifies the name of the UnifiedLoaderRepository MBean to use for the ear to provide ear
255      * level scoping of classes deployed in the ear. It is a unique JMX ObjectName string.
256      * <p/>
257      * <P>
258      * Example:
259      * </P>
260      * &lt;loader-repository>jboss.test:loader=cts-cmp2v1-sar.ear&lt;/loader-repository>
261      * 
262      * @return the object name of the ear mbean
263      */
264     public String getLoaderRepository()
265     {
266         return loaderRepository;
267     }
268 
269     /**
270      * The module-order specifies the order in which the modules specified in the application.xml file gets loaded.
271      * Allowed values are:
272      * <p/>
273      * <module-order>strict</module-order> The strict value indicates that the deployments of the modules will be done
274      * in the order that would be specified in the application.xml and jboss-app.xml file.
275      * <p/>
276      * <module-order>implicit</module-order> The implicit value indicates the deployment would follow the order which
277      * would be specified in the DeploymentSorter.
278      * <p/>
279      * Returns <tt>null</tt> if no module order is set.
280      * <p/>
281      * Only available in JBoss 4.2 and 4.3. Has no effect in JBoss 5 and is not added when mentioned version is used.
282      * 
283      * @return the module order
284      */
285     public String getModuleOrder()
286     {
287         return moduleOrder;
288     }
289 
290     /**
291      * Returns the list of datasources to include in the <tt>jboss-app.xml</tt> file as services. Each element of the
292      * list is the relative path to the datasource file contained in the EAR archive.
293      * 
294      * @return the list of datasources paths
295      */
296     public List<String> getDataSources()
297     {
298         return dataSources;
299     }
300 
301     /**
302      * Returns the library directory to include in the <tt>jboss-app.xml</tt> file. It tells JBoss where to find
303      * non-Java EE libraries included in the EAR.
304      * 
305      * @return the library directory
306      */
307     public String getLibraryDirectory()
308     {
309         return libraryDirectory;
310     }
311 
312     /**
313      * Returns the class loader repository configuration to include in the <tt>jboss-app.xml</tt> file. The content of
314      * this element is handed to the class loader, thereby altering it's default behaviour.
315      * <p/>
316      * This element is added as a child to the <tt>loader-repository</tt> element. If the element is not present in the
317      * configuration, it will be added.
318      * <p/>
319      * Example: &lt;loader-repository-config>java2ParentDelegaton=true&lt;/loader-repository-config>
320      * 
321      * @return the class loader repository configuration
322      */
323     public String getLoaderRepositoryConfig()
324     {
325         return loaderRepositoryConfig;
326     }
327 
328     /**
329      * Returns the class loader repository class to include in the <tt>jboss-app.xml</tt> file. It tells JBoss which
330      * loader repository implementation to use.
331      * <p/>
332      * This element is added as an attribute to the <tt>loader-repository</tt> element, therefore it is not added if no
333      * such element configuration is present.
334      * <p/>
335      * Example: &lt;loader-repository-class>org.mindbug.jboss.AlternateLoaderRepository&lt;/loader-repository-class>
336      * 
337      * @return the class loader repository class
338      */
339     public String getLoaderRepositoryClass()
340     {
341         return loaderRepositoryClass;
342     }
343 
344     /**
345      * Returns the class loader's configuration parser class to include in the <tt>jboss-app.xml</tt> file. It tells
346      * JBoss how to parse the configuration given in the <tt>loader-repository-config</tt> element.
347      * <p/>
348      * This element is added as an attribute to the <tt>loader-repository-config</tt> element, therefore it is not added
349      * if no such element configuration is present.
350      * <p/>
351      * Example: &lt;config-parser-class>org.mindbug.jboss.AlternateLoaderRepositoryConfigParser&lt;/config-parser-class>
352      * 
353      * @return the class loader's configuration parser class
354      */
355     public String getConfigParserClass()
356     {
357         return configParserClass;
358     }
359 }