[jboss-cvs] JBossAS SVN: r97262 - projects/snowdrop/trunk/vfs/src/main/java/org/jboss/spring/vfs/context.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Dec 1 17:51:31 EST 2009


Author: marius.bogoevici
Date: 2009-12-01 17:51:31 -0500 (Tue, 01 Dec 2009)
New Revision: 97262

Added:
   projects/snowdrop/trunk/vfs/src/main/java/org/jboss/spring/vfs/context/ContextClassUtil.java
   projects/snowdrop/trunk/vfs/src/main/java/org/jboss/spring/vfs/context/DelegatingContextLoaderListener.java
   projects/snowdrop/trunk/vfs/src/main/java/org/jboss/spring/vfs/context/DelegatingDispatcherServlet.java
Log:
Adding a ContextLoaderListener and DispatcherServlet that allow to detect the presence of JBoss AS 5 and to instantiate the appropriate context class.

Added: projects/snowdrop/trunk/vfs/src/main/java/org/jboss/spring/vfs/context/ContextClassUtil.java
===================================================================
--- projects/snowdrop/trunk/vfs/src/main/java/org/jboss/spring/vfs/context/ContextClassUtil.java	                        (rev 0)
+++ projects/snowdrop/trunk/vfs/src/main/java/org/jboss/spring/vfs/context/ContextClassUtil.java	2009-12-01 22:51:31 UTC (rev 97262)
@@ -0,0 +1,45 @@
+package org.jboss.spring.vfs.context;
+
+import org.springframework.context.ApplicationContextException;
+import org.springframework.util.ClassUtils;
+import org.springframework.util.ReflectionUtils;
+
+/**
+ * @author Marius Bogoevici
+ */
+public class ContextClassUtil
+{
+   static final String VFS_APPLICATION_CONTEXT_CLASS_NAME = "org.jboss.spring.vfs.context.VFSXmlWebApplicationContext";
+
+   public static boolean isJBossAS5orHigher()
+   {
+      try
+      {
+         Class jBossVersionClass = DelegatingContextLoaderListener.class.getClassLoader().loadClass("org.jboss.Version");
+         Object versionObject = ReflectionUtils.invokeMethod(ReflectionUtils.findMethod(jBossVersionClass, "getInstance"), null);
+         Integer majorVersion = (Integer) ReflectionUtils.invokeMethod(ReflectionUtils.findMethod(jBossVersionClass, "getMajor"), versionObject);
+         // For JBoss AS versions 5 and higher
+         if (majorVersion >= 5) {
+            return true;
+         }
+      }
+      catch (ClassNotFoundException e)
+      {
+         // do nothing;
+      }
+      return false;
+   }
+
+   public static Class getVFSWebContextClass()
+   {
+      try
+      {
+            return ClassUtils.forName(VFS_APPLICATION_CONTEXT_CLASS_NAME);
+      }
+      catch (ClassNotFoundException ex)
+      {
+         throw new ApplicationContextException(
+               "Failed to load custom context class [" + VFS_APPLICATION_CONTEXT_CLASS_NAME + "]", ex);
+      }
+   }
+}

Added: projects/snowdrop/trunk/vfs/src/main/java/org/jboss/spring/vfs/context/DelegatingContextLoaderListener.java
===================================================================
--- projects/snowdrop/trunk/vfs/src/main/java/org/jboss/spring/vfs/context/DelegatingContextLoaderListener.java	                        (rev 0)
+++ projects/snowdrop/trunk/vfs/src/main/java/org/jboss/spring/vfs/context/DelegatingContextLoaderListener.java	2009-12-01 22:51:31 UTC (rev 97262)
@@ -0,0 +1,37 @@
+package org.jboss.spring.vfs.context;
+
+import javax.servlet.ServletContext;
+
+import org.springframework.context.ApplicationContextException;
+import org.springframework.web.context.ContextLoader;
+import org.springframework.web.context.ContextLoaderListener;
+
+/**
+ * @author Marius Bogoevici
+ */
+public class DelegatingContextLoaderListener extends ContextLoaderListener
+{
+
+   @Override
+   protected ContextLoader createContextLoader()
+   {
+      if (!ContextClassUtil.isJBossAS5orHigher())
+      {
+         return super.createContextLoader();
+      }
+      else
+      {
+         return new VFSContextLoader();
+      }
+   }
+
+   private static class VFSContextLoader extends ContextLoader
+   {
+      @Override
+      protected Class determineContextClass(ServletContext servletContext) throws ApplicationContextException
+      {
+         return ContextClassUtil.getVFSWebContextClass();
+
+      }
+   }
+}

Added: projects/snowdrop/trunk/vfs/src/main/java/org/jboss/spring/vfs/context/DelegatingDispatcherServlet.java
===================================================================
--- projects/snowdrop/trunk/vfs/src/main/java/org/jboss/spring/vfs/context/DelegatingDispatcherServlet.java	                        (rev 0)
+++ projects/snowdrop/trunk/vfs/src/main/java/org/jboss/spring/vfs/context/DelegatingDispatcherServlet.java	2009-12-01 22:51:31 UTC (rev 97262)
@@ -0,0 +1,19 @@
+package org.jboss.spring.vfs.context;
+
+import org.springframework.web.servlet.DispatcherServlet;
+
+/**
+ * @author Marius Bogoevici
+ */
+public class DelegatingDispatcherServlet extends DispatcherServlet
+{
+
+   @Override
+   public Class getContextClass()
+   {
+      if (ContextClassUtil.isJBossAS5orHigher())
+         return ContextClassUtil.getVFSWebContextClass();
+      else
+         return super.getContextClass();
+   }
+}




More information about the jboss-cvs-commits mailing list