use of javassist.util.proxy.Proxy in project orientdb by orientechnologies.
the class ObjectDetachingTestSchemaFull method testDetachAllNonProxied.
@Test(dependsOnMethods = "testNonProxiedAttachDetach")
public void testDetachAllNonProxied() {
JavaAttachDetachTestClass attach = database.newInstance(JavaAttachDetachTestClass.class);
attach.text = "test";
attach.numberSimple = 12345;
attach.doubleSimple = 12.34d;
attach.floatSimple = 123.45f;
attach.longSimple = 12345678l;
attach.byteSimple = (byte) 1;
attach.flagSimple = true;
attach.enumeration = EnumTest.ENUM1;
Child c = database.newInstance(Child.class);
c.setName("Jesus");
attach.children = new HashMap<String, Child>();
attach.children.put("first", c);
attach.enumList = new ArrayList<EnumTest>();
attach.enumList.add(EnumTest.ENUM1);
attach.enumList.add(EnumTest.ENUM2);
attach.enumSet = new HashSet<EnumTest>();
attach.enumSet.add(EnumTest.ENUM1);
attach.enumSet.add(EnumTest.ENUM3);
attach.enumMap = new HashMap<String, EnumTest>();
attach.enumMap.put("1", EnumTest.ENUM2);
attach.enumMap.put("2", EnumTest.ENUM3);
database.attach(attach);
ODocument doc = database.getRecordByUserObject(attach, false);
Assert.assertEquals(doc.field("text"), "test");
Assert.assertEquals(doc.field("numberSimple"), 12345);
Assert.assertEquals(doc.field("doubleSimple"), 12.34d);
Assert.assertEquals(doc.field("floatSimple"), 123.45f);
Assert.assertEquals(doc.field("longSimple"), 12345678l);
Assert.assertEquals(doc.field("byteSimple"), (byte) 1);
Assert.assertEquals(doc.field("flagSimple"), true);
Assert.assertEquals(doc.field("enumeration"), EnumTest.ENUM1.toString());
Assert.assertTrue(doc.field("children") instanceof Map<?, ?>);
Assert.assertTrue(((Map<?, ?>) doc.field("children")).get("first") instanceof ODocument);
Assert.assertEquals(((ODocument) ((Map<?, ?>) doc.field("children")).get("first")).field("name"), "Jesus");
Assert.assertEquals(((List<?>) doc.field("enumList")).size(), 2);
Assert.assertEquals(((List<?>) doc.field("enumList")).get(0), EnumTest.ENUM1.toString());
Assert.assertEquals(((List<?>) doc.field("enumList")).get(1), EnumTest.ENUM2.toString());
Assert.assertEquals(((Set<?>) doc.field("enumSet")).size(), 2);
Iterator<?> it = ((Set<?>) doc.field("enumSet")).iterator();
Assert.assertEquals(it.next(), EnumTest.ENUM1.toString());
Assert.assertEquals(it.next(), EnumTest.ENUM3.toString());
Assert.assertEquals(((Map<?, ?>) doc.field("enumMap")).size(), 2);
Assert.assertEquals(((Map<?, ?>) doc.field("enumMap")).get("1"), EnumTest.ENUM2.toString());
Assert.assertEquals(((Map<?, ?>) doc.field("enumMap")).get("2"), EnumTest.ENUM3.toString());
JavaAttachDetachTestClass savedJavaObj = database.save(attach);
ORecordId id = (ORecordId) database.getRecordByUserObject(savedJavaObj, false).getIdentity();
database.close();
database = new OObjectDatabaseTx(url).open("admin", "admin");
JavaAttachDetachTestClass loadedJavaObj = (JavaAttachDetachTestClass) database.load(id);
loadedJavaObj = database.detachAll(loadedJavaObj, true);
Assert.assertTrue(!(loadedJavaObj instanceof Proxy));
Assert.assertEquals(loadedJavaObj.text, "test");
Assert.assertEquals(loadedJavaObj.numberSimple, 12345);
Assert.assertEquals(loadedJavaObj.doubleSimple, 12.34d);
Assert.assertEquals(loadedJavaObj.floatSimple, 123.45f);
Assert.assertEquals(loadedJavaObj.longSimple, 12345678l);
Assert.assertEquals(loadedJavaObj.byteSimple, (byte) 1);
Assert.assertEquals(loadedJavaObj.flagSimple, true);
Assert.assertEquals(loadedJavaObj.enumeration, EnumTest.ENUM1);
Assert.assertEquals(loadedJavaObj.enumList.size(), 2);
Assert.assertEquals(loadedJavaObj.enumList.get(0), EnumTest.ENUM1);
Assert.assertEquals(loadedJavaObj.enumList.get(1), EnumTest.ENUM2);
Assert.assertTrue(loadedJavaObj.children instanceof Map<?, ?>);
Assert.assertTrue(loadedJavaObj.children.get("first") instanceof Child);
Assert.assertTrue(!(loadedJavaObj.children.get("first") instanceof Proxy));
Assert.assertEquals(loadedJavaObj.children.get("first").getName(), "Jesus");
Assert.assertEquals(loadedJavaObj.enumSet.size(), 2);
it = loadedJavaObj.enumSet.iterator();
EnumTest next = (EnumTest) it.next();
Assert.assertTrue(next.equals(EnumTest.ENUM1) || next.equals(EnumTest.ENUM3));
next = (EnumTest) it.next();
Assert.assertTrue(next.equals(EnumTest.ENUM1) || next.equals(EnumTest.ENUM3));
Assert.assertEquals(loadedJavaObj.enumMap.size(), 2);
Assert.assertEquals(loadedJavaObj.enumMap.get("1"), EnumTest.ENUM2);
Assert.assertEquals(loadedJavaObj.enumMap.get("2"), EnumTest.ENUM3);
}
use of javassist.util.proxy.Proxy in project frames by tinkerpop.
the class JavaHandlerModule method createHandler.
<T> T createHandler(final Object framedElement, final FramedGraph<?> graph, final Element element, Class<?> frameClass, final Method method) {
try {
Class<T> implClass = (Class<T>) classCache.get(frameClass);
T handler = factory.create(implClass);
((Proxy) handler).setHandler(new MethodHandler() {
private JavaHandlerContextImpl<Element> defaultJavahandlerImpl = new JavaHandlerContextImpl<Element>(graph, method, element);
@Override
public Object invoke(Object o, Method m, Method proceed, Object[] args) throws Throwable {
if (!Modifier.isAbstract(m.getModifiers())) {
return proceed.invoke(o, args);
} else {
if (m.getAnnotation(JavaHandler.class) != null) {
throw new JavaHandlerException("Method " + m + " is marked with @JavaHandler but is not implemented");
}
if (m.getDeclaringClass() == JavaHandlerContext.class) {
return m.invoke(defaultJavahandlerImpl, args);
}
return m.invoke(framedElement, args);
}
}
});
return handler;
} catch (ExecutionException e) {
Throwable cause = e.getCause();
if (cause instanceof ClassNotFoundException) {
throw new JavaHandlerException("Problem locating handler class for " + frameClass, e);
} else {
throw new JavaHandlerException("Cannot create class for handling framed method", cause);
}
} catch (InstantiationException e) {
throw new JavaHandlerException("Problem instantiating handler class", e);
} catch (IllegalAccessException e) {
throw new JavaHandlerException("Problem instantiating handler class", e);
}
}
use of javassist.util.proxy.Proxy in project dropwizard by dropwizard.
the class UnitOfWorkAwareProxyFactory method create.
/**
* Creates a new <b>@UnitOfWork</b> aware proxy of a class with a complex constructor.
*
* @param clazz the specified class definition
* @param constructorParamTypes the types of the constructor parameters
* @param constructorArguments the arguments passed to the constructor
* @param <T> the type of the class
* @return a new proxy
*/
@SuppressWarnings("unchecked")
public <T> T create(Class<T> clazz, Class<?>[] constructorParamTypes, Object[] constructorArguments) {
final ProxyFactory factory = new ProxyFactory();
factory.setSuperclass(clazz);
try {
final Proxy proxy = (Proxy) (constructorParamTypes.length == 0 ? factory.createClass().getConstructor().newInstance() : factory.create(constructorParamTypes, constructorArguments));
proxy.setHandler((self, overridden, proceed, args) -> {
final UnitOfWork unitOfWork = overridden.getAnnotation(UnitOfWork.class);
final UnitOfWorkAspect unitOfWorkAspect = newAspect(sessionFactories);
try {
unitOfWorkAspect.beforeStart(unitOfWork);
Object result = proceed.invoke(self, args);
unitOfWorkAspect.afterEnd();
return result;
} catch (InvocationTargetException e) {
unitOfWorkAspect.onError();
throw e.getCause();
} catch (Exception e) {
unitOfWorkAspect.onError();
throw e;
} finally {
unitOfWorkAspect.onFinish();
}
});
return (T) proxy;
} catch (NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) {
throw new IllegalStateException("Unable to create a proxy for the class '" + clazz + "'", e);
}
}
use of javassist.util.proxy.Proxy in project hibernate-orm by hibernate.
the class JavassistProxyFactory method deserializeProxy.
public static HibernateProxy deserializeProxy(SerializableProxy serializableProxy) {
final JavassistLazyInitializer initializer = new JavassistLazyInitializer(serializableProxy.getEntityName(), serializableProxy.getPersistentClass(), serializableProxy.getInterfaces(), serializableProxy.getId(), resolveIdGetterMethod(serializableProxy), resolveIdSetterMethod(serializableProxy), serializableProxy.getComponentIdType(), null, ReflectHelper.overridesEquals(serializableProxy.getPersistentClass()));
final javassist.util.proxy.ProxyFactory factory = buildJavassistProxyFactory(serializableProxy.getPersistentClass(), serializableProxy.getInterfaces());
// note: interface is assumed to already contain HibernateProxy.class
try {
final Class proxyClass = factory.createClass();
final HibernateProxy proxy = (HibernateProxy) proxyClass.newInstance();
((Proxy) proxy).setHandler(initializer);
initializer.constructed();
return proxy;
} catch (Throwable t) {
final String message = LOG.bytecodeEnhancementFailed(serializableProxy.getEntityName());
LOG.error(message, t);
throw new HibernateException(message, t);
}
}
use of javassist.util.proxy.Proxy in project hibernate-orm by hibernate.
the class JavassistProxyFactory method getProxy.
@Override
public HibernateProxy getProxy(Serializable id, SharedSessionContractImplementor session) throws HibernateException {
final JavassistLazyInitializer initializer = new JavassistLazyInitializer(entityName, persistentClass, interfaces, id, getIdentifierMethod, setIdentifierMethod, componentIdType, session, overridesEquals);
try {
final HibernateProxy proxy = (HibernateProxy) proxyClass.newInstance();
((Proxy) proxy).setHandler(initializer);
initializer.constructed();
return proxy;
} catch (Throwable t) {
LOG.error(LOG.bytecodeEnhancementFailed(entityName), t);
throw new HibernateException(LOG.bytecodeEnhancementFailed(entityName), t);
}
}
Aggregations