[jboss-cvs] JBossAS SVN: r105978 - in projects/ejb3/trunk: timerservice-deployer and 12 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sat Jun 12 09:13:18 EDT 2010


Author: jaikiran
Date: 2010-06-12 09:13:17 -0400 (Sat, 12 Jun 2010)
New Revision: 105978

Added:
   projects/ejb3/trunk/timerservice-deployer/
   projects/ejb3/trunk/timerservice-deployer/pom.xml
   projects/ejb3/trunk/timerservice-deployer/src/
   projects/ejb3/trunk/timerservice-deployer/src/assembly/
   projects/ejb3/trunk/timerservice-deployer/src/assembly/package-assembler.xml
   projects/ejb3/trunk/timerservice-deployer/src/assembly/package.xml
   projects/ejb3/trunk/timerservice-deployer/src/main/
   projects/ejb3/trunk/timerservice-deployer/src/main/java/
   projects/ejb3/trunk/timerservice-deployer/src/main/java/org/
   projects/ejb3/trunk/timerservice-deployer/src/main/java/org/jboss/
   projects/ejb3/trunk/timerservice-deployer/src/main/java/org/jboss/ejb3/
   projects/ejb3/trunk/timerservice-deployer/src/main/java/org/jboss/ejb3/timerservice/
   projects/ejb3/trunk/timerservice-deployer/src/main/java/org/jboss/ejb3/timerservice/deployer/
   projects/ejb3/trunk/timerservice-deployer/src/main/java/org/jboss/ejb3/timerservice/deployer/AutoTimerInitializer.java
   projects/ejb3/trunk/timerservice-deployer/src/main/java/org/jboss/ejb3/timerservice/deployer/TimerServiceDeployer.java
   projects/ejb3/trunk/timerservice-deployer/src/main/resources/
   projects/ejb3/trunk/timerservice-deployer/src/main/resources/META-INF/
   projects/ejb3/trunk/timerservice-deployer/src/main/resources/META-INF/jboss-ejb3-timerservice-deployer-jboss-beans.xml
   projects/ejb3/trunk/timerservice-deployer/src/test/
   projects/ejb3/trunk/timerservice-deployer/src/test/java/
   projects/ejb3/trunk/timerservice-deployer/src/test/resources/
Log:
Initial commit for timerservice-deployer

