You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2008/09/26 19:15:02 UTC

svn commit: r699416 - /tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceFactoryImpl.java

Author: rfeng
Date: Fri Sep 26 10:15:02 2008
New Revision: 699416

URL: http://svn.apache.org/viewvc?rev=699416&view=rev
Log:
Add a cache for JavaInterface introspection

Modified:
    tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceFactoryImpl.java

Modified: tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceFactoryImpl.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceFactoryImpl.java?rev=699416&r1=699415&r2=699416&view=diff
==============================================================================
--- tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceFactoryImpl.java (original)
+++ tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceFactoryImpl.java Fri Sep 26 10:15:02 2008
@@ -19,7 +19,10 @@
 package org.apache.tuscany.sca.interfacedef.java.impl;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.Map;
+import java.util.WeakHashMap;
 
 import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException;
 import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
@@ -36,6 +39,7 @@
     
     private List<JavaInterfaceVisitor> visitors = new ArrayList<JavaInterfaceVisitor>();
     private JavaInterfaceIntrospectorImpl introspector;
+    private Map<Class<?>, JavaInterface> cache  = Collections.synchronizedMap(new WeakHashMap<Class<?>, JavaInterface>());
     
     public JavaInterfaceFactoryImpl() {
         introspector = new JavaInterfaceIntrospectorImpl(this);
@@ -46,9 +50,16 @@
     }
     
     public JavaInterface createJavaInterface(Class<?> interfaceClass) throws InvalidInterfaceException {
-        JavaInterface javaInterface = createJavaInterface();
-        introspector.introspectInterface(javaInterface, interfaceClass);
-        return javaInterface;
+        // TODO: Review if the sharing of JavaInterface is ok
+        synchronized (interfaceClass) {
+            JavaInterface javaInterface = cache.get(interfaceClass);
+            if (javaInterface == null) {
+                javaInterface = createJavaInterface();
+                introspector.introspectInterface(javaInterface, interfaceClass);
+                cache.put(interfaceClass, javaInterface);
+            }
+            return javaInterface;
+        }
     }
     
     public void createJavaInterface(JavaInterface javaInterface, Class<?> interfaceClass) throws InvalidInterfaceException {