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