[picocontainer-scm] [5682] java/2.x/trunk/script: jndi enhancement for xml scripting

paul-yCVjj/[email protected]
Newsgroups gmane.comp.java.picocontainer.cvs
Message-ID <[email protected]>
Revision 5682
Author paul
Date 2010-05-26 07:39:34 -0500 (Wed, 26 May 2010)

Log Message

jndi enhancement for xml scripting

Modified Paths

- java/2.x/trunk/pico/container/pom.xml

- java/2.x/trunk/script/pom.xml

- java/2.x/trunk/script/script-core/pom.xml

- java/2.x/trunk/script/script-core/src/java/org/picocontainer/script/xml/XMLConstants.java

- java/2.x/trunk/script/script-core/src/java/org/picocontainer/script/xml/XMLContainerBuilder.java

- java/2.x/trunk/script/script-core/src/test/org/picocontainer/script/xml/XMLContainerBuilderTestCase.java

Diff

Modified: java/2.x/trunk/pico/container/pom.xml (5681 => 5682)

--- java/2.x/trunk/pico/container/pom.xml 2010-05-24 13:25:45 UTC (rev 5681)
+++ java/2.x/trunk/pico/container/pom.xml 2010-05-26 12:39:34 UTC (rev 5682)
@@ -16,10 +16,12 @@
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
+ <optional>true</optional>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
+ <optional>true</optional>
</dependency>
</dependencies>
<build>

Modified: java/2.x/trunk/script/pom.xml (5681 => 5682)

--- java/2.x/trunk/script/pom.xml 2010-05-24 13:25:45 UTC (rev 5681)
+++ java/2.x/trunk/script/pom.xml 2010-05-26 12:39:34 UTC (rev 5682)
@@ -50,7 +50,7 @@
</snapshotRepository>
</distributionManagement>
<properties>
- <pico.version>2.10.2</pico.version>
+ <pico.version>2.11-SNAPSHOT</pico.version>
</properties>
<dependencyManagement>
<dependencies>

Modified: java/2.x/trunk/script/script-core/pom.xml (5681 => 5682)

--- java/2.x/trunk/script/script-core/pom.xml 2010-05-24 13:25:45 UTC (rev 5681)
+++ java/2.x/trunk/script/script-core/pom.xml 2010-05-26 12:39:34 UTC (rev 5682)
@@ -13,6 +13,11 @@
<groupId>org.picocontainer</groupId>
<artifactId>picocontainer</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.picocontainer</groupId>
+ <artifactId>picocontainer-gems</artifactId>
+ <optional>true</optional>
+ </dependency>
<!-- optional dependencies -->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
@@ -33,11 +38,11 @@
<optional>true</optional>
</dependency>
<!-- test scoped dependencies -->
- <dependency>
+ <!--dependency>
<groupId>org.picocontainer</groupId>
<artifactId>picocontainer-gems</artifactId>
<scope>test</scope>
- </dependency>
+ </dependency-->
<dependency>
<groupId>org.picocontainer.script</groupId>
<artifactId>picocontainer-script-testmodel</artifactId>

Modified: java/2.x/trunk/script/script-core/src/java/org/picocontainer/script/xml/XMLConstants.java (5681 => 5682)

--- java/2.x/trunk/script/script-core/src/java/org/picocontainer/script/xml/XMLConstants.java 2010-05-24 13:25:45 UTC (rev 5681)
+++ java/2.x/trunk/script/script-core/src/java/org/picocontainer/script/xml/XMLConstants.java 2010-05-26 12:39:34 UTC (rev 5682)
@@ -17,9 +17,11 @@
String COMPONENT = "component";
String COMPONENT_IMPLEMENTATION = "component-implementation";
String COMPONENT_INSTANCE = "component-instance";
+ String COMPONENT_FROM_JNDI = "component-from-jndi";
String COMPONENT_ADAPTER = "component-adapter";
String COMPONENT_INSTANCE_FACTORY = "component-instance-factory";
String CLASS = "class";
+ String JNDI_NAME = "jndi-name";
String FACTORY = "factory";
String FILE = "file";
String KEY = "key";

Modified: java/2.x/trunk/script/script-core/src/java/org/picocontainer/script/xml/XMLContainerBuilder.java (5681 => 5682)