Added: projects/ejb3/trunk/timerservice-deployer/pom.xml
===================================================================
--- projects/ejb3/trunk/timerservice-deployer/pom.xml	                        (rev 0)
+++ projects/ejb3/trunk/timerservice-deployer/pom.xml	2010-06-12 13:13:17 UTC (rev 105978)
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+    <!--
+    vi:ts=2:sw=2:expandtab:
+    -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+	<parent>
+		<groupId>org.jboss</groupId>
+		<artifactId>jboss-parent</artifactId>
+		<version>5</version>
+	</parent>
+    
+    
+    <!-- Model Information -->
+    <modelVersion>4.0.0</modelVersion>
+
+    <!-- Artifact Information  -->
+    <groupId>org.jboss.ejb3</groupId>
+    <artifactId>jboss-ejb3-timerservice-deployer</artifactId>
+    <packaging>jar</packaging>
+    <version>1.0.0-SNAPSHOT</version>
+    <name>JBoss EJB3.1+ Timerservice deployer</name>
+    <url>http://www.jboss.org</url>
+    <description>MC based deployer(s) for timerservice functionality for EJB containers</description>
+    
+    <properties>
+        <version.org.jboss.deployers>2.2.0.Alpha5</version.org.jboss.deployers>
+        <version.org.jboss.kernel>2.2.0.Alpha10</version.org.jboss.kernel>
+        <version.org.jboss.ejb3.core>1.4.1-SNAPSHOT</version.org.jboss.ejb3.core>
+        <version.org.jboss.ejb.metadata>2.0.0-alpha-16</version.org.jboss.ejb.metadata>
+        <version.junit>4.7</version.junit>
+    </properties>
+    
+    <build>
+        <plugins>
+            <!-- Assembly Plugin -->
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>2.2-beta-4</version>
+                <executions>
+                    <!--  Build timerservice deployer "package" -->
+                  <execution>
+                    <id>build-timerservice-deployer-package</id> 
+                    <phase>package</phase>
+                    <goals>
+                      <goal>single</goal>
+                    </goals>
+                  </execution>
+                </executions>
+                <configuration>
+                  <descriptors>
+                    <descriptor>src/assembly/package-assembler.xml</descriptor>
+                  </descriptors>
+                </configuration>
+            </plugin>
+			<plugin>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<configuration>
+					<source>1.6</source>
+					<target>1.6</target>
+				</configuration>
+			</plugin>
+
+			<plugin>
+				<artifactId>maven-enforcer-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>enforce-jdk6</id>
+						<goals>
+							<goal>enforce</goal>
+						</goals>
+						<configuration>
+							<rules>
+								<requireJavaVersion>
+									<version>[1.6,)</version>
+								</requireJavaVersion>
+							</rules>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+            
+        </plugins>
+    
+    </build>
+    
+    <dependencies>
+
+        <dependency>
+            <groupId>org.jboss.metadata</groupId>
+            <artifactId>jboss-metadata-ejb</artifactId>
+            <version>${version.org.jboss.ejb.metadata}</version>
+        </dependency>
+        <dependency>
+        	<groupId>org.jboss.ejb3</groupId>
+        	<artifactId>jboss-ejb3-common</artifactId>
+        	<version>1.0.0</version>
+        </dependency>
+        <dependency>
+        	<groupId>org.jboss.ejb3</groupId>
+        	<artifactId>jboss-ejb3-core</artifactId>
+        	<version>${version.org.jboss.ejb3.core}</version>
+        </dependency>
+        <dependency>
+        	<groupId>org.jboss.ejb3.timerservice</groupId>
+        	<artifactId>jboss-ejb3-timerservice-extension</artifactId>
+        	<version>1.0.0-SNAPSHOT</version>
+        </dependency>
+        <!-- JBoss deployers -->
+        <dependency>
+        	<groupId>org.jboss.kernel</groupId>
+        	<artifactId>jboss-kernel</artifactId>
+        	<version>${version.org.jboss.kernel}</version>
+        </dependency>
+        <dependency>
+          <groupId>org.jboss.deployers</groupId>
+          <artifactId>jboss-deployers-spi</artifactId>
+          <version>${version.org.jboss.deployers}</version>
+        </dependency>
+        <dependency>
+          <groupId>org.jboss.deployers</groupId>
+          <artifactId>jboss-deployers-core-spi</artifactId>
+          <version>${version.org.jboss.deployers}</version>
+        </dependency>
+        <dependency>
+          <groupId>org.jboss.deployers</groupId>
+          <artifactId>jboss-deployers-structure-spi</artifactId>
+          <version>${version.org.jboss.deployers}</version>
+        </dependency>
+        
+        <!-- ***************************** -->
+        <!--  Test dependencies -->
+        <!-- ***************************** -->
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${version.junit}</version>
+            <scope>test</scope>
+        </dependency>
+    
+    </dependencies>
+
+</project>	

