Merge branch 'master' of git@github.com:Qi4j/qi4j-sandbox
Conflicts:
extensions/osgi/bootstrap/pom.xml
extensions/osgi/example/pom.xml
extensions/osgi/integrationTests/pom.xml
extensions/osgi/testBootstrap/pom.xml
extensions/pom.xml
libraries/entityproxy/pom.xml
libraries/pom.xml
diff --git a/extensions/entitystore-javaspaces/src/main/java/org/qi4j/entitystore/javaspaces/JavaSpacesEntityStoreMixin.java b/extensions/entitystore-javaspaces/src/main/java/org/qi4j/entitystore/javaspaces/JavaSpacesEntityStoreMixin.java
index da1d9c7..6038807 100644
--- a/extensions/entitystore-javaspaces/src/main/java/org/qi4j/entitystore/javaspaces/JavaSpacesEntityStoreMixin.java
+++ b/extensions/entitystore-javaspaces/src/main/java/org/qi4j/entitystore/javaspaces/JavaSpacesEntityStoreMixin.java
@@ -16,19 +16,20 @@
*/
package org.qi4j.entitystore.javaspaces;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.io.Writer;
import org.qi4j.api.entity.EntityReference;
import org.qi4j.api.injection.scope.Service;
+import org.qi4j.api.io.Input;
+import org.qi4j.api.io.Output;
+import org.qi4j.api.io.Receiver;
+import org.qi4j.api.io.Sender;
import org.qi4j.entitystore.map.MapEntityStore;
import org.qi4j.library.spaces.Space;
import org.qi4j.spi.entity.EntityType;
import org.qi4j.spi.entitystore.EntityNotFoundException;
import org.qi4j.spi.entitystore.EntityStoreException;
+import java.io.*;
+
/**
* Java Spaces implementation of EntityStore.
*/
@@ -50,16 +51,26 @@
return new StringReader( jsonData );
}
- public <ThrowableType extends Throwable> void visitMap( MapEntityStoreVisitor<ThrowableType> visitor )
- throws ThrowableType
+ public Input<Reader, IOException> entityStates()
{
- for( String json : space )
+ return new Input<Reader, IOException>()
{
- Reader state = new StringReader( json );
- visitor.visitEntity( state );
- }
+ public <ReceiverThrowableType extends Throwable> void transferTo( Output<Reader, ReceiverThrowableType> output ) throws IOException, ReceiverThrowableType
+ {
+ output.receiveFrom( new Sender<Reader, IOException>()
+ {
+ public <ReceiverThrowableType extends Throwable> void sendTo( Receiver<Reader, ReceiverThrowableType> receiver ) throws ReceiverThrowableType, IOException
+ {
+ for (String json : space)
+ {
+ Reader state = new StringReader( json );
+ receiver.receive( state );
+ }
+ }
+ });
+ }
+ };
}
-
public void applyChanges( MapChanges changes )
throws IOException
{
diff --git a/extensions/entitystore-jgroups/osgi.bundle b/extensions/entitystore-jgroups/osgi.bundle
index 4c53b48..30d169e 100644
--- a/extensions/entitystore-jgroups/osgi.bundle
+++ b/extensions/entitystore-jgroups/osgi.bundle
@@ -26,6 +26,7 @@
org.qi4j.api.concern, \
org.qi4j.api.entity, \
org.qi4j.api.injection.scope, \
+ org.qi4j.api.io, \
org.qi4j.api.mixin, \
org.qi4j.api.service, \
org.qi4j.api.structure,\
diff --git a/extensions/entitystore-jgroups/src/main/java/org/qi4j/entitystore/jgroups/JGroupsEntityStoreMixin.java b/extensions/entitystore-jgroups/src/main/java/org/qi4j/entitystore/jgroups/JGroupsEntityStoreMixin.java
index 429e1e5..c1bfcff 100644
--- a/extensions/entitystore-jgroups/src/main/java/org/qi4j/entitystore/jgroups/JGroupsEntityStoreMixin.java
+++ b/extensions/entitystore-jgroups/src/main/java/org/qi4j/entitystore/jgroups/JGroupsEntityStoreMixin.java
@@ -17,26 +17,26 @@
package org.qi4j.entitystore.jgroups;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.util.Map;
import org.jgroups.JChannel;
import org.jgroups.blocks.ReplicatedHashMap;
import org.qi4j.api.entity.EntityReference;
+import org.qi4j.api.io.Input;
+import org.qi4j.api.io.Output;
+import org.qi4j.api.io.Receiver;
+import org.qi4j.api.io.Sender;
import org.qi4j.api.service.Activatable;
import org.qi4j.entitystore.map.MapEntityStore;
import org.qi4j.spi.entity.EntityType;
import org.qi4j.spi.entitystore.EntityNotFoundException;
import org.qi4j.spi.entitystore.EntityStoreException;
+import java.io.*;
+
/**
* JGroups implementation of EntityStore
*/
public class JGroupsEntityStoreMixin
- implements Activatable, MapEntityStore
+ implements Activatable, MapEntityStore
{
private JChannel channel;
private ReplicatedHashMap<String, String> replicatedMap;
@@ -55,30 +55,41 @@
}
public Reader get( EntityReference entityReference )
- throws EntityStoreException
+ throws EntityStoreException
{
try
{
String data = replicatedMap.get( entityReference.identity() );
- if( data == null )
+ if (data == null)
{
throw new EntityNotFoundException( entityReference );
}
return new StringReader( data );
}
- catch( RuntimeException e )
+ catch (RuntimeException e)
{
throw new EntityStoreException( e );
}
}
- public <ThrowableType extends Throwable> void visitMap( MapEntityStoreVisitor<ThrowableType> visitor )
- throws ThrowableType
+ public Input<Reader, IOException> entityStates()
{
- for( Map.Entry<String, String> key : replicatedMap.entrySet() )
+ return new Input<Reader, IOException>()
{
- visitor.visitEntity( new StringReader( key.getValue() ) );
- }
+ public <ReceiverThrowableType extends Throwable> void transferTo( Output<Reader, ReceiverThrowableType> output ) throws IOException, ReceiverThrowableType
+ {
+ output.receiveFrom( new Sender<Reader, IOException>()
+ {
+ public <ReceiverThrowableType extends Throwable> void sendTo( Receiver<Reader, ReceiverThrowableType> receiver ) throws ReceiverThrowableType, IOException
+ {
+ for (String json : replicatedMap.values())
+ {
+ receiver.receive( new StringReader(json) );
+ }
+ }
+ } );
+ }
+ };
}
public void applyChanges( MapChanges changes ) throws IOException
@@ -91,7 +102,8 @@
{
return new StringWriter( 1000 )
{
- @Override public void close() throws IOException
+ @Override
+ public void close() throws IOException
{
super.close();
String value = toString();
@@ -105,7 +117,8 @@
{
return new StringWriter( 1000 )
{
- @Override public void close() throws IOException
+ @Override
+ public void close() throws IOException
{
super.close();
String value = toString();
@@ -121,7 +134,7 @@
}
} );
}
- catch( RuntimeException e )
+ catch (RuntimeException e)
{
IOException exception = new IOException();
exception.initCause( e );
diff --git a/extensions/entitystore-jndi/osgi.bundle b/extensions/entitystore-jndi/osgi.bundle
index 7edd201..ddb1f77 100644
--- a/extensions/entitystore-jndi/osgi.bundle
+++ b/extensions/entitystore-jndi/osgi.bundle
@@ -7,6 +7,7 @@
org.qi4j.api.configuration, \
org.qi4j.api.entity, \
org.qi4j.api.injection.scope, \
+ org.qi4j.api.io, \
org.qi4j.api.mixin, \
org.qi4j.api.property, \
org.qi4j.api.service, \
diff --git a/extensions/entitystore-jndi/src/main/java/org/qi4j/entitystore/jndi/JndiEntityStoreMixin.java b/extensions/entitystore-jndi/src/main/java/org/qi4j/entitystore/jndi/JndiEntityStoreMixin.java
index 1cba272..6a124e4 100644
--- a/extensions/entitystore-jndi/src/main/java/org/qi4j/entitystore/jndi/JndiEntityStoreMixin.java
+++ b/extensions/entitystore-jndi/src/main/java/org/qi4j/entitystore/jndi/JndiEntityStoreMixin.java
@@ -17,20 +17,24 @@
*/
package org.qi4j.entitystore.jndi;
-import java.util.Hashtable;
-import javax.naming.Context;
-import javax.naming.NamingException;
-import javax.naming.directory.InitialDirContext;
import org.qi4j.api.configuration.Configuration;
import org.qi4j.api.injection.scope.This;
+import org.qi4j.api.io.Input;
+import org.qi4j.api.io.Output;
import org.qi4j.api.property.Property;
import org.qi4j.api.service.Activatable;
import org.qi4j.api.usecase.Usecase;
-import org.qi4j.api.structure.Module;
+import org.qi4j.spi.entity.EntityState;
import org.qi4j.spi.entitystore.EntityStore;
+import org.qi4j.spi.entitystore.EntityStoreException;
import org.qi4j.spi.entitystore.EntityStoreUnitOfWork;
import org.qi4j.spi.structure.ModuleSPI;
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.naming.directory.InitialDirContext;
+import java.util.Hashtable;
+
public class JndiEntityStoreMixin
implements Activatable, EntityStore
{
@@ -110,10 +114,14 @@
return new JndiUow( setup, usecase, module );
}
- public EntityStoreUnitOfWork visitEntityStates( EntityStateVisitor visitor, ModuleSPI module )
- {
- JndiUow uow = new JndiUow(setup, Usecase.DEFAULT, module);
- // TODO Actual iteration
- return uow;
- }
+ public Input<EntityState, EntityStoreException> entityStates( ModuleSPI module )
+ {
+ return new Input<EntityState, EntityStoreException>()
+ {
+ public <ReceiverThrowableType extends Throwable> void transferTo( Output<EntityState, ReceiverThrowableType> entityStateReceiverThrowableTypeOutput ) throws EntityStoreException, ReceiverThrowableType
+ {
+ // TODO Actual iteration
+ }
+ };
+ }
}
\ No newline at end of file
diff --git a/extensions/entitystore-rmi/osgi.bundle b/extensions/entitystore-rmi/osgi.bundle
index 4ad337f..66452e5 100644
--- a/extensions/entitystore-rmi/osgi.bundle
+++ b/extensions/entitystore-rmi/osgi.bundle
@@ -9,6 +9,7 @@
org.qi4j.api.configuration, \
org.qi4j.api.entity, \
org.qi4j.api.injection.scope, \
+ org.qi4j.api.io, \
org.qi4j.api.mixin, \
org.qi4j.api.property, \
org.qi4j.api.service, \
diff --git a/extensions/entitystore-rmi/src/main/java/org/qi4j/entitystore/rmi/ClientRmiEntityStoreMixin.java b/extensions/entitystore-rmi/src/main/java/org/qi4j/entitystore/rmi/ClientRmiEntityStoreMixin.java
index 18ac4e4..450a56c 100644
--- a/extensions/entitystore-rmi/src/main/java/org/qi4j/entitystore/rmi/ClientRmiEntityStoreMixin.java
+++ b/extensions/entitystore-rmi/src/main/java/org/qi4j/entitystore/rmi/ClientRmiEntityStoreMixin.java
@@ -16,14 +16,17 @@
*/
package org.qi4j.entitystore.rmi;
+import org.qi4j.api.entity.EntityReference;
+import org.qi4j.api.io.Input;
+import org.qi4j.api.io.Output;
+import org.qi4j.api.service.Activatable;
+import org.qi4j.entitystore.map.MapEntityStore;
+import org.qi4j.spi.entitystore.EntityStoreException;
+
import java.io.IOException;
import java.io.Reader;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
-import org.qi4j.api.entity.EntityReference;
-import org.qi4j.api.service.Activatable;
-import org.qi4j.entitystore.map.MapEntityStore;
-import org.qi4j.spi.entitystore.EntityStoreException;
/**
* RMI client implementation of Entity
@@ -53,9 +56,15 @@
return null; //To change body of implemented methods use File | Settings | File Templates.
}
- public void visitMap( MapEntityStoreVisitor visitor )
+ public Input<Reader, IOException> entityStates()
{
- //To change body of implemented methods use File | Settings | File Templates.
+ return new Input<Reader, IOException>()
+ {
+ public <ReceiverThrowableType extends Throwable> void transferTo( Output<Reader, ReceiverThrowableType> readerReceiverThrowableTypeOutput ) throws IOException, ReceiverThrowableType
+ {
+ // TODO Implement this
+ }
+ };
}
public void applyChanges( MapChanges changes )
diff --git a/extensions/entitystore-s3/osgi.bundle b/extensions/entitystore-s3/osgi.bundle
index 69e957d..2156ebb 100644
--- a/extensions/entitystore-s3/osgi.bundle
+++ b/extensions/entitystore-s3/osgi.bundle
@@ -13,6 +13,7 @@
org.qi4j.api.configuration, \
org.qi4j.api.entity, \
org.qi4j.api.injection.scope, \
+ org.qi4j.api.io, \
org.qi4j.entitystore.map, \
org.qi4j.library.locking, \
org.qi4j.api.property, \
diff --git a/extensions/entitystore-s3/src/main/java/org/qi4j/entitystore/s3/S3SerializationStoreMixin.java b/extensions/entitystore-s3/src/main/java/org/qi4j/entitystore/s3/S3SerializationStoreMixin.java
index fb42e77..ae2547d 100644
--- a/extensions/entitystore-s3/src/main/java/org/qi4j/entitystore/s3/S3SerializationStoreMixin.java
+++ b/extensions/entitystore-s3/src/main/java/org/qi4j/entitystore/s3/S3SerializationStoreMixin.java
@@ -16,8 +16,6 @@
*/
package org.qi4j.entitystore.s3;
-import java.io.IOException;
-import java.io.Reader;
import org.jets3t.service.S3Service;
import org.jets3t.service.impl.rest.httpclient.RestS3Service;
import org.jets3t.service.model.S3Bucket;
@@ -25,10 +23,15 @@
import org.qi4j.api.configuration.Configuration;
import org.qi4j.api.entity.EntityReference;
import org.qi4j.api.injection.scope.This;
+import org.qi4j.api.io.Input;
+import org.qi4j.api.io.Output;
import org.qi4j.api.service.Activatable;
import org.qi4j.entitystore.map.MapEntityStore;
import org.qi4j.spi.entitystore.EntityStoreException;
+import java.io.IOException;
+import java.io.Reader;
+
/**
* Amazon S3 implementation of SerializationStore.
* <p/>
@@ -85,9 +88,15 @@
return null; //To change body of implemented methods use File | Settings | File Templates.
}
- public void visitMap( MapEntityStoreVisitor visitor )
+ public Input<Reader, IOException> entityStates()
{
- //To change body of implemented methods use File | Settings | File Templates.
+ return new Input<Reader, IOException>()
+ {
+ public <ReceiverThrowableType extends Throwable> void transferTo( Output<Reader, ReceiverThrowableType> readerReceiverThrowableTypeOutput ) throws IOException, ReceiverThrowableType
+ {
+ // TODO Implement this
+ }
+ };
}
public void applyChanges( MapChanges changes )
diff --git a/extensions/entitystore-swift/osgi.bundle b/extensions/entitystore-swift/osgi.bundle
index a6fe903..6571e76 100644
--- a/extensions/entitystore-swift/osgi.bundle
+++ b/extensions/entitystore-swift/osgi.bundle
@@ -10,6 +10,7 @@
org.qi4j.api.configuration, \
org.qi4j.api.entity, \
org.qi4j.api.injection.scope, \
+ org.qi4j.api.io, \
org.qi4j.api.mixin, \
org.qi4j.api.property, \
org.qi4j.api.sideeffect, \
diff --git a/extensions/entitystore-swift/src/main/java/org/qi4j/entitystore/swift/DataStore.java b/extensions/entitystore-swift/src/main/java/org/qi4j/entitystore/swift/DataStore.java
index 17bc80a..7568b80 100644
--- a/extensions/entitystore-swift/src/main/java/org/qi4j/entitystore/swift/DataStore.java
+++ b/extensions/entitystore-swift/src/main/java/org/qi4j/entitystore/swift/DataStore.java
@@ -17,25 +17,26 @@
*/
package org.qi4j.entitystore.swift;
-import java.io.File;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.io.StringReader;
import org.qi4j.api.entity.EntityReference;
-import org.qi4j.entitystore.map.MapEntityStore;
+import org.qi4j.api.io.Input;
+import org.qi4j.api.io.Output;
+import org.qi4j.api.io.Receiver;
+import org.qi4j.api.io.Sender;
import org.qi4j.spi.entitystore.EntityStoreException;
+import java.io.*;
+
/**
* This class handles the Heap Data file.
* The format of the file is as follows;
- *
+ * <p/>
* <code><pre>
* At OFFSET = 0
* [cleanShutDown] 1 byte
* [formatVersion] 4 bytes
* [noOfEntries] 4 bytes
* [noOfIDentries] 4 bytes
- *
+ * <p/>
* At OFFSET 256
* [blockSize] 4 bytes
* [usage] 1 byte (0=Unused, 1=prime, 2=mirror, 3=primeChanged, 4=mirrorChanged)
@@ -48,7 +49,7 @@
* [primeData] n bytes
* [mirrorDataLength] 4 bytes
* [mirrorData] n bytes
- *
+ * <p/>
* At OFFSET 256 + [blockSize]
* same as above, repeat until [blockSize] == -1 marking end of DataArea.
* </pre></code>
@@ -82,13 +83,13 @@
this.dataDir = dataDirectory.getAbsoluteFile();
dataDir.mkdirs();
File file = new File( dataDir, HEAP_DATA_FILENAME );
- if( !file.exists() )
+ if (!file.exists())
{
file.createNewFile();
}
dataFile = new RandomAccessFile( file, "rw" );
boolean cleanShutDown;
- if( file.length() > 0 )
+ if (file.length() > 0)
{
dataFile.seek( 0 );
cleanShutDown = dataFile.readBoolean();
@@ -97,8 +98,7 @@
dataFile.writeInt( CURRENT_VERSION ); // Write Version.
entries = dataFile.readInt();
identityMaxLength = dataFile.readInt();
- }
- else
+ } else
{
cleanShutDown = false;
dataFile.writeBoolean( false );
@@ -116,23 +116,22 @@
dataFile = new RandomAccessFile( file, "rw" );
- if( !cleanShutDown )
+ if (!cleanShutDown)
{
reIndex();
- }
- else
+ } else
{
File idDir = new File( dataDir, "idx" );
try
{
identityFile = IdentityFile.use( idDir );
}
- catch( MalformedIdentityDirectoryException e )
+ catch (MalformedIdentityDirectoryException e)
{
reIndex();
}
}
- if( identityFile.entries() < entries * 2 )
+ if (identityFile.entries() < entries * 2)
{
reIndex();
}
@@ -152,7 +151,7 @@
throws IOException
{
long pos = identityFile.find( reference );
- if( pos < 0 )
+ if (pos < 0)
{
return null;
}
@@ -165,11 +164,10 @@
throws IOException
{
long pos = identityFile.find( data.reference );
- if( pos < 0 )
+ if (pos < 0)
{
putNewData( data );
- }
- else
+ } else
{
dataFile.seek( pos );
int blockSize = dataFile.readInt();
@@ -177,12 +175,11 @@
byte usage = dataFile.readByte();
dataFile.skipBytes( -1 );
dataFile.writeByte( usage == USAGE_PRIME ? USAGE_PRIMECHANGE : USAGE_MIRRORCHANGE );
- int dataAreaSize = ( blockSize - BLOCK_OVERHEAD ) / 2 - 4;
- if( dataAreaSize < data.data.length )
+ int dataAreaSize = (blockSize - BLOCK_OVERHEAD) / 2 - 4;
+ if (dataAreaSize < data.data.length)
{
putTooLarge( data, pos, usagePointer, usage );
- }
- else
+ } else
{
putOver( data, pos, usagePointer, usage );
}
@@ -190,18 +187,19 @@
}
/* In this case we need to write the new data to the opposite of the current active block. */
+
private void putOver( DataBlock data, long pos, long usagePointer, byte usage )
throws IOException
{
dataFile.seek( usagePointer ); // Point to "usage"
dataFile.skipBytes( 13 ); // Skip usage, instanceVersion and schemaVersion
EntityReference existingReference = readReference();
- if( !existingReference.equals( data.reference ) )
+ if (!existingReference.equals( data.reference ))
{
throw new EntityStoreException( "Inconsistent Data Heap: was " + existingReference + ", expected " + data.reference );
}
long mirror = dataFile.readLong();
- if( usage == USAGE_PRIME )
+ if (usage == USAGE_PRIME)
{
dataFile.seek( mirror );
}
@@ -217,6 +215,7 @@
/* This case is when the data doesn't fit in the pre-allocated extra space. Write it to the end, and mark the
previous block unused.
*/
+
private void putTooLarge( DataBlock data, long pos, long usagePointer, byte usage )
throws IOException
{
@@ -244,7 +243,7 @@
throws IOException
{
long pos = identityFile.find( reference );
- if( pos < 0 )
+ if (pos < 0)
{
// Doesn't exist.
return;
@@ -252,7 +251,7 @@
dataFile.seek( pos );
dataFile.skipBytes( 4 ); // Skip BlockSize
byte usage = dataFile.readByte();
- if( usage == USAGE_UNUSED )
+ if (usage == USAGE_UNUSED)
{
// Not used?? Why is the IdentityFile pointing to it then?? Should the following line actually be
// executed here.
@@ -293,7 +292,7 @@
long blockStart = dataFile.getFilePointer();
// Allow each datablock to grow to twice its size, and provide a primary and mirror allocation.
- int dataAreaSize = ( block.data.length * 2 + 4 ) * 2;
+ int dataAreaSize = (block.data.length * 2 + 4) * 2;
UndoExtendCommand undoExtendCommand = new UndoExtendCommand( blockStart );
undoManager.saveUndoCommand( undoExtendCommand );
@@ -319,8 +318,8 @@
private void writeIdentity( EntityReference reference )
throws IOException
{
- byte[] idBytes = reference.identity().getBytes("UTF-8");
- if( idBytes.length > identityMaxLength )
+ byte[] idBytes = reference.identity().getBytes( "UTF-8" );
+ if (idBytes.length > identityMaxLength)
{
throw new EntityStoreException( "Identity is too long. Only " + identityMaxLength + " characters are allowed in this EntityStore." );
}
@@ -368,18 +367,18 @@
identityFile = IdentityFile.create( new File( dataDir, "idx" ), identityMaxLength + 16, entries < 5000 ? 10000 : entries * 2 );
dataFile.seek( DATA_AREA_OFFSET );
- while( dataFile.getFilePointer() < dataFile.length() )
+ while (dataFile.getFilePointer() < dataFile.length())
{
long blockStart = dataFile.getFilePointer();
int blockSize = dataFile.readInt();
- if( blockSize == -1 )
+ if (blockSize == -1)
{
break;
}
byte usage = dataFile.readByte();
dataFile.skipBytes( 12 ); // Skip instanceVersion and schemaVersion
EntityReference reference = readReference();
- if( usage != USAGE_UNUSED )
+ if (usage != USAGE_UNUSED)
{
identityFile.remember( reference, blockStart );
}
@@ -387,69 +386,79 @@
}
}
- public <ThrowableType extends Throwable> void visitMap( MapEntityStore.MapEntityStoreVisitor<ThrowableType> visitor )
- throws ThrowableType
+ public Input<Reader, IOException> data()
{
- try
+ return new Input<Reader, IOException>()
{
- long position = DATA_AREA_OFFSET;
- while( position < dataFile.length() )
+ public <ReceiverThrowableType extends Throwable> void transferTo( Output<Reader, ReceiverThrowableType> output ) throws IOException, ReceiverThrowableType
{
- dataFile.seek( position );
- int blockSize = dataFile.readInt();
- if( blockSize == -1 ) // EOF marker
+ output.receiveFrom( new Sender<Reader, IOException>()
{
- return;
- }
- if( blockSize == 0 )
- {
- // TODO This is a bug. Why does it occur??
- throw new InternalError();
- }
- position = position + blockSize; // position for next round...
- DataBlock block = readDataBlock( null );
- if( block != null )
- {
- visitor.visitEntity( new StringReader( new String( block.data, "UTF-8" ) ) );
- }
+ public <ReceiverThrowableType extends Throwable> void sendTo( Receiver<Reader, ReceiverThrowableType> receiver ) throws ReceiverThrowableType, IOException
+ {
+ try
+ {
+ long position = DATA_AREA_OFFSET;
+ while (position < dataFile.length())
+ {
+ dataFile.seek( position );
+ int blockSize = dataFile.readInt();
+ if (blockSize == -1) // EOF marker
+ {
+ return;
+ }
+ if (blockSize == 0)
+ {
+ // TODO This is a bug. Why does it occur??
+ throw new InternalError();
+ }
+ position = position + blockSize; // position for next round...
+ DataBlock block = readDataBlock( null );
+ if (block != null)
+ {
+ receiver.receive( new StringReader( new String( block.data, "UTF-8" ) ) );
+ }
+ }
+ }
+ catch (IOException e)
+ {
+ throw new EntityStoreException( e );
+ }
+ }
+ });
}
- }
- catch( IOException e )
- {
- throw new EntityStoreException(e);
- }
+ };
}
private DataBlock readDataBlock( EntityReference reference )
throws IOException
{
byte usage = dataFile.readByte();
- if( usage == USAGE_UNUSED )
+ if (usage == USAGE_UNUSED)
{
return null;
}
long instanceVersion = dataFile.readLong();
int schemaVersion = dataFile.readInt();
EntityReference existingReference = readReference();
- if( reference == null )
+ if (reference == null)
{
reference = existingReference;
}
- if( !existingReference.equals( reference ) )
+ if (!existingReference.equals( reference ))
{
throw new EntityStoreException( "Inconsistent Data Heap." );
}
- if( usage == USAGE_MIRROR )
+ if (usage == USAGE_MIRROR)
{
long mirror = dataFile.readLong();
dataFile.seek( mirror );
- }
- else
+ } else
{
dataFile.skipBytes( 8 ); // skip the MirrorPointer
}
int dataSize = dataFile.readInt();
- if( dataSize < 0 )
+ if (dataSize < 0)
{
throw new InternalError();
}
@@ -462,7 +471,7 @@
throws IOException
{
int idSize = dataFile.readByte();
- if( idSize < 0 )
+ if (idSize < 0)
{
idSize = idSize + 256; // Fix 2's-complement negative values of bytes into unsigned 8 bit.
}
diff --git a/extensions/entitystore-swift/src/main/java/org/qi4j/entitystore/swift/RecordManager.java b/extensions/entitystore-swift/src/main/java/org/qi4j/entitystore/swift/RecordManager.java
index 3d6661c..1df027b 100644
--- a/extensions/entitystore-swift/src/main/java/org/qi4j/entitystore/swift/RecordManager.java
+++ b/extensions/entitystore-swift/src/main/java/org/qi4j/entitystore/swift/RecordManager.java
@@ -17,13 +17,15 @@
*/
package org.qi4j.entitystore.swift;
+import org.qi4j.api.entity.EntityReference;
+import org.qi4j.api.io.Input;
+import org.qi4j.spi.entitystore.EntityStoreException;
+
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
+import java.io.Reader;
import java.util.ArrayList;
-import org.qi4j.api.entity.EntityReference;
-import org.qi4j.entitystore.map.MapEntityStore;
-import org.qi4j.spi.entitystore.EntityStoreException;
public class RecordManager
implements UndoManager
@@ -188,9 +190,8 @@
}
}
- public <ThrowableType extends Throwable> void visitMap( MapEntityStore.MapEntityStoreVisitor<ThrowableType> visitor )
- throws ThrowableType
+ public Input<Reader, IOException> data()
{
- dataStore.visitMap( visitor );
+ return dataStore.data();
}
}
diff --git a/extensions/entitystore-swift/src/main/java/org/qi4j/entitystore/swift/SwiftEntityStoreMixin.java b/extensions/entitystore-swift/src/main/java/org/qi4j/entitystore/swift/SwiftEntityStoreMixin.java
index ccb1c33..6609e81 100644
--- a/extensions/entitystore-swift/src/main/java/org/qi4j/entitystore/swift/SwiftEntityStoreMixin.java
+++ b/extensions/entitystore-swift/src/main/java/org/qi4j/entitystore/swift/SwiftEntityStoreMixin.java
@@ -17,18 +17,11 @@
*/
package org.qi4j.entitystore.swift;
-import java.io.File;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.io.UnsupportedEncodingException;
-import java.io.Writer;
-import java.util.concurrent.locks.ReadWriteLock;
import org.qi4j.api.configuration.Configuration;
import org.qi4j.api.entity.EntityReference;
import org.qi4j.api.injection.scope.This;
import org.qi4j.api.injection.scope.Uses;
+import org.qi4j.api.io.Input;
import org.qi4j.api.service.Activatable;
import org.qi4j.entitystore.map.MapEntityStore;
import org.qi4j.spi.entity.EntityType;
@@ -36,6 +29,9 @@
import org.qi4j.spi.entitystore.EntityStoreException;
import org.qi4j.spi.service.ServiceDescriptor;
+import java.io.*;
+import java.util.concurrent.locks.ReadWriteLock;
+
public class SwiftEntityStoreMixin
implements Activatable, MapEntityStore
{
@@ -89,10 +85,9 @@
}
}
- public <ThrowableType extends Throwable> void visitMap( MapEntityStoreVisitor<ThrowableType> visitor )
- throws ThrowableType
+ public Input<Reader, IOException> entityStates()
{
- recordManager.visitMap( visitor );
+ return recordManager.data();
}
public void applyChanges( MapChanges changes )
diff --git a/extensions/osgi/bootstrap/pom.xml b/extensions/osgi/bootstrap/pom.xml
index 55b523c..af7e6c3 100644
--- a/extensions/osgi/bootstrap/pom.xml
+++ b/extensions/osgi/bootstrap/pom.xml
@@ -10,6 +10,7 @@
<groupId>org.qi4j.osgi</groupId>
<artifactId>qi4j-osgi-bootstrap</artifactId>
+ <version>1.3-SNAPSHOT</version>
<name>Qi4j Core - OSGi Bootstrap</name>
<packaging>bundle</packaging>
diff --git a/extensions/osgi/example/pom.xml b/extensions/osgi/example/pom.xml
index 93bb7f1..db57b9f 100644
--- a/extensions/osgi/example/pom.xml
+++ b/extensions/osgi/example/pom.xml
@@ -10,6 +10,7 @@
<groupId>org.qi4j.core.osgi</groupId>
<artifactId>qi4j-osgi-example</artifactId>
+ <version>1.3-SNAPSHOT</version>
<name>Qi4j Core - OSGi Example</name>
<packaging>bundle</packaging>
diff --git a/extensions/osgi/integrationTests/pom.xml b/extensions/osgi/integrationTests/pom.xml
index d573b74..fbdd2b5 100644
--- a/extensions/osgi/integrationTests/pom.xml
+++ b/extensions/osgi/integrationTests/pom.xml
@@ -10,6 +10,7 @@
<groupId>org.qi4j.core.osgi</groupId>
<artifactId>qi4j-osgi-integrationTests</artifactId>
+ <version>1.3-SNAPSHOT</version>
<name>Qi4j Core - OSGi integration test</name>
<build>
diff --git a/extensions/osgi/testBootstrap/pom.xml b/extensions/osgi/testBootstrap/pom.xml
index 4aeb87d..c6415fe 100644
--- a/extensions/osgi/testBootstrap/pom.xml
+++ b/extensions/osgi/testBootstrap/pom.xml
@@ -8,7 +8,10 @@
<version>1.3-SNAPSHOT</version>
</parent>
+ <groupId>org.qi4j.core.osgi</groupId>
<artifactId>qi4j-core-osgi-test-bootstrap</artifactId>
+ <version>1.3-SNAPSHOT</version>
+
<name>Qi4j Core - OSGi Bootstrap tests</name>
<dependencies>
diff --git a/extensions/pom.xml b/extensions/pom.xml
index 33e1c9c..3ad34bd 100644
--- a/extensions/pom.xml
+++ b/extensions/pom.xml
@@ -1,22 +1,23 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <groupId>org.qi4j.sandbox</groupId>
- <artifactId>qi4j-sandbox</artifactId>
- <version>1.3-SNAPSHOT</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <artifactId>sb-extensions-root</artifactId>
- <name>Qi4j Sandbox Extensions - Build POM</name>
- <packaging>pom</packaging>
-
- <modules>
- <!--module>entitystore-coherence</module-->
- <module>entitystore-jndi</module>
- <module>entitystore-javaspaces</module>
- <module>entitystore-jgroups</module>
- <module>entitystore-rmi</module>
- <module>entitystore-s3</module>
- <module>entitystore-swift</module>
- </modules>
-</project>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <groupId>org.qi4j.sandbox</groupId>
+ <artifactId>qi4j-sandbox</artifactId>
+ <version>1.3-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>sb-extensions-root</artifactId>
+ <version>1.3-SNAPSHOT</version>
+ <name>Qi4j Sandbox Extensions - Build POM</name>
+ <packaging>pom</packaging>
+
+ <modules>
+ <!--module>entitystore-coherence</module-->
+ <module>entitystore-jndi</module>
+ <module>entitystore-javaspaces</module>
+ <module>entitystore-jgroups</module>
+ <module>entitystore-rmi</module>
+ <module>entitystore-s3</module>
+ <module>entitystore-swift</module>
+ </modules>
+</project>
diff --git a/libraries/entityproxy/pom.xml b/libraries/entityproxy/pom.xml
index e91761a..7dcfb78 100644
--- a/libraries/entityproxy/pom.xml
+++ b/libraries/entityproxy/pom.xml
@@ -1,51 +1,51 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <artifactId>sb-libraries-root</artifactId>
- <groupId>org.qi4j.sandbox</groupId>
- <version>1.3-SNAPSHOT</version>
- </parent>
- <groupId>org.qi4j.sandbox</groupId>
- <artifactId>qi4j-lib-entityproxy</artifactId>
- <name>Qi4j Library - Entityproxy</name>
- <description>This library provides easy way to wrap your entities with transient composites so that qi4j-agnostic code may handle them without worrying about unit of work.</description>
- <dependencies>
- <dependency>
- <groupId>org.qi4j.core</groupId>
- <artifactId>qi4j-core-api</artifactId>
- <version>${version.qi4j-core}</version>
- </dependency>
- <dependency>
- <groupId>org.qi4j.library</groupId>
- <artifactId>qi4j-lib-constraints</artifactId>
- <version>${version.qi4j-core}</version>
- </dependency>
- <dependency>
- <groupId>org.qi4j.core</groupId>
- <artifactId>qi4j-core-testsupport</artifactId>
- <version>${version.qi4j-core}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.qi4j.core</groupId>
- <artifactId>qi4j-core-runtime</artifactId>
- <version>${version.qi4j-core}</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
- <properties>
- <version.qi4j-core>1.3-SNAPSHOT</version.qi4j-core>
- </properties>
-
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.6</source>
- <target>1.6</target>
- </configuration>
- </plugin>
- </plugins>
- </build>
-</project>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>sb-libraries-root</artifactId>
+ <groupId>org.qi4j.sandbox</groupId>
+ <version>1.3-SNAPSHOT</version>
+ </parent>
+ <groupId>org.qi4j.sandbox</groupId>
+ <artifactId>qi4j-lib-entityproxy</artifactId>
+ <name>Qi4j Library - Entityproxy</name>
+ <description>This library provides easy way to wrap your entities with transient composites so that qi4j-agnostic code may handle them without worrying about unit of work.</description>
+ <dependencies>
+ <dependency>
+ <groupId>org.qi4j.core</groupId>
+ <artifactId>qi4j-core-api</artifactId>
+ <version>${version.qi4j-core}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.qi4j.library</groupId>
+ <artifactId>qi4j-lib-constraints</artifactId>
+ <version>${version.qi4j-core}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.qi4j.core</groupId>
+ <artifactId>qi4j-core-testsupport</artifactId>
+ <version>${version.qi4j-core}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.qi4j.core</groupId>
+ <artifactId>qi4j-core-runtime</artifactId>
+ <version>${version.qi4j-core}</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <properties>
+ <version.qi4j-core>1.3-SNAPSHOT</version.qi4j-core>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.6</source>
+ <target>1.6</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>