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 26 * deployment descriptor file 27 * 28 * @author <a href="snicoll@apache.org">Stephane Nicoll</a> 29 * @version $Id: JbossConfiguration.java 1228837 2012-01-08 13:19:38Z rfscholte $ 30 */ 31 class JbossConfiguration 32 { 33 static final String VERSION_3_2 = "3.2"; 34 35 static final String VERSION_4 = "4"; 36 37 static final String VERSION_4_2 = "4.2"; 38 39 static final String VERSION_5 = "5"; 40 41 static final String VERSION = "version"; 42 43 static final String SECURITY_DOMAIN = "security-domain"; 44 45 static final String UNAUHTHENTICTED_PRINCIPAL = "unauthenticated-principal"; 46 47 static final String JMX_NAME = "jmx-name"; 48 49 static final String LOADER_REPOSITORY = "loader-repository"; 50 51 static final String LOADER_REPOSITORY_CLASS_ATTRIBUTE = "loaderRepositoryClass"; 52 53 static final String LOADER_REPOSITORY_CONFIG = "loader-repository-config"; 54 55 static final String CONFIG_PARSER_CLASS_ATTRIBUTE = "configParserClass"; 56 57 static final String MODULE_ORDER = "module-order"; 58 59 static final String DATASOURCES = "data-sources"; 60 61 static final String DATASOURCE = "data-source"; 62 63 static final String LIBRARY_DIRECTORY = "library-directory"; 64 65 private final String version; 66 67 private boolean jbossThreeDotTwo; 68 69 private boolean jbossFour; 70 71 private boolean jbossFourDotTwo; 72 73 private boolean jbossFive; 74 75 private final String securityDomain; 76 77 private final String unauthenticatedPrincipal; 78 79 private final String jmxName; 80 81 private final String loaderRepository; 82 83 private final String loaderRepositoryConfig; 84 85 private final String loaderRepositoryClass; 86 87 private final String configParserClass; 88 89 private final String moduleOrder; 90 91 private final List<String> dataSources; 92 93 private final String libraryDirectory; 94 95 public JbossConfiguration( String version, String securityDomain, String unauthenticatedPrincipal, String jmxName, 96 String loaderRepository, String moduleOrder, List<String> dataSources, String libraryDirectory, 97 String loaderRepositoryConfig, String loaderRepositoryClass, 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 throw new EarPluginException( 126 "Invalid JBoss configuration, version[" + version + "] is not supported." ); 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 173 * 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 /** 184 * Returns true if the targeted JBoss version is 4.2. 185 * 186 * @return if the targeted version is 4.2 187 */ 188 public boolean isJbossFourDotTwo() 189 { 190 return jbossFourDotTwo; 191 } 192 193 /** 194 * Returns true if the targeted JBoss version if 4.2 or higher (that is 195 * 4.2 or 5). 196 * 197 * @return true if the targeted version is 4.2+ 198 */ 199 public boolean isJbossFourDotTwoOrHigher() 200 { 201 return jbossFourDotTwo || jbossFive; 202 } 203 204 205 /** 206 * Returns true if the targeted JBoss version is 5. 207 * 208 * @return if the targeted version is 5 209 */ 210 public boolean isJbossFive() 211 { 212 return jbossFive; 213 } 214 215 /** 216 * The security-domain element specifies the JNDI name of the security 217 * manager that implements the EJBSecurityManager and RealmMapping for 218 * the domain. When specified at the jboss level it specifies the security 219 * domain for all j2ee components in the deployment unit. 220 * <p/> 221 * One can override the global security-domain at the container 222 * level using the security-domain element at the container-configuration 223 * level. 224 * <p/> 225 * Only available as from JBoss 4. 226 * 227 * @return the JNDI name of the security manager 228 */ 229 public String getSecurityDomain() 230 { 231 return securityDomain; 232 } 233 234 /** 235 * The unauthenticated-principal element specifies the name of the principal 236 * that will be returned by the EJBContext.getCallerPrincipal() method if there 237 * is no authenticated user. This Principal has no roles or privileges to call 238 * any other beans. 239 * <p/> 240 * Only available as from JBoss 4. 241 * 242 * @return the unauthenticated principal 243 */ 244 public String getUnauthenticatedPrincipal() 245 { 246 return unauthenticatedPrincipal; 247 } 248 249 /** 250 * The jmx-name element allows one to specify the JMX ObjectName to use 251 * for the MBean associated with the ear module. This must be a unique 252 * name and valid JMX ObjectName string. 253 * 254 * @return the object name of the ear mbean 255 */ 256 public String getJmxName() 257 { 258 return jmxName; 259 } 260 261 /** 262 * The loader-repository specifies the name of the UnifiedLoaderRepository 263 * MBean to use for the ear to provide ear level scoping of classes deployed 264 * in the ear. It is a unique JMX ObjectName string. 265 * <p/> 266 * <P>Example:</P> 267 * <loader-repository>jboss.test:loader=cts-cmp2v1-sar.ear</loader-repository> 268 * 269 * @return the object name of the ear mbean 270 */ 271 public String getLoaderRepository() 272 { 273 return loaderRepository; 274 } 275 276 /** 277 * The module-order specifies the order in which the modules specified 278 * in the application.xml file gets loaded. Allowed values are: 279 * <p/> 280 * <module-order>strict</module-order> 281 * The strict value indicates that the deployments of the modules will 282 * be done in the order that would be specified in the application.xml 283 * and jboss-app.xml file. 284 * <p/> 285 * <module-order>implicit</module-order> 286 * The implicit value indicates the deployment would follow the order 287 * which would be specified in the DeploymentSorter. 288 * <p/> 289 * Returns <tt>null</tt> if no module order is set. 290 * <p/> 291 * Only available in JBoss 4.2 and 4.3. Has no effect in JBoss 5 and is 292 * not added when mentioned version is used. 293 * 294 * @return the module order 295 */ 296 public String getModuleOrder() 297 { 298 return moduleOrder; 299 } 300 301 /** 302 * Returns the list of datasources to include in the <tt>jboss-app.xml</tt> 303 * file as services. Each element of the list is the relative path to the 304 * datasource file contained in the EAR archive. 305 * 306 * @return the list of datasources paths 307 */ 308 public List<String> getDataSources() 309 { 310 return dataSources; 311 } 312 313 /** 314 * Returns the library directory to include in the <tt>jboss-app.xml</tt> file. 315 * It tells JBoss where to find non-Java EE libraries included in the EAR. 316 * 317 * @return the library directory 318 */ 319 public String getLibraryDirectory() 320 { 321 return libraryDirectory; 322 } 323 324 /** 325 * Returns the class loader repository configuration to include in the <tt>jboss-app.xml</tt> file. 326 * The content of this element is handed to the class loader, thereby altering it's default behaviour. 327 * <p/> 328 * This element is added as a child to the <tt>loader-repository</tt> element. If the element is not 329 * present in the configuration, it will be added. 330 * <p/> 331 * Example: <loader-repository-config>java2ParentDelegaton=true</loader-repository-config> 332 * 333 * @return the class loader repository configuration 334 */ 335 public String getLoaderRepositoryConfig() 336 { 337 return loaderRepositoryConfig; 338 } 339 340 /** 341 * Returns the class loader repository class to include in the <tt>jboss-app.xml</tt> file. 342 * It tells JBoss which loader repository implementation to use. 343 * <p/> 344 * This element is added as an attribute to the <tt>loader-repository</tt> element, therefore it is 345 * not added if no such element configuration is present. 346 * <p/> 347 * Example: <loader-repository-class>org.mindbug.jboss.AlternateLoaderRepository</loader-repository-class> 348 * 349 * @return the class loader repository class 350 */ 351 public String getLoaderRepositoryClass() 352 { 353 return loaderRepositoryClass; 354 } 355 356 /** 357 * Returns the class loader's configuration parser class to include in the <tt>jboss-app.xml</tt> file. 358 * It tells JBoss how to parse the configuration given in the <tt>loader-repository-config</tt> element. 359 * <p/> 360 * This element is added as an attribute to the <tt>loader-repository-config</tt> element, therefore it is 361 * not added if no such element configuration is present. 362 * <p/> 363 * Example: <config-parser-class>org.mindbug.jboss.AlternateLoaderRepositoryConfigParser</config-parser-class> 364 * 365 * @return the class loader's configuration parser class 366 */ 367 public String getConfigParserClass() 368 { 369 return configParserClass; 370 } 371 }