You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
506 lines
12 KiB
506 lines
12 KiB
package kr.co.kihyun.beans.entity.util; |
|
|
|
import java.lang.reflect.Method; |
|
import java.util.Collection; |
|
import java.util.Date; |
|
import java.util.EnumSet; |
|
import java.util.Iterator; |
|
import java.util.List; |
|
import java.util.Set; |
|
|
|
import javax.jdo.Extent; |
|
import javax.jdo.FetchGroup; |
|
import javax.jdo.FetchPlan; |
|
import javax.jdo.JDOException; |
|
import javax.jdo.JDOObjectNotFoundException; |
|
import javax.jdo.JDOUserException; |
|
import javax.jdo.ObjectState; |
|
import javax.jdo.PersistenceManager; |
|
import javax.jdo.PersistenceManagerFactory; |
|
import javax.jdo.Query; |
|
import javax.jdo.Transaction; |
|
import javax.jdo.annotations.IdentityType; |
|
import javax.jdo.annotations.PersistenceCapable; |
|
import javax.jdo.datastore.JDOConnection; |
|
import javax.jdo.datastore.Sequence; |
|
import javax.jdo.listener.InstanceLifecycleListener; |
|
import kr.co.kihyun.beans.entity.MDept; |
|
import kr.co.kihyun.beans.entity.MoumiEntity; |
|
import kr.co.kihyun.beans.entity.ecross.CRUD; |
|
import kr.co.kihyun.beans.entity.ecross.IRemotePersistable; |
|
import kr.co.kihyun.moumi.MoumiConfig; |
|
|
|
import org.slf4j.Logger; |
|
import org.slf4j.LoggerFactory; |
|
|
|
public class MPersistenceManager implements PersistenceManager { |
|
|
|
private static final Logger LOG = LoggerFactory.getLogger(MPersistenceManager.class); |
|
private PersistenceManager pm; |
|
|
|
public MPersistenceManager(PersistenceManager pm) { |
|
this.pm = pm; |
|
} |
|
|
|
public boolean isClosed() { |
|
return pm.isClosed(); |
|
} |
|
|
|
public void close() { |
|
pm.close(); |
|
} |
|
|
|
public Transaction currentTransaction() { |
|
return pm.currentTransaction(); |
|
} |
|
|
|
public void evict(Object pc) { |
|
pm.evict(pc); |
|
} |
|
|
|
public void evictAll(Object... pcs) { |
|
pm.evictAll(pcs); |
|
} |
|
|
|
public void evictAll(Collection pcs) { |
|
pm.evictAll(pcs); |
|
} |
|
|
|
public void evictAll(boolean subclasses, Class pcClass) { |
|
pm.evictAll(subclasses, pcClass); |
|
} |
|
|
|
public void evictAll() { |
|
pm.evictAll(); |
|
} |
|
|
|
public void refresh(Object pc) { |
|
pm.refresh(pc); |
|
} |
|
|
|
public void refreshAll(Object... pcs) { |
|
pm.refreshAll(pcs); |
|
} |
|
|
|
public void refreshAll(Collection pcs) { |
|
pm.refreshAll(pcs); |
|
} |
|
|
|
public void refreshAll() { |
|
pm.refreshAll(); |
|
} |
|
|
|
public void refreshAll(JDOException jdoe) { |
|
pm.refreshAll(jdoe); |
|
} |
|
|
|
public Query newQuery() { |
|
return pm.newQuery(); |
|
} |
|
|
|
public Query newQuery(Object compiled) { |
|
return pm.newQuery(compiled); |
|
} |
|
|
|
public Query newQuery(String query) { |
|
return pm.newQuery(query); |
|
} |
|
|
|
public Query newQuery(String language, Object query) { |
|
return pm.newQuery(language, query); |
|
} |
|
|
|
public Query newQuery(Class cls) { |
|
return pm.newQuery(cls); |
|
} |
|
|
|
public Query newQuery(Extent cln) { |
|
return pm.newQuery(cln); |
|
} |
|
|
|
public Query newQuery(Class cls, Collection cln) { |
|
return pm.newQuery(cls, cln); |
|
} |
|
|
|
public Query newQuery(Class cls, String filter) { |
|
return pm.newQuery(cls, filter); |
|
} |
|
|
|
public Query newQuery(Class cls, Collection cln, String filter) { |
|
return pm.newQuery(cls, cln, filter); |
|
} |
|
|
|
public Query newQuery(Extent cln, String filter) { |
|
return pm.newQuery(cln, filter); |
|
} |
|
|
|
public Query newNamedQuery(Class cls, String queryName) { |
|
return pm.newNamedQuery(cls, queryName); |
|
} |
|
|
|
public <T> Extent<T> getExtent(Class<T> persistenceCapableClass, boolean subclasses) { |
|
return pm.getExtent(persistenceCapableClass, subclasses); |
|
} |
|
|
|
public <T> Extent<T> getExtent(Class<T> persistenceCapableClass) { |
|
return pm.getExtent(persistenceCapableClass); |
|
} |
|
|
|
public Object getObjectById(Object oid, boolean validate) { |
|
return pm.getObjectById(oid, validate); |
|
} |
|
|
|
public <T> T getObjectById(Class<T> cls, Object key) { |
|
PersistenceCapable pc = cls.getAnnotation(PersistenceCapable.class); |
|
//LOG.debug("{}@{}.identityType: {}", new Object[]{cls, key, pc.identityType()}); |
|
if (pc.identityType() == IdentityType.NONDURABLE) { |
|
try { |
|
Method m = cls.getMethod("getId"); |
|
String typeName = m.getReturnType().getCanonicalName(); |
|
//LOG.debug("cls/key : {}@({}){}", new Object[]{cls, typeName, key}); |
|
|
|
QueryImpl q = new QueryImpl(pm, cls); |
|
q.setFilter("id == key"); |
|
q.declareParameters(typeName + " key"); |
|
//v2. 6.SQL 삽입 : DO형식이므로 해결책에 따른 prepare SQL 문으로 변경할 수 없음 |
|
Iterator<T> objIter = ((List<T>) q.execute(key)).iterator(); |
|
//================ |
|
if (objIter.hasNext()) { |
|
return objIter.next(); |
|
} |
|
throw new JDOObjectNotFoundException("Class: " + cls, " key: " + key); |
|
} catch (SecurityException e) { |
|
throw new RuntimeException(e); |
|
} catch (NoSuchMethodException e) { |
|
throw new JDOUserException(cls + " doesn't have identity."); |
|
} |
|
} |
|
return pm.getObjectById(cls, key); |
|
} |
|
|
|
public Object getObjectById(Object oid) { |
|
return pm.getObjectById(oid); |
|
} |
|
|
|
public Object getObjectId(Object pc) { |
|
return pm.getObjectId(pc); |
|
} |
|
|
|
public Object getTransactionalObjectId(Object pc) { |
|
return pm.getTransactionalObjectId(pc); |
|
} |
|
|
|
public Object newObjectIdInstance(Class pcClass, Object key) { |
|
return pm.newObjectIdInstance(pcClass, key); |
|
} |
|
|
|
public Collection getObjectsById(Collection oids, boolean validate) { |
|
return pm.getObjectsById(oids, validate); |
|
} |
|
|
|
public Collection getObjectsById(Collection oids) { |
|
return pm.getObjectsById(oids); |
|
} |
|
|
|
public Object[] getObjectsById(Object[] oids, boolean validate) { |
|
return pm.getObjectsById(oids, validate); |
|
} |
|
|
|
public Object[] getObjectsById(boolean validate, Object... oids) { |
|
return pm.getObjectsById(validate, oids); |
|
} |
|
|
|
public Object[] getObjectsById(Object... oids) { |
|
return pm.getObjectsById(oids); |
|
} |
|
|
|
public <T> T makePersistent(T pc) { |
|
try { |
|
return pm.makePersistent(pc); |
|
} catch (Exception e) { |
|
|
|
//42.비어있는 if문 : Delete by YOUNGJUN,CHO |
|
/* |
|
if (pc instanceof kr.co.kihyun.beans.entity.Board) { |
|
//LOG.debug("attachements: {}", ((kr.co.kihyun.beans.entity.Board) pc).getAttachments()); |
|
} |
|
*/ |
|
//------------------------------------------------ |
|
throw new RuntimeException(e); |
|
} |
|
} |
|
|
|
public <T> boolean isRemoteObject(T pc) { |
|
if (pc instanceof IRemotePersistable) { |
|
IRemotePersistable rp = (IRemotePersistable) pc; |
|
|
|
MDept currentParty = this.getObjectById(MDept.class, MoumiConfig.getInitParameter("moumi.partyDeptId")); |
|
MDept ownerParty = rp.getOwnerParty(this); |
|
//LOG.debug("currentParty: {}, ownerParty: {}", currentParty, rp.getOwnerParty(this)); |
|
|
|
if (!ownerParty.getId().equals(currentParty.getId())) { |
|
return true; |
|
} |
|
} |
|
return false; |
|
} |
|
|
|
public <T> CRUD getCrud(T pc) { |
|
CRUD crud = CRUD.U; |
|
MoumiEntity me = (MoumiEntity) pc; |
|
if (me.getId() == null) { |
|
crud = CRUD.C; |
|
} else { |
|
try { |
|
pm.getObjectById(pc.getClass(), me.getId()); |
|
} catch (JDOObjectNotFoundException jonfe) { |
|
crud = CRUD.C; |
|
} |
|
} |
|
return crud; |
|
} |
|
|
|
public <T> T[] makePersistentAll(T... pcs) { |
|
return pm.makePersistentAll(pcs); |
|
} |
|
|
|
public <T> Collection<T> makePersistentAll(Collection<T> pcs) { |
|
return pm.makePersistentAll(pcs); |
|
} |
|
|
|
public void deletePersistent(Object pc) { |
|
pm.deletePersistent(pc); |
|
} |
|
|
|
public void deletePersistentAll(Object... pcs) { |
|
pm.deletePersistentAll(pcs); |
|
} |
|
|
|
public void deletePersistentAll(Collection pcs) { |
|
pm.deletePersistentAll(pcs); |
|
} |
|
|
|
public void makeTransient(Object pc) { |
|
pm.makeTransient(pc); |
|
} |
|
|
|
public void makeTransientAll(Object... pcs) { |
|
pm.makeTransactionalAll(pcs); |
|
} |
|
|
|
public void makeTransientAll(Collection pcs) { |
|
pm.makeNontransactionalAll(pcs); |
|
} |
|
|
|
public void makeTransient(Object pc, boolean useFetchPlan) { |
|
pm.makeTransient(pc, useFetchPlan); |
|
} |
|
|
|
public void makeTransientAll(Object[] pcs, boolean useFetchPlan) { |
|
pm.makeTransientAll(pcs, useFetchPlan); |
|
} |
|
|
|
public void makeTransientAll(boolean useFetchPlan, Object... pcs) { |
|
pm.makeTransientAll(useFetchPlan, pcs); |
|
} |
|
|
|
public void makeTransientAll(Collection pcs, boolean useFetchPlan) { |
|
pm.makeTransientAll(pcs, useFetchPlan); |
|
} |
|
|
|
public void makeTransactional(Object pc) { |
|
pm.makeNontransactional(pc); |
|
} |
|
|
|
public void makeTransactionalAll(Object... pcs) { |
|
pm.makeNontransactionalAll(pcs); |
|
} |
|
|
|
public void makeTransactionalAll(Collection pcs) { |
|
pm.makeNontransactionalAll(pcs); |
|
} |
|
|
|
public void makeNontransactional(Object pc) { |
|
pm.makeNontransactional(pc); |
|
} |
|
|
|
public void makeNontransactionalAll(Object... pcs) { |
|
pm.makeNontransactionalAll(pcs); |
|
} |
|
|
|
public void makeNontransactionalAll(Collection pcs) { |
|
pm.makeNontransactionalAll(pcs); |
|
} |
|
|
|
public void retrieve(Object pc) { |
|
pm.refresh(pc); |
|
} |
|
|
|
public void retrieve(Object pc, boolean useFetchPlan) { |
|
pm.retrieve(pc, useFetchPlan); |
|
} |
|
|
|
public void retrieveAll(Collection pcs) { |
|
pm.retrieveAll(pcs); |
|
} |
|
|
|
public void retrieveAll(Collection pcs, boolean useFetchPlan) { |
|
pm.retrieveAll(pcs, useFetchPlan); |
|
} |
|
|
|
public void retrieveAll(Object... pcs) { |
|
pm.retrieveAll(pcs); |
|
} |
|
|
|
public void retrieveAll(Object[] pcs, boolean useFetchPlan) { |
|
pm.retrieveAll(pcs, useFetchPlan); |
|
} |
|
|
|
public void retrieveAll(boolean useFetchPlan, Object... pcs) { |
|
pm.retrieveAll(useFetchPlan, pcs); |
|
} |
|
|
|
public void setUserObject(Object o) { |
|
pm.setUserObject(o); |
|
} |
|
|
|
public Object getUserObject() { |
|
return pm.getUserObject(); |
|
} |
|
|
|
public PersistenceManagerFactory getPersistenceManagerFactory() { |
|
return pm.getPersistenceManagerFactory(); |
|
} |
|
|
|
public Class getObjectIdClass(Class cls) { |
|
return pm.getObjectIdClass(cls); |
|
} |
|
|
|
public void setMultithreaded(boolean flag) { |
|
pm.setMultithreaded(flag); |
|
} |
|
|
|
public boolean getMultithreaded() { |
|
return pm.getMultithreaded(); |
|
} |
|
|
|
public void setIgnoreCache(boolean flag) { |
|
pm.setIgnoreCache(flag); |
|
} |
|
|
|
public boolean getIgnoreCache() { |
|
return pm.getIgnoreCache(); |
|
} |
|
|
|
public void setDatastoreReadTimeoutMillis(Integer interval) { |
|
pm.setDatastoreReadTimeoutMillis(interval); |
|
} |
|
|
|
public Integer getDatastoreReadTimeoutMillis() { |
|
return pm.getDatastoreReadTimeoutMillis(); |
|
} |
|
|
|
public void setDatastoreWriteTimeoutMillis(Integer interval) { |
|
pm.setDatastoreWriteTimeoutMillis(interval); |
|
} |
|
|
|
public Integer getDatastoreWriteTimeoutMillis() { |
|
return pm.getDatastoreWriteTimeoutMillis(); |
|
} |
|
|
|
public boolean getDetachAllOnCommit() { |
|
return pm.getDetachAllOnCommit(); |
|
} |
|
|
|
public void setDetachAllOnCommit(boolean flag) { |
|
pm.setDetachAllOnCommit(flag); |
|
} |
|
|
|
public boolean getCopyOnAttach() { |
|
return pm.getCopyOnAttach(); |
|
} |
|
|
|
public void setCopyOnAttach(boolean flag) { |
|
pm.setCopyOnAttach(flag); |
|
} |
|
|
|
public <T> T detachCopy(T pc) { |
|
return pm.detachCopy(pc); |
|
} |
|
|
|
public <T> Collection<T> detachCopyAll(Collection<T> pcs) { |
|
return pm.detachCopyAll(pcs); |
|
} |
|
|
|
public <T> T[] detachCopyAll(T... pcs) { |
|
return pm.detachCopyAll(pcs); |
|
} |
|
|
|
public Object putUserObject(Object key, Object val) { |
|
return pm.putUserObject(key, val); |
|
} |
|
|
|
public Object getUserObject(Object key) { |
|
return pm.getUserObject(key); |
|
} |
|
|
|
public Object removeUserObject(Object key) { |
|
return pm.removeUserObject(key); |
|
} |
|
|
|
public void flush() { |
|
pm.flush(); |
|
} |
|
|
|
public void checkConsistency() { |
|
pm.checkConsistency(); |
|
} |
|
|
|
public FetchPlan getFetchPlan() { |
|
return pm.getFetchPlan(); |
|
} |
|
|
|
public <T> T newInstance(Class<T> pcClass) { |
|
return pm.newInstance(pcClass); |
|
} |
|
|
|
public Sequence getSequence(String name) { |
|
return pm.getSequence(name); |
|
} |
|
|
|
public JDOConnection getDataStoreConnection() { |
|
return pm.getDataStoreConnection(); |
|
} |
|
|
|
public void addInstanceLifecycleListener(InstanceLifecycleListener listener, Class... classes) { |
|
pm.addInstanceLifecycleListener(listener, classes); |
|
} |
|
|
|
public void removeInstanceLifecycleListener(InstanceLifecycleListener listener) { |
|
pm.removeInstanceLifecycleListener(listener); |
|
} |
|
|
|
public Date getServerDate() { |
|
return pm.getServerDate(); |
|
} |
|
|
|
public Set getManagedObjects() { |
|
return pm.getManagedObjects(); |
|
} |
|
|
|
public Set getManagedObjects(EnumSet<ObjectState> states) { |
|
return pm.getManagedObjects(states); |
|
} |
|
|
|
public Set getManagedObjects(Class... classes) { |
|
return pm.getManagedObjects(classes); |
|
} |
|
|
|
public Set getManagedObjects(EnumSet<ObjectState> states, Class... classes) { |
|
return pm.getManagedObjects(states, classes); |
|
} |
|
|
|
public FetchGroup getFetchGroup(Class cls, String name) { |
|
return pm.getFetchGroup(cls, name); |
|
} |
|
}
|
|
|