[jbosscache-commits] JBoss Cache SVN: r6965 - in core/branches/flat/src/main/java/org/jboss: cache/loader and 10 other directories.
jbosscache-commits at lists.jboss.org
jbosscache-commits at lists.jboss.org
Wed Oct 15 16:48:28 EDT 2008
Author: mircea.markus
Date: 2008-10-15 16:48:28 -0400 (Wed, 15 Oct 2008)
New Revision: 6965
Added:
core/branches/flat/src/main/java/org/jboss/starobrno/marshall/VersionAwareMarshaller.java
core/branches/flat/src/main/java/org/jboss/starobrno/util/Util.java
Removed:
core/branches/flat/src/main/java/org/jboss/cache/util/Util.java
Modified:
core/branches/flat/src/main/java/org/jboss/cache/RegionImpl.java
core/branches/flat/src/main/java/org/jboss/cache/loader/AdjListJDBCCacheLoader.java
core/branches/flat/src/main/java/org/jboss/cache/loader/AdjListJDBCCacheLoaderConfig.java
core/branches/flat/src/main/java/org/jboss/cache/loader/FileCacheLoaderConfig.java
core/branches/flat/src/main/java/org/jboss/cache/loader/TcpDelegatingCacheLoaderConfig.java
core/branches/flat/src/main/java/org/jboss/cache/loader/bdbje/BdbjeCacheLoaderConfig.java
core/branches/flat/src/main/java/org/jboss/cache/loader/jdbm/JdbmCacheLoaderConfig.java
core/branches/flat/src/main/java/org/jboss/cache/marshall/VersionAwareMarshaller.java
core/branches/flat/src/main/java/org/jboss/starobrno/commands/CommandsFactoryImpl.java
core/branches/flat/src/main/java/org/jboss/starobrno/config/BuddyReplicationConfig.java
core/branches/flat/src/main/java/org/jboss/starobrno/config/CacheLoaderConfig.java
core/branches/flat/src/main/java/org/jboss/starobrno/config/EvictionRegionConfig.java
core/branches/flat/src/main/java/org/jboss/starobrno/config/RuntimeConfig.java
core/branches/flat/src/main/java/org/jboss/starobrno/config/parsing/element/CustomInterceptorsElementParser.java
core/branches/flat/src/main/java/org/jboss/starobrno/config/parsing/element/EvictionElementParser.java
core/branches/flat/src/main/java/org/jboss/starobrno/factories/EmptyConstructorFactory.java
core/branches/flat/src/main/java/org/jboss/starobrno/marshall/CacheMarshallerStarobrno.java
Log:
replication is versioned now
Modified: core/branches/flat/src/main/java/org/jboss/cache/RegionImpl.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/cache/RegionImpl.java 2008-10-15 20:24:43 UTC (rev 6964)
+++ core/branches/flat/src/main/java/org/jboss/cache/RegionImpl.java 2008-10-15 20:48:28 UTC (rev 6965)
@@ -23,7 +23,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.jboss.cache.util.Util;
+import org.jboss.starobrno.util.Util;
import org.jboss.starobrno.config.Configuration;
import org.jboss.starobrno.config.EvictionAlgorithmConfig;
import org.jboss.starobrno.config.EvictionRegionConfig;
Modified: core/branches/flat/src/main/java/org/jboss/cache/loader/AdjListJDBCCacheLoader.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/cache/loader/AdjListJDBCCacheLoader.java 2008-10-15 20:24:43 UTC (rev 6964)
+++ core/branches/flat/src/main/java/org/jboss/cache/loader/AdjListJDBCCacheLoader.java 2008-10-15 20:48:28 UTC (rev 6965)
@@ -27,7 +27,7 @@
import org.jboss.cache.Modification;
import org.jboss.starobrno.io.ByteBuffer;
import org.jboss.cache.lock.StripedLock;
-import org.jboss.cache.util.Util;
+import org.jboss.starobrno.util.Util;
import org.jboss.starobrno.config.CacheLoaderConfig;
import java.io.IOException;
Modified: core/branches/flat/src/main/java/org/jboss/cache/loader/AdjListJDBCCacheLoaderConfig.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/cache/loader/AdjListJDBCCacheLoaderConfig.java 2008-10-15 20:24:43 UTC (rev 6964)
+++ core/branches/flat/src/main/java/org/jboss/cache/loader/AdjListJDBCCacheLoaderConfig.java 2008-10-15 20:48:28 UTC (rev 6965)
@@ -21,7 +21,7 @@
*/
package org.jboss.cache.loader;
-import org.jboss.cache.util.Util;
+import org.jboss.starobrno.util.Util;
import org.jboss.starobrno.config.CacheLoaderConfig.IndividualCacheLoaderConfig;
import java.util.Properties;
Modified: core/branches/flat/src/main/java/org/jboss/cache/loader/FileCacheLoaderConfig.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/cache/loader/FileCacheLoaderConfig.java 2008-10-15 20:24:43 UTC (rev 6964)
+++ core/branches/flat/src/main/java/org/jboss/cache/loader/FileCacheLoaderConfig.java 2008-10-15 20:48:28 UTC (rev 6965)
@@ -21,7 +21,7 @@
*/
package org.jboss.cache.loader;
-import org.jboss.cache.util.Util;
+import org.jboss.starobrno.util.Util;
import org.jboss.starobrno.config.CacheLoaderConfig.IndividualCacheLoaderConfig;
import org.jboss.starobrno.config.Dynamic;
Modified: core/branches/flat/src/main/java/org/jboss/cache/loader/TcpDelegatingCacheLoaderConfig.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/cache/loader/TcpDelegatingCacheLoaderConfig.java 2008-10-15 20:24:43 UTC (rev 6964)
+++ core/branches/flat/src/main/java/org/jboss/cache/loader/TcpDelegatingCacheLoaderConfig.java 2008-10-15 20:48:28 UTC (rev 6965)
@@ -21,7 +21,7 @@
*/
package org.jboss.cache.loader;
-import org.jboss.cache.util.Util;
+import org.jboss.starobrno.util.Util;
import org.jboss.starobrno.config.CacheLoaderConfig.IndividualCacheLoaderConfig;
import java.util.Properties;
Modified: core/branches/flat/src/main/java/org/jboss/cache/loader/bdbje/BdbjeCacheLoaderConfig.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/cache/loader/bdbje/BdbjeCacheLoaderConfig.java 2008-10-15 20:24:43 UTC (rev 6964)
+++ core/branches/flat/src/main/java/org/jboss/cache/loader/bdbje/BdbjeCacheLoaderConfig.java 2008-10-15 20:48:28 UTC (rev 6965)
@@ -21,7 +21,7 @@
*/
package org.jboss.cache.loader.bdbje;
-import org.jboss.cache.util.Util;
+import org.jboss.starobrno.util.Util;
import org.jboss.starobrno.config.CacheLoaderConfig.IndividualCacheLoaderConfig;
import java.util.Properties;
Modified: core/branches/flat/src/main/java/org/jboss/cache/loader/jdbm/JdbmCacheLoaderConfig.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/cache/loader/jdbm/JdbmCacheLoaderConfig.java 2008-10-15 20:24:43 UTC (rev 6964)
+++ core/branches/flat/src/main/java/org/jboss/cache/loader/jdbm/JdbmCacheLoaderConfig.java 2008-10-15 20:48:28 UTC (rev 6965)
@@ -21,7 +21,7 @@
*/
package org.jboss.cache.loader.jdbm;
-import org.jboss.cache.util.Util;
+import org.jboss.starobrno.util.Util;
import org.jboss.starobrno.config.CacheLoaderConfig.IndividualCacheLoaderConfig;
import java.util.Properties;
Modified: core/branches/flat/src/main/java/org/jboss/cache/marshall/VersionAwareMarshaller.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/cache/marshall/VersionAwareMarshaller.java 2008-10-15 20:24:43 UTC (rev 6964)
+++ core/branches/flat/src/main/java/org/jboss/cache/marshall/VersionAwareMarshaller.java 2008-10-15 20:48:28 UTC (rev 6965)
@@ -26,7 +26,7 @@
import org.jboss.cache.Fqn;
import org.jboss.starobrno.io.ByteBuffer;
import org.jboss.starobrno.io.ExposedByteArrayOutputStream;
-import org.jboss.cache.util.Util;
+import org.jboss.starobrno.util.Util;
import org.jboss.starobrno.factories.ComponentRegistry;
import org.jboss.starobrno.factories.annotations.Inject;
import org.jboss.starobrno.factories.annotations.Start;
Deleted: core/branches/flat/src/main/java/org/jboss/cache/util/Util.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/cache/util/Util.java 2008-10-15 20:24:43 UTC (rev 6964)
+++ core/branches/flat/src/main/java/org/jboss/cache/util/Util.java 2008-10-15 20:48:28 UTC (rev 6965)
@@ -1,188 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2000 - 2008, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.cache.util;
-
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * General utility methods used throughout the JBC code base.
- *
- * @author <a href="brian.stansberry at jboss.com">Brian Stansberry</a>
- * @version $Revision$
- */
-public final class Util
-{
- /**
- * Loads the specified class using this class's classloader, or, if it is <code>null</code>
- * (i.e. this class was loaded by the bootstrap classloader), the system classloader.
- * <p/>
- * If loadtime instrumentation via GenerateInstrumentedClassLoader is used, this
- * class may be loaded by the bootstrap classloader.
- * </p>
- *
- * @param classname name of the class to load
- * @return the class
- * @throws ClassNotFoundException
- */
- public static Class loadClass(String classname) throws ClassNotFoundException
- {
- ClassLoader cl = Thread.currentThread().getContextClassLoader();
- if (cl == null)
- cl = ClassLoader.getSystemClassLoader();
- return cl.loadClass(classname);
- }
-
- @SuppressWarnings("unchecked")
- public static <T> T getInstance(Class<T> clazz) throws Exception
- {
- // first look for a getInstance() constructor
- T instance;
- try
- {
- Method factoryMethod = clazz.getMethod("getInstance", new Class[]{});
- instance = (T) factoryMethod.invoke(null);
- }
- catch (Exception e)
- {
- // no factory method or factory method failed. Try a constructor.
- instance = clazz.newInstance();
- }
- return instance;
- }
-
- @SuppressWarnings("unchecked")
- public static Object getInstance(String classname) throws Exception
- {
- if (classname == null) throw new IllegalArgumentException("Cannot load null class!");
- Class clazz = loadClass(classname);
- return getInstance(clazz);
- }
-
- /**
- * Prevent instantiation
- */
- private Util()
- {
- }
-
- /**
- * Calculates the diffs between data maps passed in to {@link org.jboss.cache.notifications.event.NodeModifiedEvent#getData()}
- * before and after modification. This only makes sense if the modification type is {@link org.jboss.cache.notifications.event.NodeModifiedEvent.ModificationType#PUT_MAP}.
- * Refer to {@link org.jboss.cache.notifications.event.NodeModifiedEvent} and {@link org.jboss.cache.notifications.annotation.NodeModified}.
- *
- * @param pre map of data before the node was modified
- * @param post Map of data after the node was modified
- * @return MapModifications containing the differences.
- */
- public static MapModifications diffNodeData(Map<Object, Object> pre, Map<Object, Object> post)
- {
- MapModifications mods = new MapModifications();
-
- // let's start with what's been added and modified.
- for (Map.Entry me : post.entrySet())
- {
- Object key = me.getKey();
- Object value = me.getValue();
- if (pre.containsKey(key))
- {
- if (!value.equals(pre.get(key)))
- {
- mods.modifiedEntries.put(key, value);
- }
- }
- else
- {
- mods.addedEntries.put(key, value);
- }
- }
-
- // now the removed entries.
- for (Map.Entry me : pre.entrySet())
- {
- Object key = me.getKey();
- if (!post.containsKey(key))
- {
- mods.removedEntries.put(key, me.getValue());
- }
- }
-
- return mods;
- }
-
- /**
- * Null-safe equality test.
- *
- * @param a first object to compare
- * @param b second object to compare
- * @return true if the objects are equals or both null, false otherwise.
- */
- public static boolean safeEquals(Object a, Object b)
- {
- return (a == b) || (a != null && a.equals(b));
- }
-
- /**
- * Static inner class that holds 3 maps - for data added, removed and modified.
- */
- public static class MapModifications
- {
- public final Map<Object, Object> addedEntries = new HashMap<Object, Object>();
- public final Map<Object, Object> removedEntries = new HashMap<Object, Object>();
- public final Map<Object, Object> modifiedEntries = new HashMap<Object, Object>();
-
-
- @Override
- public boolean equals(Object o)
- {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- MapModifications that = (MapModifications) o;
-
- if (addedEntries != null ? !addedEntries.equals(that.addedEntries) : that.addedEntries != null) return false;
- if (modifiedEntries != null ? !modifiedEntries.equals(that.modifiedEntries) : that.modifiedEntries != null)
- return false;
- if (removedEntries != null ? !removedEntries.equals(that.removedEntries) : that.removedEntries != null)
- return false;
-
- return true;
- }
-
- @Override
- public int hashCode()
- {
- int result;
- result = (addedEntries != null ? addedEntries.hashCode() : 0);
- result = 31 * result + (removedEntries != null ? removedEntries.hashCode() : 0);
- result = 31 * result + (modifiedEntries != null ? modifiedEntries.hashCode() : 0);
- return result;
- }
-
- @Override
- public String toString()
- {
- return "Added Entries " + addedEntries + " Removeed Entries " + removedEntries + " Modified Entries " + modifiedEntries;
- }
- }
-}
Modified: core/branches/flat/src/main/java/org/jboss/starobrno/commands/CommandsFactoryImpl.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/commands/CommandsFactoryImpl.java 2008-10-15 20:24:43 UTC (rev 6964)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/commands/CommandsFactoryImpl.java 2008-10-15 20:48:28 UTC (rev 6965)
@@ -22,16 +22,16 @@
package org.jboss.starobrno.commands;
import org.jboss.starobrno.CacheException;
-import org.jboss.starobrno.interceptors.InterceptorChain;
import org.jboss.starobrno.commands.read.GetKeyValueCommand;
import org.jboss.starobrno.commands.read.SizeCommand;
+import org.jboss.starobrno.commands.remote.ReplicateCommand;
import org.jboss.starobrno.commands.tx.CommitCommand;
import org.jboss.starobrno.commands.tx.PrepareCommand;
import org.jboss.starobrno.commands.tx.RollbackCommand;
import org.jboss.starobrno.commands.write.*;
-import org.jboss.starobrno.commands.remote.ReplicateCommand;
import org.jboss.starobrno.container.DataContainer;
import org.jboss.starobrno.factories.annotations.Inject;
+import org.jboss.starobrno.interceptors.InterceptorChain;
import org.jboss.starobrno.notifications.Notifier;
import org.jboss.starobrno.transaction.GlobalTransaction;
import org.jgroups.Address;
@@ -49,7 +49,7 @@
private InterceptorChain interceptorChain;
@Inject
- private void setupDependencies(DataContainer container, Notifier notifier, InterceptorChain interceptorChain)
+ public void setupDependencies(DataContainer container, Notifier notifier, InterceptorChain interceptorChain)
{
this.dataContainer = container;
this.notifier = notifier;
Modified: core/branches/flat/src/main/java/org/jboss/starobrno/config/BuddyReplicationConfig.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/config/BuddyReplicationConfig.java 2008-10-15 20:24:43 UTC (rev 6964)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/config/BuddyReplicationConfig.java 2008-10-15 20:48:28 UTC (rev 6965)
@@ -22,7 +22,7 @@
package org.jboss.starobrno.config;
import org.jboss.cache.buddyreplication.NextMemberBuddyLocator;
-import org.jboss.cache.util.Util;
+import org.jboss.starobrno.util.Util;
import java.util.Properties;
Modified: core/branches/flat/src/main/java/org/jboss/starobrno/config/CacheLoaderConfig.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/config/CacheLoaderConfig.java 2008-10-15 20:24:43 UTC (rev 6964)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/config/CacheLoaderConfig.java 2008-10-15 20:48:28 UTC (rev 6965)
@@ -23,7 +23,7 @@
import org.jboss.cache.loader.CacheLoader;
import org.jboss.cache.loader.SingletonStoreCacheLoader;
-import org.jboss.cache.util.Util;
+import org.jboss.starobrno.util.Util;
import java.util.ArrayList;
import java.util.List;
Modified: core/branches/flat/src/main/java/org/jboss/starobrno/config/EvictionRegionConfig.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/config/EvictionRegionConfig.java 2008-10-15 20:24:43 UTC (rev 6964)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/config/EvictionRegionConfig.java 2008-10-15 20:48:28 UTC (rev 6965)
@@ -23,7 +23,7 @@
import org.apache.commons.logging.LogFactory;
import org.jboss.cache.Fqn;
-import org.jboss.cache.util.Util;
+import org.jboss.starobrno.util.Util;
import java.lang.reflect.Method;
Modified: core/branches/flat/src/main/java/org/jboss/starobrno/config/RuntimeConfig.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/config/RuntimeConfig.java 2008-10-15 20:24:43 UTC (rev 6964)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/config/RuntimeConfig.java 2008-10-15 20:48:28 UTC (rev 6965)
@@ -23,7 +23,7 @@
import org.jboss.cache.RPCManager;
import org.jboss.cache.buddyreplication.BuddyGroup;
-import org.jboss.cache.util.Util;
+import org.jboss.starobrno.util.Util;
import org.jgroups.Channel;
import org.jgroups.ChannelFactory;
import org.jgroups.util.ThreadFactory;
Modified: core/branches/flat/src/main/java/org/jboss/starobrno/config/parsing/element/CustomInterceptorsElementParser.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/config/parsing/element/CustomInterceptorsElementParser.java 2008-10-15 20:24:43 UTC (rev 6964)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/config/parsing/element/CustomInterceptorsElementParser.java 2008-10-15 20:48:28 UTC (rev 6965)
@@ -22,7 +22,7 @@
package org.jboss.starobrno.config.parsing.element;
-import org.jboss.cache.util.Util;
+import org.jboss.starobrno.util.Util;
import org.jboss.starobrno.config.ConfigurationException;
import org.jboss.starobrno.config.CustomInterceptorConfig;
import org.jboss.starobrno.config.parsing.ParsedAttributes;
Modified: core/branches/flat/src/main/java/org/jboss/starobrno/config/parsing/element/EvictionElementParser.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/config/parsing/element/EvictionElementParser.java 2008-10-15 20:24:43 UTC (rev 6964)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/config/parsing/element/EvictionElementParser.java 2008-10-15 20:48:28 UTC (rev 6965)
@@ -21,7 +21,7 @@
*/
package org.jboss.starobrno.config.parsing.element;
-import org.jboss.cache.util.Util;
+import org.jboss.starobrno.util.Util;
import org.jboss.starobrno.config.ConfigurationException;
import org.jboss.starobrno.config.EvictionAlgorithmConfig;
import org.jboss.starobrno.config.EvictionConfig;
Modified: core/branches/flat/src/main/java/org/jboss/starobrno/factories/EmptyConstructorFactory.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/factories/EmptyConstructorFactory.java 2008-10-15 20:24:43 UTC (rev 6964)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/factories/EmptyConstructorFactory.java 2008-10-15 20:48:28 UTC (rev 6965)
@@ -35,6 +35,7 @@
import org.jboss.starobrno.remoting.ChannelMessageListener;
import org.jboss.starobrno.marshall.ExtendedMarshaller;
import org.jboss.starobrno.marshall.CacheMarshallerStarobrno;
+import org.jboss.starobrno.marshall.VersionAwareMarshaller;
import org.jboss.starobrno.RPCManager;
import org.jboss.cache.loader.CacheLoaderManager;
import org.jboss.cache.invocation.CacheInvocationDelegate;
@@ -65,7 +66,7 @@
Class componentImpl;
if (componentType.equals(ExtendedMarshaller.class))
{
- componentImpl = CacheMarshallerStarobrno.class;
+ componentImpl = VersionAwareMarshaller.class;
}
else
if (componentType.equals(RPCManager.class))
Modified: core/branches/flat/src/main/java/org/jboss/starobrno/marshall/CacheMarshallerStarobrno.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/marshall/CacheMarshallerStarobrno.java 2008-10-15 20:24:43 UTC (rev 6964)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/marshall/CacheMarshallerStarobrno.java 2008-10-15 20:48:28 UTC (rev 6965)
@@ -100,11 +100,11 @@
protected ClassLoader defaultClassLoader;
protected boolean useRefs = false;
- @Inject
- void injectDependencies(Configuration configuration, ClassLoader defaultClassLoader)
+ public void init(Configuration configuration, ClassLoader defaultClassLoader, CommandsFactory commandsFactory)
{
this.defaultClassLoader = defaultClassLoader;
this.configuration = configuration;
+ this.commandsFactory = commandsFactory;
}
protected void initLogger()
@@ -124,13 +124,6 @@
protected CommandsFactory commandsFactory;
-
- @Inject
- public void injectCommandsFactory(CommandsFactory commandsFactory)
- {
- this.commandsFactory = commandsFactory;
- }
-
protected void marshallObject(Object o, ObjectOutputStream out, Map<Object, Integer> refMap) throws Exception
{
if (o != null && o.getClass().isArray() && isKnownType(o.getClass().getComponentType()))
Copied: core/branches/flat/src/main/java/org/jboss/starobrno/marshall/VersionAwareMarshaller.java (from rev 6959, core/branches/flat/src/main/java/org/jboss/cache/marshall/VersionAwareMarshaller.java)
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/marshall/VersionAwareMarshaller.java (rev 0)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/marshall/VersionAwareMarshaller.java 2008-10-15 20:48:28 UTC (rev 6965)
@@ -0,0 +1,155 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2000 - 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.starobrno.marshall;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jboss.starobrno.io.ByteBuffer;
+import org.jboss.starobrno.io.ExposedByteArrayOutputStream;
+import org.jboss.starobrno.factories.annotations.Inject;
+import org.jboss.starobrno.config.Configuration;
+import org.jboss.starobrno.commands.CommandsFactory;
+import org.jboss.util.stream.MarshalledValueInputStream;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.StringTokenizer;
+
+/**
+ * A delegate to various other marshallers like {@link org.jboss.cache.marshall.CacheMarshaller200}.
+ * This delegating marshaller adds versioning information to the stream when marshalling objects and
+ * is able to pick the appropriate marshaller to delegate to based on the versioning information when
+ * unmarshalling objects.
+ *
+ * @author <a href="mailto:manik at jboss.org">Manik Surtani (manik at jboss.org)</a>
+ * @author <a href="mailto:galder.zamarreno at jboss.com">Galder Zamarreno</a>
+ */
+public class VersionAwareMarshaller implements ExtendedMarshaller
+{
+ private static final Log log = LogFactory.getLog(VersionAwareMarshaller.class);
+ private boolean trace = log.isTraceEnabled();
+
+ private static final int VERSION_400 = 40;
+ private static final int CUSTOM_MARSHALLER = 999;
+
+ private CacheMarshallerStarobrno defaultMarshaller;
+
+ ClassLoader defaultClassLoader;
+ private Configuration configuration;
+
+ @Inject
+ public void init(ClassLoader loader, Configuration configuration, CommandsFactory factory)
+ {
+ defaultMarshaller = new CacheMarshallerStarobrno();
+ defaultMarshaller.init(configuration, loader, factory);
+ }
+
+ protected int getCustomMarshallerVersionInt()
+ {
+ return CUSTOM_MARSHALLER;
+ }
+
+ public ByteBuffer objectToBuffer(Object obj) throws Exception
+ {
+ ExposedByteArrayOutputStream baos = new ExposedByteArrayOutputStream(128);
+ ObjectOutputStream out = new ObjectOutputStream(baos);
+
+ out.writeShort(VERSION_400);
+ if (trace) log.trace("Wrote version " + VERSION_400);
+
+ //now marshall the contents of the object
+ defaultMarshaller.objectToObjectStream(obj, out);
+ out.close();
+
+ // and return bytes.
+ return new ByteBuffer(baos.getRawBuffer(), 0, baos.size());
+ }
+
+ public Object objectFromByteBuffer(byte[] bytes, int offset, int len) throws Exception
+ {
+ int versionId;
+ ObjectInputStream in = new MarshalledValueInputStream(new ByteArrayInputStream(bytes, offset, len));
+ try
+ {
+ versionId = in.readShort();
+ if (trace) log.trace("Read version " + versionId);
+ }
+ catch (Exception e)
+ {
+ log.error("Unable to read version id from first two bytes of stream, barfing.");
+ throw e;
+ }
+ return defaultMarshaller.objectFromObjectStream(in);
+ }
+
+ public Object objectFromStream(InputStream is) throws Exception
+ {
+ short versionId;
+ ObjectInputStream in = new MarshalledValueInputStream(is);
+ try
+ {
+ versionId = in.readShort();
+ if (trace) log.trace("Read version " + versionId);
+ }
+ catch (Exception e)
+ {
+ log.error("Unable to read version id from first two bytes of stream, barfing.");
+ throw e;
+ }
+ return defaultMarshaller.objectFromObjectStream(in);
+ }
+
+ public void objectToObjectStream(Object obj, ObjectOutputStream out) throws Exception
+ {
+ out.writeShort(VERSION_400);
+ if (trace) log.trace("Wrote version " + VERSION_400);
+ defaultMarshaller.objectToObjectStream(obj, out);
+ }
+
+ public Object objectFromObjectStream(ObjectInputStream in) throws Exception
+ {
+ int versionId;
+ try
+ {
+ versionId = in.readShort();
+ if (trace) log.trace("Read version " + versionId);
+ }
+ catch (Exception e)
+ {
+ log.error("Unable to read version id from first two bytes of stream, barfing.");
+ throw e;
+ }
+ return defaultMarshaller.objectFromObjectStream(in);
+ }
+
+ public byte[] objectToByteBuffer(Object obj) throws Exception
+ {
+ return defaultMarshaller.objectToByteBuffer(obj);
+ }
+
+ public Object objectFromByteBuffer(byte[] buf) throws Exception
+ {
+ return defaultMarshaller.objectFromByteBuffer(buf);
+ }
+}
\ No newline at end of file
Property changes on: core/branches/flat/src/main/java/org/jboss/starobrno/marshall/VersionAwareMarshaller.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:mergeinfo
+
Name: svn:eol-style
+ native
Copied: core/branches/flat/src/main/java/org/jboss/starobrno/util/Util.java (from rev 6959, core/branches/flat/src/main/java/org/jboss/cache/util/Util.java)
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/util/Util.java (rev 0)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/util/Util.java 2008-10-15 20:48:28 UTC (rev 6965)
@@ -0,0 +1,188 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2000 - 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.starobrno.util;
+
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * General utility methods used throughout the JBC code base.
+ *
+ * @author <a href="brian.stansberry at jboss.com">Brian Stansberry</a>
+ * @version $Revision$
+ */
+public final class Util
+{
+ /**
+ * Loads the specified class using this class's classloader, or, if it is <code>null</code>
+ * (i.e. this class was loaded by the bootstrap classloader), the system classloader.
+ * <p/>
+ * If loadtime instrumentation via GenerateInstrumentedClassLoader is used, this
+ * class may be loaded by the bootstrap classloader.
+ * </p>
+ *
+ * @param classname name of the class to load
+ * @return the class
+ * @throws ClassNotFoundException
+ */
+ public static Class loadClass(String classname) throws ClassNotFoundException
+ {
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ if (cl == null)
+ cl = ClassLoader.getSystemClassLoader();
+ return cl.loadClass(classname);
+ }
+
+ @SuppressWarnings("unchecked")
+ public static <T> T getInstance(Class<T> clazz) throws Exception
+ {
+ // first look for a getInstance() constructor
+ T instance;
+ try
+ {
+ Method factoryMethod = clazz.getMethod("getInstance", new Class[]{});
+ instance = (T) factoryMethod.invoke(null);
+ }
+ catch (Exception e)
+ {
+ // no factory method or factory method failed. Try a constructor.
+ instance = clazz.newInstance();
+ }
+ return instance;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static Object getInstance(String classname) throws Exception
+ {
+ if (classname == null) throw new IllegalArgumentException("Cannot load null class!");
+ Class clazz = loadClass(classname);
+ return getInstance(clazz);
+ }
+
+ /**
+ * Prevent instantiation
+ */
+ private Util()
+ {
+ }
+
+ /**
+ * Calculates the diffs between data maps passed in to {@link org.jboss.cache.notifications.event.NodeModifiedEvent#getData()}
+ * before and after modification. This only makes sense if the modification type is {@link org.jboss.cache.notifications.event.NodeModifiedEvent.ModificationType#PUT_MAP}.
+ * Refer to {@link org.jboss.cache.notifications.event.NodeModifiedEvent} and {@link org.jboss.cache.notifications.annotation.NodeModified}.
+ *
+ * @param pre map of data before the node was modified
+ * @param post Map of data after the node was modified
+ * @return MapModifications containing the differences.
+ */
+ public static MapModifications diffNodeData(Map<Object, Object> pre, Map<Object, Object> post)
+ {
+ MapModifications mods = new MapModifications();
+
+ // let's start with what's been added and modified.
+ for (Map.Entry me : post.entrySet())
+ {
+ Object key = me.getKey();
+ Object value = me.getValue();
+ if (pre.containsKey(key))
+ {
+ if (!value.equals(pre.get(key)))
+ {
+ mods.modifiedEntries.put(key, value);
+ }
+ }
+ else
+ {
+ mods.addedEntries.put(key, value);
+ }
+ }
+
+ // now the removed entries.
+ for (Map.Entry me : pre.entrySet())
+ {
+ Object key = me.getKey();
+ if (!post.containsKey(key))
+ {
+ mods.removedEntries.put(key, me.getValue());
+ }
+ }
+
+ return mods;
+ }
+
+ /**
+ * Null-safe equality test.
+ *
+ * @param a first object to compare
+ * @param b second object to compare
+ * @return true if the objects are equals or both null, false otherwise.
+ */
+ public static boolean safeEquals(Object a, Object b)
+ {
+ return (a == b) || (a != null && a.equals(b));
+ }
+
+ /**
+ * Static inner class that holds 3 maps - for data added, removed and modified.
+ */
+ public static class MapModifications
+ {
+ public final Map<Object, Object> addedEntries = new HashMap<Object, Object>();
+ public final Map<Object, Object> removedEntries = new HashMap<Object, Object>();
+ public final Map<Object, Object> modifiedEntries = new HashMap<Object, Object>();
+
+
+ @Override
+ public boolean equals(Object o)
+ {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ MapModifications that = (MapModifications) o;
+
+ if (addedEntries != null ? !addedEntries.equals(that.addedEntries) : that.addedEntries != null) return false;
+ if (modifiedEntries != null ? !modifiedEntries.equals(that.modifiedEntries) : that.modifiedEntries != null)
+ return false;
+ if (removedEntries != null ? !removedEntries.equals(that.removedEntries) : that.removedEntries != null)
+ return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int result;
+ result = (addedEntries != null ? addedEntries.hashCode() : 0);
+ result = 31 * result + (removedEntries != null ? removedEntries.hashCode() : 0);
+ result = 31 * result + (modifiedEntries != null ? modifiedEntries.hashCode() : 0);
+ return result;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "Added Entries " + addedEntries + " Removeed Entries " + removedEntries + " Modified Entries " + modifiedEntries;
+ }
+ }
+}
Property changes on: core/branches/flat/src/main/java/org/jboss/starobrno/util/Util.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
More information about the jbosscache-commits
mailing list