Search in sources :

Example 21 with Proxy

use of javassist.util.proxy.Proxy in project orientdb by orientechnologies.

the class OObjectLazyList method add.

public boolean add(TYPE element) {
    boolean dirty = false;
    OIdentifiable record;
    if (element instanceof OIdentifiable) {
        record = (OIdentifiable) element;
        if (converted)
            converted = false;
        if (recordList.add(record)) {
            setDirty();
            if (orphanRemoval && record != null && sourceRecord != null)
                ((OObjectProxyMethodHandler) sourceRecord.getHandler()).getOrphans().remove(record.getIdentity());
            return true;
        }
    } else if (element instanceof Proxy) {
        record = (OIdentifiable) OObjectEntitySerializer.getDocument((Proxy) element);
        if (orphanRemoval && record != null && sourceRecord != null)
            ((OObjectProxyMethodHandler) sourceRecord.getHandler()).getOrphans().remove(record.getIdentity());
        dirty = recordList.add(record);
    } else {
        element = (TYPE) OObjectEntitySerializer.serializeObject(element, getDatabase());
        record = (OIdentifiable) OObjectEntitySerializer.getDocument((Proxy) element);
        if (orphanRemoval && record != null && sourceRecord != null)
            ((OObjectProxyMethodHandler) sourceRecord.getHandler()).getOrphans().remove(record.getIdentity());
        dirty = recordList.add(record);
    }
    if (dirty)
        setDirty();
    return super.add(element);
}
Also used : Proxy(javassist.util.proxy.Proxy) OIdentifiable(com.orientechnologies.orient.core.db.record.OIdentifiable) OObjectProxyMethodHandler(com.orientechnologies.orient.object.enhancement.OObjectProxyMethodHandler)

Example 22 with Proxy

use of javassist.util.proxy.Proxy in project orientdb by orientechnologies.

the class ObjectDetachingTest method testDetachAllNonProxied.

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.specialChild = c;
    attach.specialChild2 = 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");
    Child cDetached = loadedJavaObj.children.get("first");
    Assert.assertTrue(cDetached instanceof Child);
    Assert.assertEquals(cDetached.getName(), "Jesus");
    Assert.assertSame(loadedJavaObj.specialChild, loadedJavaObj.specialChild2);
    Assert.assertEquals(cDetached, loadedJavaObj.specialChild);
    Assert.assertSame(cDetached, loadedJavaObj.specialChild);
    Assert.assertSame(cDetached, loadedJavaObj.specialChild2);
    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) LazyChild(com.orientechnologies.orient.test.domain.lazy.LazyChild) CycleChild(com.orientechnologies.orient.test.domain.cycle.CycleChild) GrandChild(com.orientechnologies.orient.test.domain.cycle.GrandChild) HashMap(java.util.HashMap) Map(java.util.Map) EnumTest(com.orientechnologies.orient.test.domain.base.EnumTest) ODocument(com.orientechnologies.orient.core.record.impl.ODocument)

Example 23 with Proxy

use of javassist.util.proxy.Proxy in project orientdb by orientechnologies.

the class ObjectDetachingTestSchemaFull method testNonProxiedAttachDetach.

@Test(dependsOnMethods = "testDetachAll")
public void testNonProxiedAttachDetach() {
    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.detach(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.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);
    ODocument serializedDoc = database.getRecordByUserObject(loadedJavaObj, false);
    Assert.assertTrue(serializedDoc.equals(doc));
    Assert.assertTrue(serializedDoc.hasSameContentOf(doc));
}
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 24 with Proxy

use of javassist.util.proxy.Proxy in project mybatis-3 by mybatis.

the class SqlSessionTest method shouldSelectBlogWithPostsAndAuthorUsingSubSelectsLazily.

@Test
public void shouldSelectBlogWithPostsAndAuthorUsingSubSelectsLazily() throws Exception {
    SqlSession session = sqlMapper.openSession();
    try {
        Blog blog = session.selectOne("org.apache.ibatis.domain.blog.mappers.BlogMapper.selectBlogWithPostsUsingSubSelectLazily", 1);
        Assert.assertTrue(blog instanceof Proxy);
        assertEquals("Jim Business", blog.getTitle());
        assertEquals(2, blog.getPosts().size());
        assertEquals("Corn nuts", blog.getPosts().get(0).getSubject());
        assertEquals(101, blog.getAuthor().getId());
        assertEquals("jim", blog.getAuthor().getUsername());
    } finally {
        session.close();
    }
}
Also used : Proxy(javassist.util.proxy.Proxy) Blog(org.apache.ibatis.domain.blog.Blog) BaseDataTest(org.apache.ibatis.BaseDataTest) Test(org.junit.Test)

Example 25 with Proxy

use of javassist.util.proxy.Proxy in project mybatis-3 by mybatis.

the class JavassistProxyFactory method crateProxy.

static Object crateProxy(Class<?> type, MethodHandler callback, List<Class<?>> constructorArgTypes, List<Object> constructorArgs) {
    ProxyFactory enhancer = new ProxyFactory();
    enhancer.setSuperclass(type);
    try {
        type.getDeclaredMethod(WRITE_REPLACE_METHOD);
        // ObjectOutputStream will call writeReplace of objects returned by writeReplace
        if (log.isDebugEnabled()) {
            log.debug(WRITE_REPLACE_METHOD + " method was found on bean " + type + ", make sure it returns this");
        }
    } catch (NoSuchMethodException e) {
        enhancer.setInterfaces(new Class[] { WriteReplaceInterface.class });
    } catch (SecurityException e) {
    // nothing to do here
    }
    Object enhanced;
    Class<?>[] typesArray = constructorArgTypes.toArray(new Class[constructorArgTypes.size()]);
    Object[] valuesArray = constructorArgs.toArray(new Object[constructorArgs.size()]);
    try {
        enhanced = enhancer.create(typesArray, valuesArray);
    } catch (Exception e) {
        throw new ExecutorException("Error creating lazy proxy.  Cause: " + e, e);
    }
    ((Proxy) enhanced).setHandler(callback);
    return enhanced;
}
Also used : Proxy(javassist.util.proxy.Proxy) AbstractEnhancedDeserializationProxy(org.apache.ibatis.executor.loader.AbstractEnhancedDeserializationProxy) ExecutorException(org.apache.ibatis.executor.ExecutorException) ProxyFactory(javassist.util.proxy.ProxyFactory) WriteReplaceInterface(org.apache.ibatis.executor.loader.WriteReplaceInterface) ExecutorException(org.apache.ibatis.executor.ExecutorException)

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