[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ø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