[jboss-dev-forums] [Design of EJB 3.0] - Re: EJB3 AppClient - tests now pass but there are issues
wolfc
do-not-reply at jboss.com
Tue Nov 13 10:08:23 EST 2007
Here's my ClientLauncher:
I like it better, because it doesn't do any parsing and it uses server side metadata. So if you don't mind, I'll commit it.
Index: /home/carlo/work/jboss-head/ejb3/src/main/org/jboss/ejb3/client/ClientLauncher.java
| ===================================================================
| --- /home/carlo/work/jboss-head/ejb3/src/main/org/jboss/ejb3/client/ClientLauncher.java (revision 67020)
| +++ /home/carlo/work/jboss-head/ejb3/src/main/org/jboss/ejb3/client/ClientLauncher.java (working copy)
| @@ -22,7 +22,6 @@
| package org.jboss.ejb3.client;
|
| import java.io.IOException;
| -import java.io.InputStream;
| import java.net.URL;
| import java.net.URLClassLoader;
| import java.util.ArrayList;
| @@ -28,21 +27,17 @@
| import java.util.ArrayList;
| import java.util.List;
|
| +import javax.naming.InitialContext;
| +import javax.naming.NamingException;
| +
| import org.jboss.client.AppClientLauncher;
| +import org.jboss.ejb3.metamodel.ApplicationClientDD;
| +import org.jboss.ejb3.metamodel.ApplicationClientDDObjectFactory;
| +import org.jboss.ejb3.metamodel.JBossClientDDObjectFactory;
| import org.jboss.logging.Logger;
| -import org.jboss.metadata.client.jboss.JBossClient5DTDMetaData;
| -import org.jboss.metadata.client.jboss.JBossClient5MetaData;
| import org.jboss.metadata.client.jboss.JBossClientMetaData;
| -import org.jboss.metadata.client.spec.ApplicationClient14DTDMetaData;
| -import org.jboss.metadata.client.spec.ApplicationClient14MetaData;
| -import org.jboss.metadata.client.spec.ApplicationClient5MetaData;
| -import org.jboss.metadata.client.spec.ApplicationClientMetaData;
| import org.jboss.util.NotImplementedException;
| import org.jboss.xb.binding.JBossXBException;
| -import org.jboss.xb.binding.Unmarshaller;
| -import org.jboss.xb.binding.UnmarshallerFactory;
| -import org.jboss.xb.binding.sunday.unmarshalling.DefaultSchemaResolver;
| -import org.jboss.xb.binding.sunday.unmarshalling.SingletonSchemaResolverFactory;
|
| /**
| * This class launches a JavaEE 5 application client.
| @@ -59,39 +54,6 @@
| {
| private static final Logger log = Logger.getLogger(ClientLauncher.class);
|
| - /** The unmarshaller factory */
| - private static UnmarshallerFactory factory = UnmarshallerFactory.newInstance();
| -
| - /** The schema resolver */
| - private static DefaultSchemaResolver resolver = (DefaultSchemaResolver) SingletonSchemaResolverFactory.getInstance().getSchemaBindingResolver();
| -
| - static
| - {
| - // FIXME hardwiring
| - resolver.addClassBindingForLocation("application-client", ApplicationClient14DTDMetaData.class);
| - resolver.addClassBindingForLocation("application-client_1_2.dtd", ApplicationClient14DTDMetaData.class);
| - resolver.addClassBindingForLocation("application-client_1_3.dtd", ApplicationClient14DTDMetaData.class);
| - resolver.addClassBindingForLocation("application-client_1_4.xsd", ApplicationClient14MetaData.class);
| - resolver.addClassBindingForLocation("application-client_5.xsd", ApplicationClient5MetaData.class);
| - resolver.addClassBindingForLocation("jboss-client", JBossClient5DTDMetaData.class);
| - resolver.addClassBindingForLocation("jboss-client_3_0.dtd", JBossClient5DTDMetaData.class);
| - resolver.addClassBindingForLocation("jboss-client_3_2.dtd", JBossClient5DTDMetaData.class);
| - resolver.addClassBindingForLocation("jboss-client_4_0.dtd", JBossClient5DTDMetaData.class);
| - resolver.addClassBindingForLocation("jboss-client_4_2.dtd", JBossClient5DTDMetaData.class);
| - resolver.addClassBindingForLocation("jboss-client_5_0.dtd", JBossClient5DTDMetaData.class);
| - resolver.addClassBindingForLocation("jboss-client_5_0.xsd", JBossClient5MetaData.class);
| - }
| -
| - private static URL findResource(String resourceName)
| - {
| - URL url;
| - if(Thread.currentThread().getContextClassLoader() instanceof URLClassLoader)
| - url = ((URLClassLoader) Thread.currentThread().getContextClassLoader()).findResource(resourceName);
| - else
| - url = Thread.currentThread().getContextClassLoader().getResource(resourceName);
| - return url;
| - }
| -
| /**
| * Convenience method for launching a client container.
| *
| @@ -121,8 +83,9 @@
| * @throws IOException
| * @throws JBossXBException
| */
| - public static JBossClientMetaData loadXML() throws JBossXBException, IOException
| + public static JBossClientMetaData loadXML(String applicationClientName) throws NamingException
| {
| + /*
| URL url = findResource("META-INF/application-client.xml");
| log.trace("application-client.xml found at " + url);
| URL jbossClientURL = findResource("META-INF/jboss-client.xml");
| @@ -128,88 +91,11 @@
| URL jbossClientURL = findResource("META-INF/jboss-client.xml");
| log.trace("jboss-client.xml found at " + jbossClientURL);
| return loadXML(url, jbossClientURL);
| - }
| -
| - @Deprecated
| - public static JBossClientMetaData loadXML(String urlSpec) throws JBossXBException, IOException
| - {
| - URL url = new URL(urlSpec);
| - return loadXML(url, null);
| - }
| -
| - public static Unmarshaller createUnmarshaller() throws JBossXBException, IOException
| - {
| - Unmarshaller unmarshaller = factory.newUnmarshaller();
| - unmarshaller.setSchemaValidation(true);
| - unmarshaller.setValidation(true);
| - return unmarshaller;
| -
| - }
| -
| - public static JBossClientMetaData loadXML(URL url, URL jbossClientURL) throws JBossXBException, IOException
| - {
| - if (url == null)
| - throw new RuntimeException("Null url for application-client.xml");
| -
| - log.debug("Parsing application-client.xml: "+url);
| - Unmarshaller unmarshaller = createUnmarshaller();
| - InputStream is = url.openStream();
| - Object parsed = null;
| - try
| - {
| - parsed = unmarshaller.unmarshal(is, resolver);
| - log.debug("Parsed application-client.xml: "+url+" to: "+parsed);
| - }
| - finally
| - {
| - try
| - {
| - is.close();
| - }
| - catch (Exception ignored)
| - {
| - }
| - }
| - if (parsed == null)
| - throw new JBossXBException("The xml " + url + " is not well formed!");
| -
| - ApplicationClientMetaData applicationClientMetaData = ApplicationClientMetaData.class.cast(parsed);
| -
| - JBossClientMetaData jbossClientMetaData;
| - if (jbossClientURL == null)
| - jbossClientMetaData = new JBossClientMetaData();
| - else
| - {
| -
| - log.debug("Parsing jboss-client.xml: "+jbossClientURL);
| - unmarshaller = createUnmarshaller();
| - is = jbossClientURL.openStream();
| - parsed = null;
| - try
| - {
| - parsed = unmarshaller.unmarshal(is, resolver);
| - log.debug("Parsed jboss-client.xml: "+jbossClientURL+" to: "+parsed);
| -
| - if (parsed == null)
| - throw new JBossXBException("The xml " + url + " is not well formed!");
| -
| - jbossClientMetaData = JBossClientMetaData.class.cast(parsed);
| - }
| - finally
| - {
| - try
| - {
| - is.close();
| - }
| - catch (Exception ignored)
| - {
| - }
| - }
| - }
| -
| - JBossClientMetaData result = new JBossClientMetaData();
| - result.merge(jbossClientMetaData, applicationClientMetaData, true);
| - return result;
| + */
| + log.warn("FIXME: using an unsupported hack to get metadata");
| + InitialContext ctx = new InitialContext();
| + JBossClientMetaData metaData = (JBossClientMetaData) ctx.lookup(applicationClientName + "/metaData");
| + return metaData;
| }
|
| /**
| @@ -241,8 +127,12 @@
| URL appXmlURL = mainClass.getClassLoader().getResource("META-INF/application-client.xml");
| if(appXmlURL == null)
| throw new RuntimeException("Can't find META-INF/application-client.xml");
| - URL jbossXmlURL = mainClass.getClassLoader().getResource("META-INF/jboss-client.xml");
| - JBossClientMetaData xml = loadXML(appXmlURL, jbossXmlURL);
| +
| + // FIXME: client metadata
| + JBossClientMetaData xml = null;
| + //JBossClientMetaData xml = ApplicationClientDDObjectFactory.parse(appXmlURL);
| + if(true)
| + throw new RuntimeException("NYI");
|
| // FIXME: j2ee.clientName
|
| @@ -275,7 +165,7 @@
| public void launch(String mainClassName, String clientName, String args[])
| throws Throwable
| {
| - JBossClientMetaData xml = loadXML();
| + JBossClientMetaData xml = loadXML(clientName);
| launch(xml, mainClassName, clientName, args);
| }
|
| Index: /home/carlo/work/jboss-head/ejb3/src/main/org/jboss/ejb3/deployers/Ejb3ClientDeployer.java
| ===================================================================
| --- /home/carlo/work/jboss-head/ejb3/src/main/org/jboss/ejb3/deployers/Ejb3ClientDeployer.java (revision 66999)
| +++ /home/carlo/work/jboss-head/ejb3/src/main/org/jboss/ejb3/deployers/Ejb3ClientDeployer.java (working copy)
| @@ -84,6 +84,10 @@
| // Notify the client launcher of extra class path entries in an EAR (See EE 8.2)
| encCtx.bind("classPathEntries", getClassPathEntries(unit));
|
| + // TODO: Notify the client launcher of other metadata stuff (injectors, lifecycle callbacks etc)
| + // FIXME: For now I expose the entire metadata
| + encCtx.bind("metaData", metaData);
| +
| String mainClassName = getMainClassName(unit, true);
|
| Class<?> mainClass = loadClass(unit, mainClassName);
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4104160#4104160
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4104160
More information about the jboss-dev-forums
mailing list