Assalamu'alaikum teman-teman.. Beberapa waktu yang lalu ada seseorang yang mengirim email kepada saya, dan meminta bantuan dalam replication pada db4o. Setelah saya baca kasusnya, dan saya perbaiki, lalu saya kirimkan kembali kepada si penanya, ternyata dia kirim email balik lagi dan menanyakan tentang bi directional replication pada db4o. Jadi tidak hanya me-replicate data dari db4o ke SQL, tapi ini dari SQL ke db4o juga. Selama ini Replication DB4o memakai hibernate xml, setahu saya. Memang agak lambat, perkembangan db4o. JEE sudah sampai versi 6, Hibernate sudah beberapa tahun lalu memakai JPA, db4o masih memakai Hibernate xml. Mungkin ada yang bisa bantu? Jadi setahu saya, bi-directional Replication db4o itu adalah untuk db4o ke db4o. Bukan db4o ke Hibernate. Di Manualnya saya baca jadi contohnya itu misalkan ada mobile app yang memakai db4o, dan ada desktop app yang memakai db4o. Kedua aplikasi tersebut akan diintegrasikan sehingga jika ada data masuk dari sisi mobile app, desktop app juga akan menerima data tersebut. Sebaliknya, jika ada data masuk pada desktop application, maka di mobile application juga akan menerima data tersebut. Setelah saya utak atik ide bi-directional replication dari db4o ke Hibernate, maka kodenya menjadi seperti ini: package tohasoft.main;
import com.db4o.Db4o; import com.db4o.ObjectContainer; import com.db4o.ObjectSet; import com.db4o.drs.ReplicationSession; import com.db4o.drs.hibernate.HibernateReplication; import com.db4o.drs.hibernate.ReplicationConfigurator; import com.db4o.ext.ExtDb4o; import java.io.File; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import tohasoft.model.Address; import tohasoft.model.Customer; public class BidirectionalRepplication { public static void main(String[] args) { new File("OneToOneExample.db4o").delete(); System.out.println("Running OneToOneExample example."); ExtDb4o.configure().generateUUIDs(Integer.MAX_VALUE); ExtDb4o.configure().generateVersionNumbers(Integer.MAX_VALUE); ObjectContainer objectContainer = Db4o.openFile("OneToOneExample.db4o"); Address address=new Address(); address.setCity("Solo"); address.setCountry("Indonesia"); address.setStreet1("Rebab"); address.setStreet2("Rebana"); address.setZip("57157"); Customer customer=new Customer(); customer.setAddress(address); objectContainer.set(customer); objectContainer.commit(); Configuration config = new Configuration().configure("hibernate.cfg.xml"); SessionFactory sessionFactory = config.buildSessionFactory(); Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); Address addressHibernate = new Address(null, "Menjangan", "Singa", "Jogja", "27155", "ind"); Customer customerHibernate= new Customer(null, "Title", "XXX", "XXX" + "", addressHibernate, "a...@a.com", "0202020", "020202019019", 1, "909090"); session.save(customerHibernate); session.getTransaction().commit(); ReplicationSession replication = HibernateReplication.begin(objectContainer, config); ObjectSet changed = replication.providerA().objectsChangedSinceLastReplication(); while (changed.hasNext()) replication.replicate(changed.next()); //Di sinilah kode yang tidak berjalan.. Repplication dari hibernate ke db4o tidak mau berjalan changed = replication.providerB().objectsChangedSinceLastReplication(); while (changed.hasNext()) replication.replicate(changed.next()); replication.commit(); replication.close(); objectContainer.close(); } } Data dari Replication db4o entity "customer" sudah bisa masuk di db4o dan di SQL. Akan tetapi, data dari SQL Entity "customerHibernate" hanya masuk di sisihtt SQL saja, ternyata. Di db4o, tidak masuk.Mungkin ada yang bisa bantu?