package rocks.inspectit.server.util;
import org.apache.commons.lang.ArrayUtils;
import org.hibernate.Hibernate;
import org.hibernate.collection.internal.PersistentList;
import org.hibernate.collection.internal.PersistentMap;
import org.hibernate.collection.internal.PersistentSet;
import org.hibernate.collection.spi.PersistentCollection;
import org.hibernate.proxy.HibernateProxy;
import org.springframework.stereotype.Component;
import rocks.inspectit.shared.all.util.IHibernateUtil;
/**
* Our own Hibernate utility class.
*
* @author Ivan Senic
*
*/
@Component
public class HibernateUtil implements IHibernateUtil {
/**
* {@inheritDoc}
*/
@Override
public boolean isInitialized(Object proxy) {
return Hibernate.isInitialized(proxy);
}
/**
* {@inheritDoc}
*/
@Override
public boolean isPersistentCollection(Class<?> collectionClass) {
return PersistentCollection.class.isAssignableFrom(collectionClass);
}
/**
* {@inheritDoc}
*/
@Override
public boolean isPersistentMap(Class<?> collectionClass) {
return PersistentMap.class.isAssignableFrom(collectionClass);
}
/**
* {@inheritDoc}
*/
@Override
public boolean isPersistentList(Class<?> collectionClass) {
return PersistentList.class.isAssignableFrom(collectionClass);
}
/**
* {@inheritDoc}
*/
@Override
public boolean isPersistentSet(Class<?> collectionClass) {
return PersistentSet.class.isAssignableFrom(collectionClass);
}
/**
* {@inheritDoc}
*/
@Override
public boolean isProxy(Class<?> proxyClass) {
return ArrayUtils.contains(proxyClass.getInterfaces(), HibernateProxy.class);
}
/**
* {@inheritDoc}
*/
@Override
public Object getUnproxiedObject(Object proxy) {
// getImplementation will try to initialize the object
// but our objects should already be initialized, thus should work with no problem
if (proxy instanceof HibernateProxy) {
return ((HibernateProxy) proxy).getHibernateLazyInitializer().getImplementation();
}
return proxy;
}
}