[jboss-cvs] JBossAS SVN: r65301 - in trunk/ejb3/src/main/org/jboss: ejb3/dependency and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Sep 11 13:24:44 EDT 2007


Author: scott.stark at jboss.org
Date: 2007-09-11 13:24:43 -0400 (Tue, 11 Sep 2007)
New Revision: 65301

Added:
   trunk/ejb3/src/main/org/jboss/ejb3/dependency/JndiDemandMetaData.java
Modified:
   trunk/ejb3/src/main/org/jboss/ejb3/MCDependencyPolicy.java
   trunk/ejb3/src/main/org/jboss/ejb3/deployers/JBoss5DependencyPolicy.java
   trunk/ejb3/src/main/org/jboss/injection/AbstractHandler.java
Log:
Use a property DemandMetaData implementation for the jndi lookup that uses the container class loader.

Modified: trunk/ejb3/src/main/org/jboss/ejb3/MCDependencyPolicy.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/MCDependencyPolicy.java	2007-09-11 17:02:26 UTC (rev 65300)
+++ trunk/ejb3/src/main/org/jboss/ejb3/MCDependencyPolicy.java	2007-09-11 17:24:43 UTC (rev 65301)
@@ -53,8 +53,12 @@
    
    public void addDependency(String dependency)
    {
-      dependencies.add(new AbstractDemandMetaData(dependency));
+      addDependency(new AbstractDemandMetaData(dependency));
    }
+   public void addDependency(DemandMetaData dependency)
+   {
+      dependencies.add(dependency);      
+   }
 
    public void addDatasource(String jndiName)
    {
@@ -117,7 +121,7 @@
          dependencies.add(new EjbLinkDemandMetaData(component, ejbLink));
    }
    
