[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