Thanks AG.
I did what you suggest and now my code runs okey, but when I start a second
node on the same machine the first started node throws
java.io.NotSerializableException:
org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter$ThreadLocalSession
My new xml configuration and code is:
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="local_simulation"/>
<property name="cacheMode" value="LOCAL"/>
<property name="atomicityMode" value="ATOMIC"/>
<property name="copyOnRead" value="true"/>
<property name="cacheStoreSessionListenerFactories">
<bean
class="org.apache.ignite.configuration.IgniteReflectionFactory">
<property name="componentClass"
value="uniagro.simugant.db.grid.mongodb.SimulationCacheMongoStoreSessionListener"/>
</bean>
</property>
<property name="cacheStoreFactory">
<bean
class="javax.cache.configuration.FactoryBuilder$SingletonFactory">
<constructor-arg>
<bean
class="uniagro.simugant.db.grid.mongodb.SimulationCacheMongoStore">
</bean>
</constructor-arg>
</bean>
</property>
<property name="writeThrough" value="true"/>
<property name="writeBehindEnabled" value="true"/>
</bean>
public class SimulationCacheMongoStoreSessionListener implements
LifecycleAware, CacheStoreSessionListener {
public SimulationCacheMongoStoreSessionListener() {
}
private MongoClient mongoClient;
@Override
public void start() throws IgniteException {
mongoClient = new MongoClient();
}
@Override
public void stop() throws IgniteException {
if (mongoClient != null) {
mongoClient.close();
}
}
@Override
public void onSessionStart(CacheStoreSession ses) {
if (ses.attachment() == null) {
ses.attach(mongoClient);
}
}
@Override
public void onSessionEnd(CacheStoreSession ses, boolean commit) {
ses.attach(null);
}
public class SimulationCacheMongoStore extends CacheStoreAdapter<Long,
SimulationCache> implements Serializable{
/**
* Logger.
*/
@LoggerResource
private IgniteLogger log;
@CacheStoreSessionResource
private CacheStoreSession ses;
public SimulationCacheMongoStore() {
}
@Override
public SimulationCache load(Long k) throws CacheLoaderException {
//NO-OP
}
@Override
public void write(Cache.Entry<? extends Long, ? extends SimulationCache>
entry) throws CacheWriterException {
MongoClient mongoClient = ses.attachment();
Datastore morphia = new Morphia().createDatastore(mongoClient,
"test");
morphia.save(entry.getValue());
if (log.isDebugEnabled()) {
log.debug("Stored Simulation: " + entry.getValue());
}
}
@Override
public void delete(Object o) throws CacheWriterException {
NO-OP
}
As I said, my code is running okey, but I don't know what are the back
effects that exception could have.
I leave here the complete exception:
at
org.apache.ignite.marshaller.jdk.JdkMarshaller.marshal0(JdkMarshaller.java:84)
at
org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller.marshal(AbstractNodeNameAwareMarshaller.java:70)
at
org.apache.ignite.marshaller.jdk.JdkMarshaller.marshal0(JdkMarshaller.java:98)
at
org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller.marshal(AbstractNodeNameAwareMarshaller.java:58)
at
org.apache.ignite.internal.util.IgniteUtils.marshal(IgniteUtils.java:9861)
at
org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi.collectExchangeData(TcpDiscoverySpi.java:1685)
at
org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.processNodeAddedMessage(ServerImpl.java:4092)
at
org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.processJoinRequestMessage(ServerImpl.java:3740)
at
org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.processMessage(ServerImpl.java:2532)
at
org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.processMessage(ServerImpl.java:2362)
at
org.apache.ignite.spi.discovery.tcp.ServerImpl$MessageWorkerAdapter.body(ServerImpl.java:6436)
at
org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.body(ServerImpl.java:2445)
at org.apache.ignite.spi.IgniteSpiThread.run(IgniteSpiThread.java:62)
Caused by: java.io.NotSerializableException:
org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter$ThreadLocalSession
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at java.util.ArrayList.writeObject(ArrayList.java:762)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at
java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988)
at
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496)
at
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at
org.apache.ignite.marshaller.jdk.JdkMarshaller.marshal0(JdkMarshaller.java:79)
... 12 more
Regards,
Mauricio
--
View this message in context:
http://apache-ignite-users.70518.x6.nabble.com/How-to-configure-MongoDB-Client-I-m-getting-NotSerializableException-tp10767p10875.html
Sent from the Apache Ignite Users mailing list archive at Nabble.com.