--- java/2.x/trunk/script/script-core/src/java/org/picocontainer/script/xml/XMLContainerBuilder.java 2010-05-24 13:25:45 UTC (rev 5681)
+++ java/2.x/trunk/script/script-core/src/java/org/picocontainer/script/xml/XMLContainerBuilder.java 2010-05-26 12:39:34 UTC (rev 5682)
@@ -7,48 +7,33 @@
******************************************************************************/
package org.picocontainer.script.xml;

-import java.io.File;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.Serializable;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.security.Permission;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-import java.lang.reflect.Type;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
+import org.picocontainer.BehaviorFactory;
import org.picocontainer.Characteristics;
+import org.picocontainer.ComponentAdapter;
import org.picocontainer.ComponentFactory;
+import org.picocontainer.ComponentMonitor;
import org.picocontainer.DefaultPicoContainer;
+import org.picocontainer.Injector;
+import org.picocontainer.LifecycleStrategy;
import org.picocontainer.MutablePicoContainer;
import org.picocontainer.Parameter;
import org.picocontainer.PicoClassNotFoundException;
import org.picocontainer.PicoCompositionException;
import org.picocontainer.PicoContainer;
-import org.picocontainer.ComponentAdapter;
-import org.picocontainer.ComponentMonitor;
-import org.picocontainer.LifecycleStrategy;
-import org.picocontainer.Injector;
-import org.picocontainer.BehaviorFactory;
+import org.picocontainer.behaviors.Caching;
+import org.picocontainer.classname.ClassLoadingPicoContainer;
+import org.picocontainer.classname.ClassName;
+import org.picocontainer.classname.ClassPathElement;
+import org.picocontainer.classname.DefaultClassLoadingPicoContainer;
+import org.picocontainer.gems.jndi.JNDIObjectReference;
+import org.picocontainer.gems.jndi.JNDIProvided;
+import org.picocontainer.injectors.AbstractInjectionFactory;
import org.picocontainer.injectors.ConstructorInjection;
-import org.picocontainer.injectors.AbstractInjectionFactory;
import org.picocontainer.injectors.SingleMemberInjector;
-import org.picocontainer.classname.ClassPathElement;
-import org.picocontainer.classname.ClassLoadingPicoContainer;
-import org.picocontainer.classname.DefaultClassLoadingPicoContainer;
-import org.picocontainer.behaviors.Caching;
-//import org.picocontainer.injectors.ConstructorInjection;
import org.picocontainer.lifecycle.NullLifecycleStrategy;
import org.picocontainer.monitors.NullComponentMonitor;
import org.picocontainer.parameters.ComponentParameter;
import org.picocontainer.parameters.ConstantParameter;
-import org.picocontainer.classname.ClassName;
import org.picocontainer.script.LifecycleMode;
import org.picocontainer.script.ScriptedBuilder;
import org.picocontainer.script.ScriptedContainerBuilder;
@@ -58,9 +43,52 @@
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
-import static org.picocontainer.script.xml.AttributeUtils.*;
-import static org.picocontainer.script.xml.XMLConstants.*;

