2012-03-29 8 views
0

Ich versuche, Voldemort Store zu verwenden, um Daten in hazelcast zu persistieren. Ich habe die MapStore-Schnittstelle implementiert. Wenn ich versuche, einen Map-Eintrag in hazelcast hinzuzufügen, bekomme ich diese Ausnahme.Hazelcast Classpath Fehler

29 Mar, 2012 12:19:28 PM com.hazelcast.cluster.ClusterService 
SEVERE: /192.168.100.120:5701 [dev] error processing messages [email protected] 
java.lang.NoClassDefFoundError: voldemort/client/StoreClientFactory 
    at java.lang.Class.getDeclaredConstructors0(Native Method) 
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2406) 
    at java.lang.Class.getConstructor0(Class.java:2716) 
    at java.lang.Class.newInstance0(Class.java:343) 
    at java.lang.Class.newInstance(Class.java:325) 
    at com.hazelcast.impl.CMap.<init>(CMap.java:203) 
    at com.hazelcast.impl.ConcurrentMapManager.getOrCreateMap(ConcurrentMapManager.java:2160) 
    at com.hazelcast.impl.FactoryImpl.createProxy(FactoryImpl.java:735) 
    at com.hazelcast.impl.FactoryImpl$7.process(FactoryImpl.java:809) 
    at com.hazelcast.cluster.ClusterService$1.process(ClusterService.java:126) 
    at com.hazelcast.cluster.ClusterService.processProcessable(ClusterService.java:190) 
    at com.hazelcast.cluster.ClusterService.dequeueProcessables(ClusterService.java:256) 
    at com.hazelcast.cluster.ClusterService.run(ClusterService.java:201) 
    at java.lang.Thread.run(Thread.java:679) 
Caused by: java.lang.ClassNotFoundException: voldemort.client.StoreClientFactory 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
    ... 14 more 

Dies ist das Hazelcast run.sh Skript i, um bearbeitet haben voldemort Gläser in den Classpath aufzunehmen.

#!/bin/sh 
java -Djava.net.preferIPv4Stack=true -cp  ./:/home/gerrard/workspace/hazelcast/bin/:/home/gerrard/work/voldemort- 0.90.1/lib/:/home/gerrard/work/voldemort-0.90.1/dist/:/home/gerrard/work/voldemort- 0.90.1/bin/:../lib/hazelcast-2.0.1.jar com.hazelcast.examples.TestApp 

Ich habe auch meine Implementierungsklasse in der hazelcast.xml-Datei hinzugefügt.

Ich habe auch einen Klassenpfad Eintrag in der Manifest-Datei von hazelcast-2.0.1.jar hinzugefügt.

Selbst dann, wenn ich versuche, einen Eintrag hinzuzufügen, gibt es diesen noclassdef Fehler gefunden. Die Klasse, die es zu finden versucht, befindet sich definitiv im Voldemort-Ordner, den ich dem Klassenpfad hinzugefügt habe. Ich habe immer noch keine Ahnung, was das Problem ist. Kann jemand alternative Lösungen vorschlagen? Danke.

Antwort

1

Sie können Hazelcast Config ausprobieren und das Factory-Objekt selbst einstellen.

// Build the config from xml file you have in the classpath 
Config config = new XmlConfigBuilder().build(); 
MapStoreConfig msc = new MapStoreConfig.. 
msc.setFactoryImplementation(new StoreClientFactory()); 
MapConfig mapConfig = new MapConfig.. 
mapConfig.setMapStoreConfig(msc); 
config.addMapConfig(mapconfig); 

// init Hazelcast with this configuration 
// make sure you call init fore any other Hazelcast operation!! 
Hazelcast.init(config); 

// then access to your map 
Map map = Hazelcast.getMap("mymap");