[jboss-cvs] JBossAS SVN: r100658 - in branches/Branch_Hornet_Temporary_2/hornetq-int/src/main/java/org/jboss/as/integration/hornetq: deployers and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sat Feb 6 22:29:16 EST 2010


Author: clebert.suconic at jboss.com
Date: 2010-02-06 22:29:16 -0500 (Sat, 06 Feb 2010)
New Revision: 100658

Added:
   branches/Branch_Hornet_Temporary_2/hornetq-int/src/main/java/org/jboss/as/integration/hornetq/deployers/
   branches/Branch_Hornet_Temporary_2/hornetq-int/src/main/java/org/jboss/as/integration/hornetq/deployers/DestinationFactoryDeployerPlugin.java
   branches/Branch_Hornet_Temporary_2/hornetq-int/src/main/java/org/jboss/as/integration/hornetq/deployers/HornetQJMSDeployment.java
   branches/Branch_Hornet_Temporary_2/hornetq-int/src/main/java/org/jboss/as/integration/hornetq/deployers/HornetQJMSParserDeployer.java
   branches/Branch_Hornet_Temporary_2/hornetq-int/src/main/java/org/jboss/as/integration/hornetq/deployers/HornetQJMSRealDeployer.java
Log:
deployers

Added: branches/Branch_Hornet_Temporary_2/hornetq-int/src/main/java/org/jboss/as/integration/hornetq/deployers/DestinationFactoryDeployerPlugin.java
===================================================================
--- branches/Branch_Hornet_Temporary_2/hornetq-int/src/main/java/org/jboss/as/integration/hornetq/deployers/DestinationFactoryDeployerPlugin.java	                        (rev 0)
+++ branches/Branch_Hornet_Temporary_2/hornetq-int/src/main/java/org/jboss/as/integration/hornetq/deployers/DestinationFactoryDeployerPlugin.java	2010-02-07 03:29:16 UTC (rev 100658)
@@ -0,0 +1,102 @@
+package org.jboss.as.integration.hornetq.deployer;
+
+import javax.jms.Queue;
+import javax.jms.Topic;
+
+import org.hornetq.jms.server.JMSServerManager;
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.ejb.deployers.CreateDestinationFactory;
+import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.jboss.JBossMessageDrivenBeanMetaData;
+import org.jboss.metadata.ejb.spec.ActivationConfigMetaData;
+import org.jboss.metadata.ejb.spec.ActivationConfigPropertiesMetaData;
+import org.jboss.metadata.ejb.spec.ActivationConfigPropertyMetaData;
+
+/**
+ * An integration point for the EJB deployers on creating destinations
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author <a href="clebert.suconic at jboss.com">Clebert Suconic</a>
+ * @version $Revision: 82920 $
+ */
+public class DestinationFactoryDeployerPlugin implements CreateDestinationFactory {
+
+	private static final Logger log = Logger
+			.getLogger(DestinationFactoryDeployerPlugin.class);
+	
+	private JMSServerManager jmsManager;
+	
+	public JMSServerManager getJmsManager() {
+		return jmsManager;
+	}
+
+	public void setJmsManager(JMSServerManager jmsManager) {
+		this.jmsManager = jmsManager;
+	}
+
+	public boolean create(DeploymentUnit unit, JBossMessageDrivenBeanMetaData mdb)
+			throws DeploymentException {
+		String destinationName = null;
+		String destinationType = null;
+
+		ActivationConfigMetaData activationConfig = mdb.getActivationConfig();
+		if (activationConfig != null) {
+			ActivationConfigPropertiesMetaData properties = activationConfig
+					.getActivationConfigProperties();
+			if (properties != null) {
+				destinationName = getActivationConfigProperty(properties,
+						"destination");
+				destinationType = getActivationConfigProperty(properties,
+						"destinationType");
+			}
+		}
+
+		// TODO message-destination-link?
+
+		if (destinationName == null || destinationName.trim().length() == 0) {
+			log.warn("Unable to determine destination for " + mdb.getName());
+			return false;
+		}
+		boolean isTopic = false;
+		if (destinationType == null) {
+			log.warn("Unable to determine destination type for "
+					+ mdb.getName());
+			return false;
+		} else if (destinationType.equals(Queue.class.getName())) {
+			// Its a queue
+		} else if (destinationType.equals(Topic.class.getName())) {
+			isTopic = true;
+		} else {
+			log.warn("Unknown destination type '" + destinationType + "' for "
+					+ mdb.getName());
+			return false;
+		}
+
+		if (isTopic) {
+			System.out.println("Create topic " + destinationName);
+		} else {
+			System.out.println("Create queue " + destinationName);
+		}
+
+		return true;
+	}
+
+	/**
+	 * Get an activation config property
+	 * 
+	 * @param properties
+	 *            the properties
+	 * @param name
+	 *            the name
+	 * @return the property or null if not found
+	 */
+	protected static String getActivationConfigProperty(
+			ActivationConfigPropertiesMetaData properties, String name) {
+		ActivationConfigPropertyMetaData property = properties.get(name);
+		if (property == null)
+			return null;
+		return property.getValue();
+	}
+
+}

