package org.apache.maven.plugins.ear; /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import java.util.List; /** * The JBoss specific configuration, used to generate the jboss-app.xml deployment descriptor file * * @author <a href="snicoll@apache.org">Stephane Nicoll</a> * @version $Id: JbossConfiguration.java 1636449 2014-11-03 21:27:36Z khmarbaise $ */ class JbossConfiguration { static final String VERSION_3_2 = "3.2"; static final String VERSION_4 = "4"; static final String VERSION_4_2 = "4.2"; static final String VERSION_5 = "5"; static final String VERSION = "version"; static final String SECURITY_DOMAIN = "security-domain"; static final String UNAUHTHENTICTED_PRINCIPAL = "unauthenticated-principal"; static final String JMX_NAME = "jmx-name"; static final String LOADER_REPOSITORY = "loader-repository"; static final String LOADER_REPOSITORY_CLASS_ATTRIBUTE = "loaderRepositoryClass"; static final String LOADER_REPOSITORY_CONFIG = "loader-repository-config"; static final String CONFIG_PARSER_CLASS_ATTRIBUTE = "configParserClass"; static final String MODULE_ORDER = "module-order"; static final String DATASOURCES = "data-sources"; static final String DATASOURCE = "data-source"; static final String LIBRARY_DIRECTORY = "library-directory"; private final String version; private boolean jbossThreeDotTwo; private boolean jbossFour; private boolean jbossFourDotTwo; private boolean jbossFive; private final String securityDomain; private final String unauthenticatedPrincipal; private final String jmxName; private final String loaderRepository; private final String loaderRepositoryConfig; private final String loaderRepositoryClass; private final String configParserClass; private final String moduleOrder; private final List<String> dataSources; private final String libraryDirectory; public JbossConfiguration( String version, String securityDomain, String unauthenticatedPrincipal, String jmxName, String loaderRepository, String moduleOrder, List<String> dataSources, String libraryDirectory, String loaderRepositoryConfig, String loaderRepositoryClass, String configParserClass ) throws EarPluginException { if ( version == null ) { throw new EarPluginException( "jboss version could not be null." ); } else { this.version = version; if ( version.equals( JbossConfiguration.VERSION_3_2 ) ) { this.jbossThreeDotTwo = true; } else if ( version.equals( JbossConfiguration.VERSION_4 ) ) { this.jbossFour = true; } else if ( version.equals( JbossConfiguration.VERSION_4_2 ) ) { this.jbossFourDotTwo = true; } else if ( version.equals( JbossConfiguration.VERSION_5 ) ) { this.jbossFive = true; } else { // CHECKSTYLE_OFF: LineLength throw new EarPluginException( "Invalid JBoss configuration, version[" + version + "] is not supported." ); // CHECKSTYLE_ON: LineLength } this.securityDomain = securityDomain; this.unauthenticatedPrincipal = unauthenticatedPrincipal; this.jmxName = jmxName; this.loaderRepository = loaderRepository; this.moduleOrder = moduleOrder; this.dataSources = dataSources; this.libraryDirectory = libraryDirectory; this.loaderRepositoryConfig = loaderRepositoryConfig; this.loaderRepositoryClass = loaderRepositoryClass; this.configParserClass = configParserClass; } } /** * Returns the targeted version of JBoss. * * @return the jboss version */ public String getVersion() { return version; } /** * Returns true if the targeted JBoss version is 3.2. * * @return if the targeted version is 3.2 */ public boolean isJbossThreeDotTwo() { return jbossThreeDotTwo; } /** * Returns true if the targeted JBoss version is 4. * * @return if the targeted version is 4 */ public boolean isJbossFour() { return jbossFour; } /** * Returns true if the targeted JBoss version if 4 or higher (that is 4, 4.2 or 5). * * @return true if the targeted version is 4+ */ public boolean isJbossFourOrHigher() { return jbossFour || jbossFourDotTwo || jbossFive; } /** * Returns true if the targeted JBoss version is 4.2. * * @return if the targeted version is 4.2 */ public boolean isJbossFourDotTwo() { return jbossFourDotTwo; } /** * Returns true if the targeted JBoss version if 4.2 or higher (that is 4.2 or 5). * * @return true if the targeted version is 4.2+ */ public boolean isJbossFourDotTwoOrHigher() { return jbossFourDotTwo || jbossFive; } /** * Returns true if the targeted JBoss version is 5. * * @return if the targeted version is 5 */ public boolean isJbossFive() { return jbossFive; } /** * The security-domain element specifies the JNDI name of the security manager that implements the * EJBSecurityManager and RealmMapping for the domain. When specified at the jboss level it specifies the security * domain for all j2ee components in the deployment unit. * <p/> * One can override the global security-domain at the container level using the security-domain element at the * container-configuration level. * <p/> * Only available as from JBoss 4. * * @return the JNDI name of the security manager */ public String getSecurityDomain() { return securityDomain; } /** * The unauthenticated-principal element specifies the name of the principal that will be returned by the * EJBContext.getCallerPrincipal() method if there is no authenticated user. This Principal has no roles or * privileges to call any other beans. * <p/> * Only available as from JBoss 4. * * @return the unauthenticated principal */ public String getUnauthenticatedPrincipal() { return unauthenticatedPrincipal; } /** * The jmx-name element allows one to specify the JMX ObjectName to use for the MBean associated with the ear * module. This must be a unique name and valid JMX ObjectName string. * * @return the object name of the ear mbean */ public String getJmxName() { return jmxName; } /** * The loader-repository specifies the name of the UnifiedLoaderRepository MBean to use for the ear to provide ear * level scoping of classes deployed in the ear. It is a unique JMX ObjectName string. * <p/> * <P> * Example: * </P> * <loader-repository>jboss.test:loader=cts-cmp2v1-sar.ear</loader-repository> * * @return the object name of the ear mbean */ public String getLoaderRepository() { return loaderRepository; } /** * The module-order specifies the order in which the modules specified in the application.xml file gets loaded. * Allowed values are: * <p/> * <module-order>strict</module-order> The strict value indicates that the deployments of the modules will be done * in the order that would be specified in the application.xml and jboss-app.xml file. * <p/> * <module-order>implicit</module-order> The implicit value indicates the deployment would follow the order which * would be specified in the DeploymentSorter. * <p/> * Returns <tt>null</tt> if no module order is set. * <p/> * Only available in JBoss 4.2 and 4.3. Has no effect in JBoss 5 and is not added when mentioned version is used. * * @return the module order */ public String getModuleOrder() { return moduleOrder; } /** * Returns the list of datasources to include in the <tt>jboss-app.xml</tt> file as services. Each element of the * list is the relative path to the datasource file contained in the EAR archive. * * @return the list of datasources paths */ public List<String> getDataSources() { return dataSources; } /** * Returns the library directory to include in the <tt>jboss-app.xml</tt> file. It tells JBoss where to find * non-Java EE libraries included in the EAR. * * @return the library directory */ public String getLibraryDirectory() { return libraryDirectory; } /** * Returns the class loader repository configuration to include in the <tt>jboss-app.xml</tt> file. The content of * this element is handed to the class loader, thereby altering it's default behaviour. * <p/> * This element is added as a child to the <tt>loader-repository</tt> element. If the element is not present in the * configuration, it will be added. * <p/> * Example: <loader-repository-config>java2ParentDelegaton=true</loader-repository-config> * * @return the class loader repository configuration */ public String getLoaderRepositoryConfig() { return loaderRepositoryConfig; } /** * Returns the class loader repository class to include in the <tt>jboss-app.xml</tt> file. It tells JBoss which * loader repository implementation to use. * <p/> * This element is added as an attribute to the <tt>loader-repository</tt> element, therefore it is not added if no * such element configuration is present. * <p/> * Example: <loader-repository-class>org.mindbug.jboss.AlternateLoaderRepository</loader-repository-class> * * @return the class loader repository class */ public String getLoaderRepositoryClass() { return loaderRepositoryClass; } /** * Returns the class loader's configuration parser class to include in the <tt>jboss-app.xml</tt> file. It tells * JBoss how to parse the configuration given in the <tt>loader-repository-config</tt> element. * <p/> * This element is added as an attribute to the <tt>loader-repository-config</tt> element, therefore it is not added * if no such element configuration is present. * <p/> * Example: <config-parser-class>org.mindbug.jboss.AlternateLoaderRepositoryConfigParser</config-parser-class> * * @return the class loader's configuration parser class */ public String getConfigParserClass() { return configParserClass; } }