You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by sa...@apache.org on 2012/05/17 09:17:48 UTC
svn commit: r1339501 - in
/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment:
./ repository/util/
Author: sagara
Date: Thu May 17 07:17:48 2012
New Revision: 1339501
URL: http://svn.apache.org/viewvc?rev=1339501&view=rev
Log:
AXIS2-5322 - Implemented ServiceBuilderExtension concept.
Added:
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/AbstractServiceBuilderExtension.java (with props)
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/ServiceBuilderExtension.java (with props)
Modified:
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/AbstractDeployer.java
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/AxisConfigBuilder.java
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/DeploymentConstants.java
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/repository/util/DeploymentFileData.java
Modified: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/AbstractDeployer.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/AbstractDeployer.java?rev=1339501&r1=1339500&r2=1339501&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/AbstractDeployer.java (original)
+++ axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/AbstractDeployer.java Thu May 17 07:17:48 2012
@@ -15,10 +15,16 @@
*/
package org.apache.axis2.deployment;
+import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.deployment.repository.util.DeploymentFileData;
+import org.apache.axis2.description.AxisService;
+
+import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
/**
* AbstractDeployer class which can be extended by all Axis2 deployers
@@ -31,6 +37,11 @@ public abstract class AbstractDeployer i
*/
protected Map<String, DeploymentFileData> deploymentFileDataMap
= new ConcurrentHashMap<String, DeploymentFileData>();
+
+ /**
+ * Keep ServiceBuilderExtension associated with this Deployer.
+ */
+ private List<ServiceBuilderExtension> serviceBuilderExtensions = new CopyOnWriteArrayList<ServiceBuilderExtension>();
public void deploy(DeploymentFileData deploymentFileData) throws DeploymentException {
deploymentFileDataMap.put(deploymentFileData.getAbsolutePath(), deploymentFileData);
@@ -43,4 +54,39 @@ public abstract class AbstractDeployer i
public void cleanup() throws DeploymentException {
// Deployers which require cleaning up should override this method
}
+
+ public List<ServiceBuilderExtension> getServiceBuilderExtensions() {
+ return serviceBuilderExtensions;
+ }
+
+ public void addServiceBuilderExtensions(ServiceBuilderExtension serviceBuilderExtension) {
+ serviceBuilderExtensions.add(serviceBuilderExtension);
+ }
+
+ /**
+ * This method executes ServiceBuilderExtensions associated with this
+ * Deployer instance and return a list AxisService instances. It is required
+ * to explicitly call this method within the deploy() method in order to use
+ * ServiceBuilderExtension.
+ *
+ * @param deploymentFileData
+ * @param configurationContext
+ * @return
+ * @throws DeploymentException
+ */
+ protected Map<String, AxisService> executeServiceBuilderExtensions(
+ DeploymentFileData deploymentFileData, ConfigurationContext configurationContext)
+ throws DeploymentException {
+ if (getServiceBuilderExtensions().size() > 0) {
+ for (ServiceBuilderExtension ext : getServiceBuilderExtensions()) {
+ // a Service should be build by only one ServiceBuilderExtension
+ Map<String, AxisService> serviceMap = ext.buildAxisServices(deploymentFileData);
+ if (serviceMap != null && serviceMap.size() > 0) {
+ return serviceMap;
+ }
+ }
+ }
+ return new HashMap<String, AxisService>();
+ }
+
}
Added: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/AbstractServiceBuilderExtension.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/AbstractServiceBuilderExtension.java?rev=1339501&view=auto
==============================================================================
--- axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/AbstractServiceBuilderExtension.java (added)
+++ axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/AbstractServiceBuilderExtension.java Thu May 17 07:17:48 2012
@@ -0,0 +1,68 @@
+package org.apache.axis2.deployment;
+
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.engine.AxisConfiguration;
+
+/**
+ * <p>The Class AbstractServiceBuilderExtension is abstract class that can be used
+ * to write new ServiceBuilderExtensions.</p>
+ *
+ * @since 1.7.0
+ */
+public abstract class AbstractServiceBuilderExtension implements ServiceBuilderExtension {
+
+ /** The configuration context. */
+ ConfigurationContext configurationContext;
+
+ /** The axis configuration. */
+ AxisConfiguration axisConfiguration;
+
+ /**
+ * The directory associated with base Deployer of with this
+ * AbstractServiceBuilderExtension instance.
+ */
+ String directory;
+
+ public void init(ConfigurationContext configurationContext) {
+ this.configurationContext = configurationContext;
+ this.axisConfiguration = this.configurationContext.getAxisConfiguration();
+ }
+
+ /**
+ * Gets the directory.
+ *
+ * @return the directory
+ */
+ public String getDirectory() {
+ return directory;
+ }
+
+ /**
+ * Sets the directory.
+ *
+ * @param directory
+ * the new directory
+ */
+ public void setDirectory(String directory) {
+ this.directory = directory;
+ }
+
+ /**
+ * Gets the configuration context.
+ *
+ * @return the configuration context
+ */
+ public ConfigurationContext getConfigurationContext() {
+ return configurationContext;
+ }
+
+ /**
+ * Gets the axis configuration.
+ *
+ * @return the axis configuration
+ */
+ public AxisConfiguration getAxisConfiguration() {
+ return axisConfiguration;
+ }
+
+}
Propchange: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/AbstractServiceBuilderExtension.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/AxisConfigBuilder.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/AxisConfigBuilder.java?rev=1339501&r1=1339500&r2=1339501&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/AxisConfigBuilder.java (original)
+++ axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/AxisConfigBuilder.java Thu May 17 07:17:48 2012
@@ -421,6 +421,35 @@ public class AxisConfigBuilder extends D
deployer.setDirectory(directory);
deployer.setExtension(extension);
+ for (Iterator<?> itr = element.getChildrenWithName(new QName(
+ TAG_SERVICE_BUILDER_EXTENSION)); itr.hasNext();) {
+ OMElement serviceBuilderEle = (OMElement) itr.next();
+ String serviceBuilderClass = serviceBuilderEle.getAttributeValue(new QName(
+ TAG_CLASS_NAME));
+ String serviceBuilderName = serviceBuilderEle.getAttributeValue(new QName(
+ ATTRIBUTE_CLASS));
+ if (serviceBuilderClass != null && serviceBuilderName != null) {
+ ServiceBuilderExtension builderExtension;
+ try {
+ Class<ServiceBuilderExtension> builderExtensionClass = Loader
+ .loadClass(serviceBuilderClass);
+ builderExtension = builderExtensionClass.newInstance();
+ builderExtension.setDirectory(directory);
+ } catch (UnsupportedClassVersionError ex) {
+ log.info("Disabled - " + deployerClassName + " - " + ex.getMessage());
+ continue;
+ } catch (Throwable e) {
+ log.warn("Unable to instantiate deployer " + deployerClassName
+ + "; see debug logs for more details");
+ log.debug(e.getMessage(), e);
+ continue;
+ }
+ if (deployer instanceof AbstractDeployer) {
+ ((AbstractDeployer) deployer).addServiceBuilderExtensions(builderExtension);
+ }
+ }
+ }
+
Map<String, Deployer> extensionMap = deployers.get(directory);
if (extensionMap == null) {
extensionMap = new HashMap<String, Deployer>();
Modified: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/DeploymentConstants.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/DeploymentConstants.java?rev=1339501&r1=1339500&r2=1339501&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/DeploymentConstants.java (original)
+++ axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/DeploymentConstants.java Thu May 17 07:17:48 2012
@@ -20,7 +20,7 @@
package org.apache.axis2.deployment;
-import org.apache.axis2.Constants;
+
/**
* Constants used during service/module deployment.
@@ -104,6 +104,7 @@ public interface DeploymentConstants {
String TAG_BEFORE = "before";
String TAG_SUPPORTED_POLICY_NAMESPACES = "supported-policy-namespaces";
String TAG_NAMESPACES = "namespaces";
+ String TAG_SERVICE_BUILDER_EXTENSION = "serviceBuilderExtension";
//ClusterBuilder
String TAG_NODE_MANAGER = "nodeManager";
Modified: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java?rev=1339501&r1=1339500&r2=1339501&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java (original)
+++ axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java Thu May 17 07:17:48 2012
@@ -938,6 +938,13 @@ public abstract class DeploymentEngine i
for (Map<String, Deployer> extensionMap : deployerMap.values()) {
for (Deployer deployer : extensionMap.values()) {
deployer.init(configContext);
+ if (deployer instanceof AbstractDeployer) {
+ for (Iterator<ServiceBuilderExtension> sbeItr = ((AbstractDeployer) deployer)
+ .getServiceBuilderExtensions().iterator(); sbeItr.hasNext();) {
+ //init ServiceBuilderExtensions
+ sbeItr.next().init(configContext);
+ }
+ }
}
}
}
@@ -1198,6 +1205,11 @@ public abstract class DeploymentEngine i
if (configContext != null) {
// Initialize the Deployer
deployer.init(configContext);
+ for (Iterator<ServiceBuilderExtension> sbeItr = ((AbstractDeployer) deployer)
+ .getServiceBuilderExtensions().iterator(); sbeItr.hasNext();) {
+ //init ServiceBuilderExtensions
+ sbeItr.next().init(configContext);
+ }
if (!hotDeployment) {
//TBD
}
Added: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/ServiceBuilderExtension.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/ServiceBuilderExtension.java?rev=1339501&view=auto
==============================================================================
--- axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/ServiceBuilderExtension.java (added)
+++ axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/ServiceBuilderExtension.java Thu May 17 07:17:48 2012
@@ -0,0 +1,84 @@
+package org.apache.axis2.deployment;
+
+import java.util.Map;
+
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.deployment.repository.util.DeploymentFileData;
+import org.apache.axis2.description.AxisService;
+
+/**
+ * <p>
+ * The interface ServiceBuilderExtension provides an extension point to
+ * org.apache.axis2.deployment.Deployer interface. During the deployment, a
+ * Deployer invoke all ServiceBuilderExtension instances associated with it and
+ * receive a list of org.apache.axis2.description.AxisService generated by one
+ * of above ServiceBuilderExtension instances.
+ * </p>
+ *
+ * <p>
+ * It is possible to register ServiceBuilderExtension for a
+ * org.apache.axis2.deployment.Deployer through the axis2.xml configuration file
+ * or one can can set ServiceBuilderExtension programtically.
+ * </p>
+ *
+ * <p>
+ * Example
+ * </p>
+ * <p>
+ *
+ * <pre>
+ * {@code
+ * <deployer extension="extension" directory="custom-directory" class="Deployer implementation">
+ * <serviceBuilderExtension name ="builderExtensionA" class="org.apache.axis2.BuilderExtensionA"/>
+ * <serviceBuilderExtension name ="builderExtensionA" class="org.apache.axis2.BuilderExtensionB"/>
+ * <serviceBuilderExtension name ="builderExtensionA" class="org.apache.axis2.BuilderExtensionC"/>
+ * </deployer> }
+ * </pre>
+ * </p>
+ *
+ *
+ * <ul>
+ * <li>
+ * To use ServiceBuilderExtension a custom Deployer must be extended from org.apache.axis2.deployment.AbstractDeployer
+ * class where org.apache.axis2.deployment.AbstractDeployer class register ServiceBuilderExtensions with underline Deployer
+ * instance.
+ * </li>
+ * <li>
+ * Within deploy() method it is expected to call org.apache.axis2.deployment.AbstractDeployer#executeServiceBuilderExtensions
+ * method to receive list of AxisService instances generated by ServiceBuilderExtensions.
+ * </li>
+ * <li>
+ * For a given deploymentFile, if a ServiceBuilderExtension could create a AxisService then
+ * stop execution of other ServiceBuilderExtensions registered and return the AxisService immediately
+ * to the base Deployer for the further processing.
+ * </li>
+ * </ul>
+ *
+ * @since 1.7.0
+ */
+public interface ServiceBuilderExtension {
+
+ /**
+ * Initialize ServiceBuilderExtension instance. This method should be called
+ * when Initializing the base Deployer.
+ *
+ * @param configurationContext
+ * the configuration context
+ */
+ public void init(ConfigurationContext configurationContext);
+
+ /**
+ * Builds the AxisService.
+ *
+ * @param deploymentFileData
+ * the deployment file data *
+ * @return the map of AxisService instances.
+ * @throws DeploymentException
+ * the deployment exception
+ */
+ public Map<String, AxisService> buildAxisServices(DeploymentFileData deploymentFileData)
+ throws DeploymentException;
+
+ public void setDirectory(String directory);
+
+}
Propchange: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/ServiceBuilderExtension.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/repository/util/DeploymentFileData.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/repository/util/DeploymentFileData.java?rev=1339501&r1=1339500&r2=1339501&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/repository/util/DeploymentFileData.java (original)
+++ axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/repository/util/DeploymentFileData.java Thu May 17 07:17:48 2012
@@ -39,6 +39,7 @@ public class DeploymentFileData {
private ClassLoader classLoader;
private Deployer deployer;
private URL url;
+ private Object serviceMetaData;
public URL getUrl() {
return url;
@@ -150,4 +151,13 @@ public class DeploymentFileData {
public void deploy() throws DeploymentException {
deployer.deploy(this);
}
+
+ public Object getServiceMetaData() {
+ return serviceMetaData;
+ }
+
+ public void setServiceMetaData(Object serviceMetaData) {
+ this.serviceMetaData = serviceMetaData;
+ }
+
}