Added: branches/Branch_Hornet_Temporary_2/hornetq-int/src/main/java/org/jboss/as/integration/hornetq/deployers/HornetQJMSDeployment.java
===================================================================
--- branches/Branch_Hornet_Temporary_2/hornetq-int/src/main/java/org/jboss/as/integration/hornetq/deployers/HornetQJMSDeployment.java	                        (rev 0)
+++ branches/Branch_Hornet_Temporary_2/hornetq-int/src/main/java/org/jboss/as/integration/hornetq/deployers/HornetQJMSDeployment.java	2010-02-07 03:29:16 UTC (rev 100658)
@@ -0,0 +1,149 @@
+package org.jboss.as.integration.hornetq.deployers;
+
+import org.hornetq.jms.server.JMSServerManager;
+import org.hornetq.jms.server.config.ConnectionFactoryConfiguration;
+import org.hornetq.jms.server.config.JMSConfiguration;
+import org.hornetq.jms.server.config.QueueConfiguration;
+import org.hornetq.jms.server.config.TopicConfiguration;
+import org.jboss.beans.metadata.api.annotations.Start;
+import org.jboss.beans.metadata.api.annotations.Stop;
+import org.jboss.logging.Logger;
+
+/** 
+ * 
+ * Objects of this class are created by the MicroContainer through BeanMetadataClass at {@link HornetQJMSRealDeployer}
+ * 
+ * @see HornetQJMSRealDeployer
+ * */
+public class HornetQJMSDeployment
+{
+
+    private static final Logger log = Logger.getLogger(HornetQJMSDeployment.class);
+
+    private JMSServerManager jmsServer;
+
+    private String name;
+
+    private JMSConfiguration jmsConfig;
+
+    public JMSConfiguration getJmsConfig()
+    {
+        return jmsConfig;
+    }
+
+    public void setJmsConfig(JMSConfiguration jmsConfig)
+    {
+        this.jmsConfig = jmsConfig;
+    }
+
+    public JMSServerManager getJmsServer()
+    {
+        return jmsServer;
+    }
+
+    public void setJmsServer(JMSServerManager jmsServer)
+    {
+        this.jmsServer = jmsServer;
+    }
+
+    public void setName(String name)
+    {
+        this.name = name;
+    }
+
+    public String getName()
+    {
+        return name;
+    }
+
+    @Start
+    public void start()
+    {
+        log.info("Being started!");
+
+        for (ConnectionFactoryConfiguration cfConfig : jmsConfig.getConnectionFactoryConfigurations())
+        {
+            log.info("Deploying ConnectionFactory " + cfConfig.getName());
+            try
+            {
+                jmsServer.createConnectionFactory(cfConfig);
+            } catch (Exception e)
+            {
+                log.warn("Error deploying ConnectionFactory: " + cfConfig.getName(), e);
+            }
+        }
+
+        for (QueueConfiguration queueConfig : jmsConfig.getQueueConfigurations())
+        {
+            for (String jndiBinding : queueConfig.getBindings())
+            {
+                log.info("Deploying Queue " + queueConfig.getName() + " on jndiName " + jndiBinding);
+                try
+                {
+                    jmsServer.createQueue(queueConfig.getName(), jndiBinding, queueConfig.getSelector(), queueConfig.isDurable());
+                } catch (Exception e)
+                {
+                    log.warn("Error deploying Queue: " + queueConfig.getName(), e);
+                }
+            }
+        }
+
+        for (TopicConfiguration topicConfig : jmsConfig.getTopicConfigurations())
+        {
+            for (String jndiBinding : topicConfig.getBindings())
+            {
+                log.info("Deploying Topic " + topicConfig.getName() + " on jndiName " + jndiBinding);
+                try
+                {
+                    jmsServer.createTopic(topicConfig.getName(), jndiBinding);
+                } catch (Exception e)
+                {
+                    log.warn("Error deploying Queue: " + topicConfig.getName(), e);
+                }
+            }
+        }
+    }
+
+    @Stop
+    public void stop()
+    {
+        log.info("Being stopped");
+
+        for (ConnectionFactoryConfiguration cfConfig : jmsConfig.getConnectionFactoryConfigurations())
+        {
+            log.info("Destroying ConnectionFactory " + cfConfig.getName());
+            try
+            {
+                jmsServer.destroyConnectionFactory(cfConfig.getName());
+            } catch (Exception e)
+            {
+                log.warn("Error destroying ConnectionFactory: " + cfConfig.getName(), e);
+            }
+        }
+
+        for (QueueConfiguration queueConfig : jmsConfig.getQueueConfigurations())
+        {
+            log.info("Destroying Queue " + queueConfig.getName());
+            try
+            {
+                jmsServer.destroyQueue(queueConfig.getName());
+            } catch (Exception e)
+            {
+                log.warn("Error deploying Queue: " + queueConfig.getName(), e);
+            }
+        }
+
+        for (TopicConfiguration topicConfig : jmsConfig.getTopicConfigurations())
+        {
+            log.info("Destroying Topic " + topicConfig.getName());
+            try
+            {
+                jmsServer.destroyTopic(topicConfig.getName());
+            } catch (Exception e)
+            {
+                log.warn("Error destroying Topic: " + topicConfig.getName(), e);
+            }
+        }
+    }
+
+}