Added: projects/ejb3/trunk/timerservice-deployer/src/assembly/package-assembler.xml
===================================================================
--- projects/ejb3/trunk/timerservice-deployer/src/assembly/package-assembler.xml	                        (rev 0)
+++ projects/ejb3/trunk/timerservice-deployer/src/assembly/package-assembler.xml	2010-06-12 13:13:17 UTC (rev 105978)
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<assembly xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/assembly-1.1.1.xsd">
+	<id>package</id>
+	<formats>
+		<format>jar</format>
+	</formats>
+	<includeBaseDirectory>false</includeBaseDirectory>
+	<fileSets>
+		<fileSet>
+			<directory>src/assembly</directory>
+			<filtered>true</filtered>
+			<includes>
+				<include>package.xml</include>
+			</includes>
+			<outputDirectory>.</outputDirectory>
+		</fileSet>
+
+	</fileSets>
+	<dependencySets>
+		<dependencySet>
+			<outputFileNameMapping>${artifact.artifactId}.${artifact.extension}</outputFileNameMapping>
+			<useProjectArtifact>true</useProjectArtifact>
+			<includes>
+				<include>org.jboss.ejb3:jboss-ejb3-timerservice-deployer:jar</include>
+				<include>org.jboss.ejb3:jboss-ejb3-core:jar</include>
+			</includes>
+
+		</dependencySet>
+	</dependencySets>
+</assembly>

Added: projects/ejb3/trunk/timerservice-deployer/src/assembly/package.xml
===================================================================
--- projects/ejb3/trunk/timerservice-deployer/src/assembly/package.xml	                        (rev 0)
+++ projects/ejb3/trunk/timerservice-deployer/src/assembly/package.xml	2010-06-12 13:13:17 UTC (rev 105978)
@@ -0,0 +1,29 @@
+<?xml version='1.0' encoding='UTF-8'?>
+	<!--
+		~ JBoss, Home of Professional Open Source ~ Copyright 2005, JBoss
+		Inc., and individual contributors as indicated ~ by the @authors tag.
+		See the copyright.txt in the distribution for a ~ full listing of
+		individual contributors. ~ ~ This is free software; you can
+		redistribute it and/or modify it ~ under the terms of the GNU Lesser
+		General Public License as ~ published by the Free Software Foundation;
+		either version 2.1 of ~ the License, or (at your option) any later
+		version. ~ ~ This software is distributed in the hope that it will be
+		useful, ~ but WITHOUT ANY WARRANTY; without even the implied warranty
+		of ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+		~ Lesser General Public License for more details. ~ ~ You should have
+		received a copy of the GNU Lesser General Public ~ License along with
+		this software; if not, write to the Free ~ Software Foundation, Inc.,
+		51 Franklin St, Fifth Floor, Boston, MA ~ 02110-1301 USA, or see the
+		FSF site: http://www.fsf.org.
+	-->
+<package name="${project.groupId}:${project.artifactId}"
+	version="${project.version}" xmlns="org/jboss/packagemanager/package">
+
+	<file name="jboss-ejb3-core.jar" dest-path="common/lib" />
+	<!-- Place  in deployers of AS -->
+	
+	<file name="jboss-ejb3-timerservice-deployer.jar" dest-path="server/default/deployers" />
+	<file name="jboss-ejb3-timerservice-deployer.jar" dest-path="server/all/deployers" />
+	
+
+</package>
\ No newline at end of file

