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/06/05 02:39:13 UTC
svn commit: r663426 - in
/incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb:
JAXBContextCache.java JAXBContextHelper.java
Author: rfeng
Date: Wed Jun 4 17:39:13 2008
New Revision: 663426
URL: http://svn.apache.org/viewvc?rev=663426&view=rev
Log:
Fix the cache access
Modified:
incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java
incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java
Modified: incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java?rev=663426&r1=663425&r2=663426&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java Wed Jun 4 17:39:13 2008
@@ -199,8 +199,8 @@
}
}
- public Map<Object, JAXBContext> getCache() {
- return cache.getCache();
+ public LRUCache<Object, JAXBContext> getCache() {
+ return cache;
}
public JAXBContext getJAXBContext(Class<?> cls) throws JAXBException {
Modified: incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java?rev=663426&r1=663425&r2=663426&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java Wed Jun 4 17:39:13 2008
@@ -20,8 +20,9 @@
import java.beans.Introspector;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.HashSet;
-import java.util.Map;
+import java.util.List;
import java.util.Set;
import javax.xml.bind.JAXBContext;
@@ -42,6 +43,7 @@
import org.apache.tuscany.sca.databinding.TransformationContext;
import org.apache.tuscany.sca.databinding.TransformationException;
import org.apache.tuscany.sca.databinding.impl.SimpleTypeMapperImpl;
+import org.apache.tuscany.sca.databinding.jaxb.JAXBContextCache.LRUCache;
import org.apache.tuscany.sca.interfacedef.DataType;
import org.apache.tuscany.sca.interfacedef.Interface;
import org.apache.tuscany.sca.interfacedef.Operation;
@@ -168,7 +170,7 @@
public static JAXBContext createJAXBContext(Class<?>[] classes) throws JAXBException {
return cache.getJAXBContext(classes);
}
-
+
/**
* Create a JAXBContext for a given java interface
* @param intf
@@ -177,45 +179,55 @@
*/
public static JAXBContext createJAXBContext(Interface intf) throws JAXBException {
synchronized (cache) {
- Map<Object, JAXBContext> map = cache.getCache();
- JAXBContext context = map.get(intf);
+ LRUCache<Object, JAXBContext> map = cache.getCache();
+ Integer key = new Integer(System.identityHashCode(intf));
+ JAXBContext context = map.get(key);
if (context != null) {
return context;
}
Set<Class<?>> classes = new HashSet<Class<?>>();
- for (Operation op : intf.getOperations()) {
- WrapperInfo wrapper = op.getWrapper();
- if (wrapper != null) {
- DataType dt1 = wrapper.getInputWrapperType();
- if (dt1 != null) {
- classes.add(dt1.getPhysical());
- }
- DataType dt2 = wrapper.getOutputWrapperType();
- if (dt2 != null) {
- classes.add(dt2.getPhysical());
- }
- } else {
- for (DataType dt1 : op.getInputType().getLogical()) {
- classes.add(dt1.getPhysical());
- }
- DataType dt2 = op.getOutputType();
- if (dt2 != null) {
- classes.add(dt2.getPhysical());
- }
- for (DataType<DataType> dt3 : op.getFaultTypes()) {
- DataType dt4 = dt3.getLogical();
- if (dt4 != null) {
- classes.add(dt4.getPhysical());
- }
- }
- }
+ for(DataType d: getDataTypes(intf)) {
+ classes.add(d.getPhysical());
}
context = createJAXBContext(classes.toArray(new Class<?>[classes.size()]));
+ map.put(key, context);
return context;
}
}
+ private static List<DataType> getDataTypes(Interface intf) {
+ List<DataType> dataTypes = new ArrayList<DataType>();
+ for (Operation op : intf.getOperations()) {
+ WrapperInfo wrapper = op.getWrapper();
+ if (wrapper != null) {
+ DataType dt1 = wrapper.getInputWrapperType();
+ if (dt1 != null) {
+ dataTypes.add(dt1);
+ }
+ DataType dt2 = wrapper.getOutputWrapperType();
+ if (dt2 != null) {
+ dataTypes.add(dt2);
+ }
+ } else {
+ for (DataType dt1 : op.getInputType().getLogical()) {
+ dataTypes.add(dt1);
+ }
+ DataType dt2 = op.getOutputType();
+ if (dt2 != null) {
+ dataTypes.add(dt2);
+ }
+ for (DataType<DataType> dt3 : op.getFaultTypes()) {
+ DataType dt4 = dt3.getLogical();
+ if (dt4 != null) {
+ dataTypes.add(dt4);
+ }
+ }
+ }
+ }
+ return dataTypes;
+ }
+
public static Class<?> getJavaType(DataType<?> dataType) {
if (dataType == null) {
return null;