diff options
author | lresende <lresende@13f79535-47bb-0310-9956-ffa450edef68> | 2009-10-15 18:40:03 +0000 |
---|---|---|
committer | lresende <lresende@13f79535-47bb-0310-9956-ffa450edef68> | 2009-10-15 18:40:03 +0000 |
commit | 7a647f04ea75592a23e6b4bf1d7eec61878948e0 (patch) | |
tree | 5d85f06b931e5f13735bb2804b3dd880c47a8402 /java/sca/modules/interface-java/src/main | |
parent | 529acd94adb365c91b88776cffdc858f09e241d4 (diff) |
Enhancing extensibility to dinamycally load interface visitors
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@825612 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca/modules/interface-java/src/main')
2 files changed, 79 insertions, 12 deletions
diff --git a/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/DefaultJavaInterfaceFactory.java b/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/DefaultJavaInterfaceFactory.java index 41cf08d771..374cb2029a 100644 --- a/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/DefaultJavaInterfaceFactory.java +++ b/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/DefaultJavaInterfaceFactory.java @@ -19,15 +19,24 @@ package org.apache.tuscany.sca.interfacedef.java; import java.io.IOException; +import java.lang.reflect.Constructor; import java.util.Collection; import java.util.List; +import java.util.logging.Logger; +import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry; +import org.apache.tuscany.sca.core.ExtensionPointRegistry; import org.apache.tuscany.sca.core.FactoryExtensionPoint; +import org.apache.tuscany.sca.core.UtilityExtensionPoint; import org.apache.tuscany.sca.extensibility.ServiceDeclaration; import org.apache.tuscany.sca.extensibility.ServiceDiscovery; import org.apache.tuscany.sca.interfacedef.java.impl.JavaInterfaceFactoryImpl; import org.apache.tuscany.sca.interfacedef.java.impl.PolicyJavaInterfaceVisitor; import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor; +import org.apache.tuscany.sca.monitor.Monitor; +import org.apache.tuscany.sca.monitor.MonitorFactory; +import org.apache.tuscany.sca.monitor.Problem; +import org.apache.tuscany.sca.monitor.Problem.Severity; import org.apache.tuscany.sca.policy.PolicyFactory; /** @@ -36,15 +45,40 @@ import org.apache.tuscany.sca.policy.PolicyFactory; * @version $Rev$ $Date$ */ public class DefaultJavaInterfaceFactory extends JavaInterfaceFactoryImpl implements JavaInterfaceFactory { + private static final Logger logger = Logger.getLogger(DefaultJavaInterfaceFactory.class.getName()); + + private ExtensionPointRegistry extensionPointRegistry; private FactoryExtensionPoint modelFactoryExtensionPoint; + private Monitor monitor = null; private boolean loadedVisitors; public DefaultJavaInterfaceFactory() { + super(); + this.extensionPointRegistry = new DefaultExtensionPointRegistry(); + + UtilityExtensionPoint utilities = this.extensionPointRegistry.getExtensionPoint(UtilityExtensionPoint.class); + MonitorFactory monitorFactory = utilities.getUtility(MonitorFactory.class); + if (monitorFactory != null) { + this.monitor = monitorFactory.createMonitor(); + } + } + /* public DefaultJavaInterfaceFactory(FactoryExtensionPoint modelFactoryExtensionPoint) { + this.extensionPointRegistry = new DefaultExtensionPointRegistry(); + + this.extensionPointRegistry = new DefaultExtensionPointRegistry(); this.modelFactoryExtensionPoint = modelFactoryExtensionPoint; + + UtilityExtensionPoint utilities = this.extensionPointRegistry.getExtensionPoint(UtilityExtensionPoint.class); + MonitorFactory monitorFactory = utilities.getUtility(MonitorFactory.class); + if (monitorFactory != null) { + this.monitor = monitorFactory.createMonitor(); + } + } + */ @Override public List<JavaInterfaceVisitor> getInterfaceVisitors() { @@ -77,17 +111,26 @@ public class DefaultJavaInterfaceFactory extends JavaInterfaceFactoryImpl implem // Load data bindings for (ServiceDeclaration visitorDeclaration: visitorDeclarations) { - JavaInterfaceVisitor visitor; + JavaInterfaceVisitor visitor = null; try { Class<JavaInterfaceVisitor> visitorClass = (Class<JavaInterfaceVisitor>)visitorDeclaration.loadClass(); - visitor = visitorClass.newInstance(); - } catch (ClassNotFoundException e) { - throw new IllegalArgumentException(e); - } catch (InstantiationException e) { - throw new IllegalArgumentException(e); - } catch (IllegalAccessException e) { - throw new IllegalArgumentException(e); + + try { + Constructor<JavaInterfaceVisitor> constructor = visitorClass.getConstructor(ExtensionPointRegistry.class); + visitor = constructor.newInstance(extensionPointRegistry); + } catch (NoSuchMethodException e) { + visitor = visitorClass.newInstance(); + } + + + } catch (Exception e) { + IllegalStateException ie = new IllegalStateException(e); + error("IllegalStateException", visitor, ie); + throw ie; } + + logger.fine("Adding Java Interface visitor: " + visitor.getClass().getName()); + addInterfaceVisitor(visitor); } @@ -95,5 +138,23 @@ public class DefaultJavaInterfaceFactory extends JavaInterfaceFactoryImpl implem } - + /** + * Report a exception. + * + * @param problems + * @param message + * @param model + */ + private void error(String message, Object model, Exception ex) { + if (monitor != null) { + Problem problem = + monitor.createProblem(this.getClass().getName(), + "interface-javaxml-validation-messages.properties", + Severity.ERROR, + model, + message, + ex); + monitor.problem(problem); + } + } } diff --git a/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java b/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java index 36f1fbe23e..6b8ea60517 100644 --- a/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java +++ b/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java @@ -61,14 +61,20 @@ public class JavaInterfaceIntrospectorImpl { private static final String UNKNOWN_DATABINDING = null; + private JavaInterfaceFactory javaFactory = null; private List<JavaInterfaceVisitor> visitors = new ArrayList<JavaInterfaceVisitor>(); + private boolean loadedVisitors; public JavaInterfaceIntrospectorImpl(JavaInterfaceFactory javaFactory) { - this.visitors = javaFactory.getInterfaceVisitors(); + this.javaFactory = javaFactory; } - public void introspectInterface(JavaInterface javaInterface, Class<?> clazz) - throws InvalidInterfaceException { + public void introspectInterface(JavaInterface javaInterface, Class<?> clazz) throws InvalidInterfaceException { + + if(!loadedVisitors) { + this.visitors = javaFactory.getInterfaceVisitors(); + } + javaInterface.setJavaClass(clazz); boolean remotable = clazz.isAnnotationPresent(Remotable.class); |