-   public void addJNDIName(String name)
+   public void addJNDIName(String name, ClassLoader loader)
    {
       assert name != null : "name is null";
       assert name.length() > 0 : "name is empty";

Added: trunk/ejb3/src/main/org/jboss/ejb3/dependency/JndiDemandMetaData.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/dependency/JndiDemandMetaData.java	                        (rev 0)
+++ trunk/ejb3/src/main/org/jboss/ejb3/dependency/JndiDemandMetaData.java	2007-09-11 17:24:43 UTC (rev 65301)
@@ -0,0 +1,162 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2007, Red Hat Middleware LLC, 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 org.jboss.ejb3.dependency;
+
+import java.io.Serializable;
+import java.util.Iterator;
+
+import javax.naming.InitialContext;
+
+import org.jboss.beans.metadata.spi.DemandMetaData;
+import org.jboss.beans.metadata.spi.MetaDataVisitor;
+import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
+import org.jboss.dependency.plugins.AbstractDependencyItem;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.DependencyItem;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.util.JBossObject;
+import org.jboss.util.JBossStringBuilder;
+
+/**
+ * A DemandMetaData/DependencyItem implementation for a jndiName/ClassLoader
+ * pair. This is a simple lookup into the default IntialContext with the
+ * JndiDemandMetaData class loader set as the TCL.
+ *
+ * @author Scott.Stark at jboss.org
+ * @version $Revision: $
+ */
+public class JndiDemandMetaData extends JBossObject
+   implements DemandMetaData, Serializable
+{
+   private static final long serialVersionUID = 1L;
+   
+   /** The demand */
+   private String jndiName;
+   private Object demand;
+   private ClassLoader loader;
+   private ControllerState whenRequired = ControllerState.INSTALLED;
+
+   /**
+    * 
+    */
+   public JndiDemandMetaData(String jndiName, ClassLoader loader)
+   {
+      this.jndiName = jndiName;
+      this.loader = loader;
+   }
+
+   public Object getDemand()
+   {
+      return demand;
+   }
+
+   public ControllerState getWhenRequired()
+   {
+      return ControllerState.DESCRIBED;
+   }
+
+   public void describeVisit(MetaDataVisitor vistor)
+   {
+      vistor.describeVisit(this);
+   }
+
+   public Iterator<? extends MetaDataVisitorNode> getChildren()
+   {
+      return null;
+   }
+
+   public void initialVisit(MetaDataVisitor visitor)
+   {
+      KernelControllerContext context = visitor.getControllerContext();
+      DependencyItem item = new JndiDemandDependencyItem(context.getName());
+      visitor.addDependency(item);
+      visitor.initialVisit(this);
+   }
+   
+   @Override
+   public void toString(JBossStringBuilder buffer)
+   {
+      buffer.append("demand=").append(jndiName);
+      buffer.append(" whenRequired=").append(whenRequired.getStateString());
+   }
+   
+   @Override
+   public void toShortString(JBossStringBuilder buffer)
+   {
+      buffer.append(jndiName);
+   }
+
+   private class JndiDemandDependencyItem extends AbstractDependencyItem
+   {
+      public JndiDemandDependencyItem(Object name)
+      {
+         super(name, null, whenRequired, null);
+      }
+      
+      @Override
+      public boolean resolve(Controller controller)
+      {
+         ClassLoader tcl = Thread.currentThread().getContextClassLoader();
+         try
+         {
+            Thread.currentThread().setContextClassLoader(loader);
+            InitialContext ctx = new InitialContext();
+            demand = ctx.lookup(jndiName);
+            setResolved(true);
+            return isResolved();
+         }
+         catch(Throwable ignored)
+         {
+            if (log.isTraceEnabled())
+               log.trace("Unexpected error", ignored);
+         }
+         finally
+         {
+            Thread.currentThread().setContextClassLoader(tcl);            
+         }
+         setResolved(false);
+         return isResolved();
+      }
+      
+      @Override
+      public void toString(JBossStringBuilder buffer)
+      {
+         super.toString(buffer);
+         buffer.append(" demand=").append(jndiName);
+      }
+      
+      @Override
+      public void toShortString(JBossStringBuilder buffer)
+      {
+         buffer.append(getName()).append(" demands ").append(jndiName);
+      }
+
+      @Override
+      public String toHumanReadableString()
+      {
+         StringBuilder builder = new StringBuilder();
+         builder.append("Demands '").append(jndiName);
+         return builder.toString();
+      }
+   }
+}


Property changes on: trunk/ejb3/src/main/org/jboss/ejb3/dependency/JndiDemandMetaData.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + native

Modified: trunk/ejb3/src/main/org/jboss/ejb3/deployers/JBoss5DependencyPolicy.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/deployers/JBoss5DependencyPolicy.java	2007-09-11 17:02:26 UTC (rev 65300)
+++ trunk/ejb3/src/main/org/jboss/ejb3/deployers/JBoss5DependencyPolicy.java	2007-09-11 17:24:43 UTC (rev 65301)
@@ -22,6 +22,7 @@
 package org.jboss.ejb3.deployers;
 
 import org.jboss.ejb3.MCDependencyPolicy;
+import org.jboss.ejb3.dependency.JndiDemandMetaData;
 import org.jboss.ejb3.javaee.JavaEEComponent;
 
 /**
@@ -36,7 +37,14 @@
    {
       super(component);
    }
+
    
+   @Override
+   public void addJNDIName(String name, ClassLoader loader)
+   {
+      this.addDependency(new JndiDemandMetaData(name, loader));
+   }
+
    public void addDatasource(String jndiName)
    {
       String ds = jndiName;

Modified: trunk/ejb3/src/main/org/jboss/injection/AbstractHandler.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/injection/AbstractHandler.java	2007-09-11 17:02:26 UTC (rev 65300)
+++ trunk/ejb3/src/main/org/jboss/injection/AbstractHandler.java	2007-09-11 17:24:43 UTC (rev 65301)
@@ -75,7 +75,7 @@
       // Do not depend on myself
       if(container.hasJNDIBinding(jndiName))
          return;
-      
-      ((JBoss5DependencyPolicy) container.getDependencyPolicy()).addJNDIName(jndiName);
+      ClassLoader loader = container.getClassloader();
+      ((JBoss5DependencyPolicy) container.getDependencyPolicy()).addJNDIName(jndiName, loader);
    }
 }




More information about the jboss-cvs-commits mailing list