Added: projects/ejb3/trunk/timerservice-deployer/src/main/java/org/jboss/ejb3/timerservice/deployer/AutoTimerInitializer.java
===================================================================
--- projects/ejb3/trunk/timerservice-deployer/src/main/java/org/jboss/ejb3/timerservice/deployer/AutoTimerInitializer.java	                        (rev 0)
+++ projects/ejb3/trunk/timerservice-deployer/src/main/java/org/jboss/ejb3/timerservice/deployer/AutoTimerInitializer.java	2010-06-12 13:13:17 UTC (rev 105978)
@@ -0,0 +1,127 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.timerservice.deployer;
+
+import java.util.List;
+
+import javax.ejb.TimerConfig;
+import javax.ejb.TimerService;
+
+import org.jboss.beans.metadata.api.annotations.Start;
+import org.jboss.ejb3.EJBContainer;
+import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
+import org.jboss.metadata.ejb.jboss.JBossMessageDrivenBean31MetaData;
+import org.jboss.metadata.ejb.jboss.JBossSessionBean31MetaData;
+import org.jboss.metadata.ejb.spec.MethodParametersMetaData;
+import org.jboss.metadata.ejb.spec.TimerMetaData;
+
+/**
+ * TimerServiceBootstrap
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class AutoTimerInitializer
+{
+   private EJBContainer container;
+
+   public AutoTimerInitializer()
+   {
+
+   }
+
+   public AutoTimerInitializer(EJBContainer container)
+   {
+      this.container = container;
+   }
+
+   public void setContainer(EJBContainer container)
+   {
+      this.container = container;
+   }
+
+   public EJBContainer getContainer()
+   {
+      return this.container;
+   }
+
+   @Start
+   public void initializeAutoTimers()
+   {
+      if (this.container == null)
+      {
+         throw new IllegalStateException("Cannot initialize auto-timers since container is not present");
+      }
+
+      JBossEnterpriseBeanMetaData enterpriseBeanMetaData = this.container.getXml();
+      if (enterpriseBeanMetaData.getJBossMetaData().isEJB31() == false)
+      {
+         return;
+      }
+      List<TimerMetaData> autoTimersMetaData = null;
+      if (enterpriseBeanMetaData.isSession())
+      {
+         JBossSessionBean31MetaData sessionBean = (JBossSessionBean31MetaData) enterpriseBeanMetaData;
+         if (sessionBean.isStateful())
+         {
+            return;
+         }
+         autoTimersMetaData = sessionBean.getTimers();
+      }
+      else if (enterpriseBeanMetaData.isMessageDriven())
+      {
+         JBossMessageDrivenBean31MetaData mdb = (JBossMessageDrivenBean31MetaData) enterpriseBeanMetaData;
+         autoTimersMetaData = mdb.getTimers();
+      }
+
+      if (autoTimersMetaData == null)
+      {
+         return;
+      }
+      TimerService timerService = this.container.getTimerService();
+
+      if (timerService instanceof org.jboss.ejb3.timerservice.extension.TimerService == false)
+      {
+         // can't do anything about this
+         return;
+      }
+      org.jboss.ejb3.timerservice.extension.TimerService ejb31TimerService = (org.jboss.ejb3.timerservice.extension.TimerService) timerService;
+      for (TimerMetaData autoTimerMetaData : autoTimersMetaData)
+      {
+         TimerConfig timerConfig = new TimerConfig();
+         timerConfig.setPersistent(autoTimerMetaData.isPersistent());
+         timerConfig.setInfo(autoTimerMetaData.getInfo());
+
+         String timeoutMethodName = autoTimerMetaData.getTimeoutMethod().getMethodName();
+         MethodParametersMetaData methodParams = autoTimerMetaData.getTimeoutMethod().getMethodParams();
+         String[] timeoutMethodParams = null;
+         if (methodParams != null)
+         {
+            timeoutMethodParams = methodParams.toArray(new String[methodParams.size()]);
+         }
+         ejb31TimerService.getAutoTimer(autoTimerMetaData.getScheduleExpression(), timerConfig, timeoutMethodName,
+               timeoutMethodParams);
+      }
+
+   }
+
+}

Added: projects/ejb3/trunk/timerservice-deployer/src/main/java/org/jboss/ejb3/timerservice/deployer/TimerServiceDeployer.java
===================================================================
--- projects/ejb3/trunk/timerservice-deployer/src/main/java/org/jboss/ejb3/timerservice/deployer/TimerServiceDeployer.java	                        (rev 0)
+++ projects/ejb3/trunk/timerservice-deployer/src/main/java/org/jboss/ejb3/timerservice/deployer/TimerServiceDeployer.java	2010-06-12 13:13:17 UTC (rev 105978)
@@ -0,0 +1,124 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.timerservice.deployer;
+
+
+import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.deployers.spi.deployer.DeploymentStages;
+import org.jboss.deployers.spi.deployer.helpers.AbstractDeployer;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.ejb3.common.deployers.spi.AttachmentNames;
+import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
+import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeansMetaData;
+import org.jboss.metadata.ejb.jboss.JBossMetaData;
+import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
+
+/**
+ * TimerServiceDeployer
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class TimerServiceDeployer extends AbstractDeployer
+{
+
+   /**
+    * Logger
+    */
+   private Logger logger = Logger.getLogger(TimerServiceDeployer.class);
+   
+   private static final String MC_BEAN_PREFIX = "auto-timer-initializer:";
+   
+   public TimerServiceDeployer()
+   {
+      setStage(DeploymentStages.REAL);
+      setInput(JBossMetaData.class);
+      addInput(AttachmentNames.PROCESSED_METADATA);
+      // we deploy MC beans
+      addOutput(BeanMetaData.class);
+   }
+
+   @Override
+   public void deploy(DeploymentUnit unit) throws DeploymentException
+   {
+      if (logger.isTraceEnabled())
+      {
+         logger.trace("Deploying unit " + unit.getName());
+      }
+      // get processed metadata
+      JBossMetaData metaData = unit.getAttachment(AttachmentNames.PROCESSED_METADATA, JBossMetaData.class);
+      if (metaData == null)
+      {
+         if (logger.isTraceEnabled())
+            logger.trace("No JBossMetadata for unit : " + unit.getName());
+         return;
+      }
+      if (metaData.isEJB3x() == false)
+      {
+         return;
+      }
+      // work on the ejbs
+      JBossEnterpriseBeansMetaData beans = metaData.getEnterpriseBeans();
+      for (JBossEnterpriseBeanMetaData bean : beans)
+      {
+         if (bean.isSession())
+         {
+            JBossSessionBeanMetaData sessionBean = (JBossSessionBeanMetaData) bean;
+            if (sessionBean.isStateful())
+            {
+               continue;
+            }
+         }
+         else if (bean.isEntity() || bean.isService())
+         {
+            continue;
+         }
+         // process
+         String mcBeanName = MC_BEAN_PREFIX + unit.getName() + "$" + bean.getEjbName();
+         BeanMetaData bmd = this.createAutoTimerInitializer(mcBeanName, bean);
+         unit.addAttachment(BeanMetaData.class + ":" + mcBeanName, bmd);
+      }
+   }
+
+   private BeanMetaData createAutoTimerInitializer(String mcBeanName, JBossEnterpriseBeanMetaData bean)
+   {
+      AutoTimerInitializer autoTimerInitializer = new AutoTimerInitializer();
+      
+      BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(mcBeanName, autoTimerInitializer.getClass().getName());
+      builder.setConstructorValue(autoTimerInitializer);
+
+      // add dependency
+      AbstractInjectionValueMetaData injectMetaData = new AbstractInjectionValueMetaData(bean.getContainerName());
+      injectMetaData.setDependentState(ControllerState.INSTALLED);
+
+      // Too bad we have to know the field name. Need to do more research on MC to see if we can
+      // add property metadata based on type instead of field name.
+      builder.addPropertyMetaData("container", injectMetaData);
+
+      return builder.getBeanMetaData();
+   }
+}

Added: projects/ejb3/trunk/timerservice-deployer/src/main/resources/META-INF/jboss-ejb3-timerservice-deployer-jboss-beans.xml
===================================================================
--- projects/ejb3/trunk/timerservice-deployer/src/main/resources/META-INF/jboss-ejb3-timerservice-deployer-jboss-beans.xml	                        (rev 0)
+++ projects/ejb3/trunk/timerservice-deployer/src/main/resources/META-INF/jboss-ejb3-timerservice-deployer-jboss-beans.xml	2010-06-12 13:13:17 UTC (rev 105978)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+
+    
+    <!-- EJB3.1 timerservice deployer -->
+    <bean name="TimerServiceDeployer" class="org.jboss.ejb3.timerservice.deployer.TimerServiceDeployer"/>
+       
+    
+</deployment>
\ No newline at end of file



More information about the jboss-cvs-commits mailing list