Added: branches/Branch_Hornet_Temporary_2/hornetq-int/src/main/java/org/jboss/as/integration/hornetq/deployers/HornetQJMSParserDeployer.java
===================================================================
--- branches/Branch_Hornet_Temporary_2/hornetq-int/src/main/java/org/jboss/as/integration/hornetq/deployers/HornetQJMSParserDeployer.java	                        (rev 0)
+++ branches/Branch_Hornet_Temporary_2/hornetq-int/src/main/java/org/jboss/as/integration/hornetq/deployers/HornetQJMSParserDeployer.java	2010-02-07 03:29:16 UTC (rev 100658)
@@ -0,0 +1,69 @@
+package org.jboss.as.integration.hornetq.deployers;
+
+import java.io.InputStream;
+
+import org.hornetq.core.config.Configuration;
+import org.hornetq.jms.server.JMSServerConfigParser;
+import org.hornetq.jms.server.JMSServerManager;
+import org.hornetq.jms.server.config.JMSConfiguration;
+import org.hornetq.jms.server.impl.JMSServerConfigParserImpl;
+import org.jboss.deployers.vfs.spi.deployer.AbstractVFSParsingDeployer;
+import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
+import org.jboss.logging.Logger;
+import org.jboss.virtual.VirtualFile;
+
+/**
+ * This Deployer will take a hornetq-jms.xml parse the JMSConfiguration and
+ * attach the JMSConfiguration output into the deployment unit. Another deployer
+ * that takes JMSConfiguration as an input will then take over and install the
+ * queues at the proper places.
+ * 
+ * This is done through the VFS Deployment Framework. Othe projects may choose to deploy a HornetQ JMSConfiguration directly.
+ * 
+ * @see HornetQJMSRealDeployer
+ * 
+ * @author <mailto:clebert.suconic at jboss.org">Clebert Suconic</a>
+ * 
+ */
+public class HornetQJMSParserDeployer extends AbstractVFSParsingDeployer<JMSConfiguration>
+{
+
+    private static final Logger log = Logger.getLogger(HornetQJMSParserDeployer.class);
+
+    public static final String FILENAME = "hornetq-jms.xml";
+
+    private final JMSServerConfigParser jmsConfigParser;
+
+    public HornetQJMSParserDeployer()
+    {
+        super(JMSConfiguration.class);
+
+        this.jmsConfigParser = new JMSServerConfigParserImpl(null);
+
+        setName(FILENAME);
+    }
+
+    @Override
+    protected JMSConfiguration parse(VFSDeploymentUnit unit, VirtualFile file, JMSConfiguration root) throws Exception
+    {
+
+        InputStream deploymentStream = null;
+
+        try
+        {
+            deploymentStream = file.openStream();
+            JMSConfiguration config = jmsConfigParser.parseConfiguration(deploymentStream);
+            log.info("Config = " + config);
+
+            return config;
+        } finally
+        {
+            try
+            {
+                deploymentStream.close();
+            } catch (Exception ignored)
+            {
+            }
+        }
+    }
+}

