001/** 002 * GRANITE DATA SERVICES 003 * Copyright (C) 2006-2013 GRANITE DATA SERVICES S.A.S. 004 * 005 * This file is part of the Granite Data Services Platform. 006 * 007 * Granite Data Services is free software; you can redistribute it and/or 008 * modify it under the terms of the GNU Lesser General Public 009 * License as published by the Free Software Foundation; either 010 * version 2.1 of the License, or (at your option) any later version. 011 * 012 * Granite Data Services is distributed in the hope that it will be useful, 013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser 015 * General Public License for more details. 016 * 017 * You should have received a copy of the GNU Lesser General Public 018 * License along with this library; if not, write to the Free Software 019 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 020 * USA, or see <http://www.gnu.org/licenses/>. 021 */ 022package org.granite.tide.data; 023 024import javax.jdo.PersistenceManager; 025import javax.jdo.PersistenceManagerFactory; 026import javax.jdo.Transaction; 027 028import org.granite.tide.TideTransactionManager; 029 030/** 031 * Responsible for attaching a entity with the entity mangager 032 * @author William DRAI 033 * 034 */ 035public class JDOPersistenceManager extends AbstractTidePersistenceManager implements TideTransactionPersistenceManager { 036 037 protected PersistenceManager pm; 038 039 040 public JDOPersistenceManager() { 041 super(new JDOTransactionManager()); 042 } 043 044 public JDOPersistenceManager(PersistenceManagerFactory pmf) { 045 this(pmf, null); 046 } 047 048 public JDOPersistenceManager(PersistenceManagerFactory pmf, TideTransactionManager tm) { 049 super(tm != null ? tm : new JDOTransactionManager()); 050 pm = pmf.getPersistenceManager(); 051 } 052 053 public Object getCurrentTransaction() { 054 Transaction t = pm.currentTransaction(); 055 t.begin(); 056 return t; 057 } 058 059 @Override 060 public void close() { 061 if (pm != null && !pm.isClosed()) 062 pm.close(); 063 } 064 065 066 /** 067 * Finds the entity with the JDO persistence manager. 068 * @return the entity 069 */ 070 @Override 071 public Object fetchEntity(Object entity, String[] fetch) { 072 Object id = pm.getObjectId(entity); 073 if (id == null) 074 return null; 075 076 return pm.getObjectById(id); 077 } 078 079 080 public static class JDOTransactionManager implements TideTransactionManager { 081 082 public Object begin(TideTransactionPersistenceManager pm) { 083 if (pm != null) 084 return pm.getCurrentTransaction(); 085 return null; 086 } 087 088 public void commit(Object t) throws Exception { 089 ((Transaction)t).commit(); 090 } 091 092 public void rollback(Object t) { 093 ((Transaction)t).rollback(); 094 } 095 } 096}