Search in sources :

Example 11 with Proxy

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);
}
Also used : HashSet(java.util.HashSet) Set(java.util.Set) OObjectDatabaseTx(com.orientechnologies.orient.object.db.OObjectDatabaseTx) ORecordId(com.orientechnologies.orient.core.id.ORecordId) Proxy(javassist.util.proxy.Proxy) JavaAttachDetachTestClass(com.orientechnologies.orient.test.domain.base.JavaAttachDetachTestClass) Child(com.orientechnologies.orient.test.domain.business.Child) HashMap(java.util.HashMap) Map(java.util.Map) EnumTest(com.orientechnologies.orient.test.domain.base.EnumTest) ODocument(com.orientechnologies.orient.core.record.impl.ODocument) Test(org.testng.annotations.Test) EnumTest(com.orientechnologies.orient.test.domain.base.EnumTest)

Example 12 with Proxy

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);
    }
}
Also used : Element(com.tinkerpop.blueprints.Element) Method(java.lang.reflect.Method) Proxy(javassist.util.proxy.Proxy) MethodHandler(javassist.util.proxy.MethodHandler) ExecutionException(java.util.concurrent.ExecutionException)

Example 13 with Proxy

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);
    }
}
Also used : ProxyFactory(javassist.util.proxy.ProxyFactory) InvocationTargetException(java.lang.reflect.InvocationTargetException) InvocationTargetException(java.lang.reflect.InvocationTargetException) Proxy(javassist.util.proxy.Proxy)

Example 14 with Proxy

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);
    }
}
Also used : Proxy(javassist.util.proxy.Proxy) HibernateProxy(org.hibernate.proxy.HibernateProxy) HibernateException(org.hibernate.HibernateException) HibernateProxy(org.hibernate.proxy.HibernateProxy)

Example 15 with Proxy

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);
    }
}
Also used : Proxy(javassist.util.proxy.Proxy) HibernateProxy(org.hibernate.proxy.HibernateProxy) HibernateException(org.hibernate.HibernateException) HibernateProxy(org.hibernate.proxy.HibernateProxy)

Aggregations

Proxy (javassist.util.proxy.Proxy)26 ODocument (com.orientechnologies.orient.core.record.impl.ODocument)8 ODatabaseObject (com.orientechnologies.orient.core.db.object.ODatabaseObject)5 OIdentifiable (com.orientechnologies.orient.core.db.record.OIdentifiable)5 HashMap (java.util.HashMap)5 Map (java.util.Map)5 ProxyObject (javassist.util.proxy.ProxyObject)5 Test (org.junit.Test)5 ORecordId (com.orientechnologies.orient.core.id.ORecordId)4 OObjectDatabaseTx (com.orientechnologies.orient.object.db.OObjectDatabaseTx)4 OObjectProxyMethodHandler (com.orientechnologies.orient.object.enhancement.OObjectProxyMethodHandler)4 EnumTest (com.orientechnologies.orient.test.domain.base.EnumTest)4 JavaAttachDetachTestClass (com.orientechnologies.orient.test.domain.base.JavaAttachDetachTestClass)4 Child (com.orientechnologies.orient.test.domain.business.Child)4 HashSet (java.util.HashSet)4 Set (java.util.Set)4 ProxyFactory (javassist.util.proxy.ProxyFactory)3 BaseDataTest (org.apache.ibatis.BaseDataTest)3 Test (org.testng.annotations.Test)3 OObjectLazyMultivalueElement (com.orientechnologies.orient.core.db.object.OObjectLazyMultivalueElement)2