Added: branches/Branch_Hornet_Temporary_2/hornetq-int/src/main/java/org/jboss/as/integration/hornetq/deployers/HornetQJMSRealDeployer.java
===================================================================
--- branches/Branch_Hornet_Temporary_2/hornetq-int/src/main/java/org/jboss/as/integration/hornetq/deployers/HornetQJMSRealDeployer.java	                        (rev 0)
+++ branches/Branch_Hornet_Temporary_2/hornetq-int/src/main/java/org/jboss/as/integration/hornetq/deployers/HornetQJMSRealDeployer.java	2010-02-07 03:29:16 UTC (rev 100658)
@@ -0,0 +1,54 @@
+package org.jboss.as.integration.hornetq.deployers;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.hornetq.jms.server.config.JMSConfiguration;
+import org.jboss.beans.metadata.plugins.builder.BeanMetaDataBuilderFactory;
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.deployers.vfs.spi.deployer.AbstractSimpleVFSRealDeployer;
+import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
+
+/**
+ * In a regular flow HornetQJMSParserDeployer will parer hornetq-jms.xml and it
+ * will jump-start the deployment for JMSConfiguration.class. This deployer will
+ * then be called directly by the VFS Deployment Framework, as the Input object
+ * for this is a JMSConfiguration class.
+ * 
+ * In an alternate flow, other deployers (e.g. TorqueBox) may install a JMSConfiguration object
+ * directly and this deployer will take over without the need of a real XML file
+ * 
+ * @author <mailto:clebert.suconic at jboss.org">Clebert Suconic</a>
+ * 
+ */
+public class HornetQJMSRealDeployer extends AbstractSimpleVFSRealDeployer<JMSConfiguration>
+{
+
+    private final AtomicInteger idGenerator = new AtomicInteger(1);
+
+    public HornetQJMSRealDeployer()
+    {
+        super(JMSConfiguration.class);
+        addOutput(BeanMetaData.class);
+    }
+
+    @Override
+    public void deploy(VFSDeploymentUnit unit, JMSConfiguration config) throws DeploymentException
+    {
+        String name = "HornetQJMSDeployment::" + idGenerator.incrementAndGet();
+
+        BeanMetaDataBuilder builder = BeanMetaDataBuilderFactory.createBuilder(name, HornetQJMSDeployment.class.getName());
+
+        builder.addPropertyMetaData("name", name);
+
+        builder.addPropertyMetaData("jmsServer", builder.createInject("JMSServerManager"));
+
+        builder.addPropertyMetaData("jmsConfig", config);
+
+        BeanMetaData bean = builder.getBeanMetaData();
+
+        unit.addAttachment(name, bean);
+    }
+
+}




More information about the jboss-cvs-commits mailing list