01: /*
02: * All content copyright (c) 2003-2007 Terracotta, Inc., except as may otherwise be noted in a separate copyright
03: * notice. All rights reserved.
04: */
05: package org.terracotta.modules.hibernate_3_1_2.object.config;
06:
07: import com.tc.hibernate.HibernateProxyInstance;
08: import com.tc.object.config.ChangeApplicatorSpec;
09:
10: public class HibernateChangeApplicatorSpec implements
11: ChangeApplicatorSpec {
12: private final static String HIBERNATE_PROXY_APPLICATOR_CLASS_NAME = "org.terracotta.modules.hibernate_3_1_2.object.applicator.HibernateProxyApplicator";
13:
14: private final ClassLoader classLoader;
15:
16: public HibernateChangeApplicatorSpec(ClassLoader classLoader) {
17: this .classLoader = classLoader;
18: }
19:
20: public Class getChangeApplicator(Class clazz) {
21: String changeApplicatorClassName = null;
22: if (isHibernateProxy(clazz)) {
23: changeApplicatorClassName = HIBERNATE_PROXY_APPLICATOR_CLASS_NAME;
24: }
25: if (changeApplicatorClassName != null) {
26: try {
27: if (classLoader == null) {
28: return Class.forName(changeApplicatorClassName);
29: } else {
30: return Class.forName(changeApplicatorClassName,
31: false, classLoader);
32: }
33: } catch (Exception e) {
34: throw new AssertionError(e);
35: }
36: }
37: return null;
38: }
39:
40: private static boolean isHibernateProxy(Class clazz) {
41: if (HibernateProxyInstance.class.getName().equals(
42: clazz.getName())) {
43: return true;
44: }
45:
46: Class[] interfaces = clazz.getInterfaces();
47: for (int i = 0; i < interfaces.length; i++) {
48: if (interfaces[i].getName().equals(
49: "org.hibernate.proxy.HibernateProxy")) {
50: return true;
51: }
52: }
53: return false;
54:
55: }
56: }
|