+import javax.naming.NamingException;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.File;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.lang.reflect.Type;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.security.Permission;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import static org.picocontainer.script.xml.AttributeUtils.EMPTY;
+import static org.picocontainer.script.xml.AttributeUtils.isSet;
+import static org.picocontainer.script.xml.AttributeUtils.notSet;
+import static org.picocontainer.script.xml.XMLConstants.CLASS;
+import static org.picocontainer.script.xml.XMLConstants.CLASSLOADER;
+import static org.picocontainer.script.xml.XMLConstants.CLASSNAME;
+import static org.picocontainer.script.xml.XMLConstants.CLASSPATH;
+import static org.picocontainer.script.xml.XMLConstants.CLASS_NAME_KEY;
+import static org.picocontainer.script.xml.XMLConstants.COMPONENT;
+import static org.picocontainer.script.xml.XMLConstants.COMPONENT_ADAPTER;
+import static org.picocontainer.script.xml.XMLConstants.COMPONENT_ADAPTER_FACTORY;
+import static org.picocontainer.script.xml.XMLConstants.COMPONENT_FROM_JNDI;
+import static org.picocontainer.script.xml.XMLConstants.COMPONENT_IMPLEMENTATION;
+import static org.picocontainer.script.xml.XMLConstants.COMPONENT_INSTANCE;
+import static org.picocontainer.script.xml.XMLConstants.COMPONENT_INSTANCE_FACTORY;
+import static org.picocontainer.script.xml.XMLConstants.COMPONENT_KEY_TYPE;
+import static org.picocontainer.script.xml.XMLConstants.COMPONENT_VALUE_TYPE;
+import static org.picocontainer.script.xml.XMLConstants.CONTAINER;
+import static org.picocontainer.script.xml.XMLConstants.JNDI_NAME;
+import static org.picocontainer.script.xml.XMLConstants.CONTEXT;
+import static org.picocontainer.script.xml.XMLConstants.EMPTY_COLLECTION;
+import static org.picocontainer.script.xml.XMLConstants.FACTORY;
+import static org.picocontainer.script.xml.XMLConstants.FILE;
+import static org.picocontainer.script.xml.XMLConstants.KEY;
+import static org.picocontainer.script.xml.XMLConstants.PARAMETER;
+import static org.picocontainer.script.xml.XMLConstants.PARAMETER_ZERO;
+import static org.picocontainer.script.xml.XMLConstants.URL;
+import static org.picocontainer.script.xml.XMLConstants.VALUE;
+
/**
* This class builds up a hierarchy of PicoContainers from an XML configuration file.
*
@@ -73,11 +101,8 @@

private final static String DEFAULT_COMPONENT_INSTANCE_FACTORY = BeanComponentInstanceFactory.class.getName();

-
-
private Element rootElement;

-
/**
* The XMLComponentInstanceFactory globally defined for the container.
* It may be overridden at node level.
@@ -183,10 +208,12 @@
throw new ScriptedPicoContainerMarkupException(e);
} catch (SAXException e) {
throw new ScriptedPicoContainerMarkupException(e);
+ } catch (NamingException e) {
+ throw new ScriptedPicoContainerMarkupException(e);
}
}

- private void addComponentsAndChildContainers(ClassLoadingPicoContainer parentContainer, Element containerElement, ClassLoadingPicoContainer knownComponentAdapterFactories) throws ClassNotFoundException, IOException, SAXException {
+ private void addComponentsAndChildContainers(ClassLoadingPicoContainer parentContainer, Element containerElement, ClassLoadingPicoContainer knownComponentAdapterFactories) throws ClassNotFoundException, IOException, SAXException, NamingException {

ClassLoadingPicoContainer metaContainer = new DefaultClassLoadingPicoContainer(getClassLoader(),
new CompFactoryWrappingComponentFactory(), knownComponentAdapterFactories);
@@ -214,6 +241,8 @@
addComponent(parentContainer, childElement, new Properties[0]);
} else if (COMPONENT_INSTANCE.equals(name)) {
registerComponentInstance(parentContainer, childElement);
+ } else if (COMPONENT_FROM_JNDI.equals(name)) {
+ registerComponentFromJndi(parentContainer, childElement);
} else if (COMPONENT_ADAPTER.equals(name)) {
addComponentAdapter(parentContainer, childElement, metaContainer);
} else if (COMPONENT_ADAPTER_FACTORY.equals(name)) {
@@ -272,7 +301,7 @@
}
}

- private void addClassLoader(ClassLoadingPicoContainer parentContainer, Element childElement, ClassLoadingPicoContainer metaContainer) throws IOException, SAXException, ClassNotFoundException {
+ private void addClassLoader(ClassLoadingPicoContainer parentContainer, Element childElement, ClassLoadingPicoContainer metaContainer) throws IOException, SAXException, ClassNotFoundException, NamingException {
String parentClass = childElement.getAttribute("parentclassloader");
ClassLoader parentClassLoader = parentContainer.getComponentClassLoader();
if (parentClass != null && !EMPTY.equals(parentClass)) {
@@ -471,6 +500,17 @@
}

+ private void registerComponentFromJndi(ClassLoadingPicoContainer container, Element element) throws ClassNotFoundException, PicoCompositionException, MalformedURLException, NamingException {
+ String key = element.getAttribute(KEY);
+ String classKey = element.getAttribute(CLASS);
+ String jndiName = element.getAttribute(JNDI_NAME);
+ if (notSet(key)) {
+ // TODO
+ }
+ container.addAdapter(new JNDIProvided(key, new JNDIObjectReference(jndiName), getClassLoader().loadClass(classKey)));
+ }
+
+
private void registerComponentInstance(ClassLoadingPicoContainer container, Element element) throws ClassNotFoundException, PicoCompositionException, MalformedURLException {
Object instance = createInstance(container, element);
String key = element.getAttribute(KEY);

Modified: java/2.x/trunk/script/script-core/src/test/org/picocontainer/script/xml/XMLContainerBuilderTestCase.java (5681 => 5682)

--- java/2.x/trunk/script/script-core/src/test/org/picocontainer/script/xml/XMLContainerBuilderTestCase.java 2010-05-24 13:25:45 UTC (rev 5681)
+++ java/2.x/trunk/script/script-core/src/test/org/picocontainer/script/xml/XMLContainerBuilderTestCase.java 2010-05-26 12:39:34 UTC (rev 5682)
@@ -10,55 +10,22 @@

package org.picocontainer.script.xml;

-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Collection;
-
-import javax.swing.JButton;
-
-import org.junit.Ignore;
+import com.thoughtworks.xstream.XStream;
import org.junit.Test;
import org.picocontainer.ComponentAdapter;
import org.picocontainer.ComponentFactory;
-import org.picocontainer.DefaultPicoContainer;
import org.picocontainer.MutablePicoContainer;
import org.picocontainer.PicoBuilder;
+import org.picocontainer.PicoCompositionException;
import org.picocontainer.PicoContainer;
import org.picocontainer.PicoException;
-import org.picocontainer.ComponentMonitor;
-import org.picocontainer.LifecycleStrategy;
-import org.picocontainer.Parameter;
-import org.picocontainer.PicoCompositionException;
-import org.picocontainer.classname.DefaultClassLoadingPicoContainer;
import org.picocontainer.behaviors.AbstractBehaviorFactory;
-import org.picocontainer.behaviors.Caching;
-import org.picocontainer.behaviors.Locked;
import org.picocontainer.behaviors.Cached;
-import org.picocontainer.containers.EmptyPicoContainer;
+import org.picocontainer.behaviors.Locked;
import org.picocontainer.injectors.AdaptingInjection;
import org.picocontainer.injectors.ConstructorInjection;
-import org.picocontainer.injectors.ConstructorInjector;
import org.picocontainer.injectors.SetterInjection;
import org.picocontainer.injectors.SetterInjector;
-import org.picocontainer.lifecycle.StartableLifecycleStrategy;
-import org.picocontainer.monitors.NullComponentMonitor;
import org.picocontainer.monitors.WriterComponentMonitor;
import org.picocontainer.script.AbstractScriptedContainerBuilderTestCase;
import org.picocontainer.script.ScriptedPicoContainerMarkupException;
@@ -71,15 +38,32 @@
import org.picocontainer.script.testmodel.OrderEntityImpl;
import org.picocontainer.script.testmodel.WebServerConfig;
import org.picocontainer.script.testmodel.WebServerConfigComp;
-import org.picocontainer.script.xml.XMLComponentInstanceFactory;
-import org.picocontainer.script.xml.XMLContainerBuilder;
import org.picocontainer.testmodel.SimpleTouchable;
import org.picocontainer.testmodel.Touchable;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;

-import com.thoughtworks.xstream.XStream;
+import javax.swing.JButton;
+import java.io.File;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.text.SimpleDateFormat;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Map;

+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
/**
* @author Paul Hammant
* @author Aslak Helles&oslash;y
@@ -681,6 +665,20 @@
assertSame(wsc1, wsc2);
}

+ @Test public void testJndiCanBeLeveragedForComponents() {
+ Reader script = new StringReader("" +
+ "<container caching='true'>" +
+ " <component-from-jndi class='org.picocontainer.script.testmodel.DefaultWebServerConfig' jndi-name='foo/bar'/>" +
+ "</container>");
+
+ PicoContainer pico = buildContainer(script);
+ try {
+ pico.getComponent(WebServerConfig.class);
+ } catch (PicoCompositionException e) {
+ assertTrue(e.getMessage().indexOf("unable to resolve jndi name") > -1);
+ }
+ }
+
@Test public void testCustomInjectionFactory() throws IOException {
Reader script = new StringReader("" +
"<container component-adapter-factory='" + SetterInjection.class.getName() + "'>" +

----------

To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.