You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jd...@apache.org on 2008/10/21 17:10:19 UTC
svn commit: r706654 - in
/geronimo/gshell/trunk/gshell-support/gshell-xstore/src/main/java/org/apache/geronimo/gshell/xstore:
XStoreHolder.java XStoreImpl.java XStorePointerImpl.java
XStoreRecordImpl.java
Author: jdillon
Date: Tue Oct 21 08:10:19 2008
New Revision: 706654
URL: http://svn.apache.org/viewvc?rev=706654&view=rev
Log:
Avoid direct creating of record and pointer impls, or use of the holder
added Marshaller cache
Modified:
geronimo/gshell/trunk/gshell-support/gshell-xstore/src/main/java/org/apache/geronimo/gshell/xstore/XStoreHolder.java
geronimo/gshell/trunk/gshell-support/gshell-xstore/src/main/java/org/apache/geronimo/gshell/xstore/XStoreImpl.java
geronimo/gshell/trunk/gshell-support/gshell-xstore/src/main/java/org/apache/geronimo/gshell/xstore/XStorePointerImpl.java
geronimo/gshell/trunk/gshell-support/gshell-xstore/src/main/java/org/apache/geronimo/gshell/xstore/XStoreRecordImpl.java
Modified: geronimo/gshell/trunk/gshell-support/gshell-xstore/src/main/java/org/apache/geronimo/gshell/xstore/XStoreHolder.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-support/gshell-xstore/src/main/java/org/apache/geronimo/gshell/xstore/XStoreHolder.java?rev=706654&r1=706653&r2=706654&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-support/gshell-xstore/src/main/java/org/apache/geronimo/gshell/xstore/XStoreHolder.java (original)
+++ geronimo/gshell/trunk/gshell-support/gshell-xstore/src/main/java/org/apache/geronimo/gshell/xstore/XStoreHolder.java Tue Oct 21 08:10:19 2008
@@ -24,21 +24,21 @@
*
* @version $Rev$ $Date$
*/
-public class XStoreHolder
+class XStoreHolder
{
- private static final InheritableThreadLocal<XStore> holder = new InheritableThreadLocal<XStore>();
+ private static final InheritableThreadLocal<XStoreImpl> holder = new InheritableThreadLocal<XStoreImpl>();
public static void clear() {
holder.remove();
}
- public static void set(final XStore xstore) {
+ public static void set(final XStoreImpl xstore) {
assert xstore != null;
holder.set(xstore);
}
- public static XStore get() {
+ public static XStoreImpl get() {
return holder.get();
}
}
\ No newline at end of file
Modified: geronimo/gshell/trunk/gshell-support/gshell-xstore/src/main/java/org/apache/geronimo/gshell/xstore/XStoreImpl.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-support/gshell-xstore/src/main/java/org/apache/geronimo/gshell/xstore/XStoreImpl.java?rev=706654&r1=706653&r2=706654&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-support/gshell-xstore/src/main/java/org/apache/geronimo/gshell/xstore/XStoreImpl.java (original)
+++ geronimo/gshell/trunk/gshell-support/gshell-xstore/src/main/java/org/apache/geronimo/gshell/xstore/XStoreImpl.java Tue Oct 21 08:10:19 2008
@@ -20,12 +20,17 @@
package org.apache.geronimo.gshell.xstore;
import org.apache.geronimo.gshell.vfs.FileSystemAccess;
+import org.apache.geronimo.gshell.marshal.Marshaller;
+import org.apache.geronimo.gshell.marshal.MarshallerSupport;
import org.apache.commons.vfs.FileSystem;
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.Map;
+import java.util.HashMap;
+
/**
* {@link XStore} component.
*
@@ -82,7 +87,7 @@
public XStoreRecord resolveRecord(final String path) {
assert path != null;
- final XStore prev = XStoreHolder.get();
+ final XStoreImpl prev = XStoreHolder.get();
XStoreHolder.set(this);
try {
@@ -104,4 +109,19 @@
return new XStorePointerImpl(this, path);
}
+
+ private final Map<Class,Marshaller> marshallers = new HashMap<Class,Marshaller>();
+
+ @SuppressWarnings({"unchecked"})
+ <T> Marshaller<T> getMarshaller(final Class<T> type) {
+ assert type != null;
+
+ Marshaller<T> marshaller = marshallers.get(type);
+ if (marshaller == null) {
+ marshaller = new MarshallerSupport<T>(type);
+ marshallers.put(type, marshaller);
+ }
+
+ return marshaller;
+ }
}
\ No newline at end of file
Modified: geronimo/gshell/trunk/gshell-support/gshell-xstore/src/main/java/org/apache/geronimo/gshell/xstore/XStorePointerImpl.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-support/gshell-xstore/src/main/java/org/apache/geronimo/gshell/xstore/XStorePointerImpl.java?rev=706654&r1=706653&r2=706654&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-support/gshell-xstore/src/main/java/org/apache/geronimo/gshell/xstore/XStorePointerImpl.java (original)
+++ geronimo/gshell/trunk/gshell-support/gshell-xstore/src/main/java/org/apache/geronimo/gshell/xstore/XStorePointerImpl.java Tue Oct 21 08:10:19 2008
@@ -27,11 +27,11 @@
public class XStorePointerImpl
implements XStorePointer
{
- private transient XStore xstore;
+ private transient XStoreImpl xstore;
private String path;
- public XStorePointerImpl(final XStore xstore, final String path) {
+ XStorePointerImpl(final XStoreImpl xstore, final String path) {
assert xstore != null;
this.xstore = xstore;
assert path != null;
Modified: geronimo/gshell/trunk/gshell-support/gshell-xstore/src/main/java/org/apache/geronimo/gshell/xstore/XStoreRecordImpl.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-support/gshell-xstore/src/main/java/org/apache/geronimo/gshell/xstore/XStoreRecordImpl.java?rev=706654&r1=706653&r2=706654&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-support/gshell-xstore/src/main/java/org/apache/geronimo/gshell/xstore/XStoreRecordImpl.java (original)
+++ geronimo/gshell/trunk/gshell-support/gshell-xstore/src/main/java/org/apache/geronimo/gshell/xstore/XStoreRecordImpl.java Tue Oct 21 08:10:19 2008
@@ -23,7 +23,6 @@
import org.apache.commons.vfs.FileSystemException;
import org.apache.geronimo.gshell.io.Closer;
import org.apache.geronimo.gshell.marshal.Marshaller;
-import org.apache.geronimo.gshell.marshal.MarshallerSupport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -43,11 +42,11 @@
{
private final Logger log = LoggerFactory.getLogger(getClass());
- private final XStore xstore;
+ private final XStoreImpl xstore;
private final FileObject file;
- public XStoreRecordImpl(final XStore xstore, final FileObject file) {
+ XStoreRecordImpl(final XStoreImpl xstore, final FileObject file) {
assert xstore != null;
this.xstore = xstore;
assert file != null;
@@ -71,6 +70,8 @@
}
}
+ // TODO: Add marshaller cache
+
public void set(final Object value) {
assert value != null;
@@ -78,7 +79,7 @@
BufferedOutputStream output = null;
try {
- Marshaller marshaller = new MarshallerSupport(value.getClass());
+ Marshaller marshaller = xstore.getMarshaller(value.getClass());
output = new BufferedOutputStream(file.getContent().getOutputStream());
// noinspection unchecked
marshaller.marshal(value, output);
@@ -99,8 +100,8 @@
BufferedInputStream input = null;
try {
- Marshaller<T> marshaller = new MarshallerSupport<T>(type);
-
+ Marshaller<T> marshaller = xstore.getMarshaller(type);
+
FileObject parent = file.getParent();
if (parent != null && !parent.exists()) {
parent.createFolder();