package com.namazustudios.test.server; import javax.jdo.JDOHelper; import javax.jdo.PersistenceManagerFactory; import org.compass.core.Compass; import org.compass.core.config.CompassConfiguration; import org.compass.core.config.CompassEnvironment; import org.compass.core.converter.ConversionException; import org.compass.core.converter.basic.AbstractBasicConverter; import org.compass.core.mapping.ResourcePropertyMapping; import org.compass.core.marshall.MarshallingContext; import org.compass.gps.CompassGps; import org.compass.gps.device.jdo.Jdo2GpsDevice; import org.compass.gps.impl.SingleCompassGps; import com.google.appengine.api.datastore.Key; import com.google.appengine.api.datastore.KeyFactory; public final class PMF { private static final Compass compass; private static final CompassGps compassGps; private static final PersistenceManagerFactory pmfInstance = JDOHelper .getPersistenceManagerFactory("transactions-optional"); static { compass = new CompassConfiguration() .setConnection("gae://index") .setSetting(CompassEnvironment.ExecutorManager.EXECUTOR_MANAGER_TYPE,"disabled") .registerConverter("keyConverter", Key.class, new KeyConverter()) .addClass(TestDataObject.class) .buildCompass(); compassGps = new SingleCompassGps(compass); compassGps.addGpsDevice(new Jdo2GpsDevice("appengine-datastore",pmfInstance)); compassGps.start(); compassGps.index(); } public static PersistenceManagerFactory get() { return pmfInstance; } public static Compass getCompass() { return compass; } private PMF() {} private static class KeyConverter extends AbstractBasicConverter { @Override protected String doToString(Key key, ResourcePropertyMapping mapping, MarshallingContext context) { return KeyFactory.keyToString(key); } @Override protected Key doFromString(String string, ResourcePropertyMapping mapping, MarshallingContext context) throws ConversionException { return KeyFactory.stringToKey(string); } } }