Package org.apache.openjpa.persistence.jdbc.kernel

Source Code of org.apache.openjpa.persistence.jdbc.kernel.TestByteArrayAppId

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.   
*/
package org.apache.openjpa.persistence.jdbc.kernel;
/*
* TestByteArrayAppId.java
*
* Created on October 2, 2006, 10:56 AM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/


import org.apache.openjpa.persistence.jdbc.common.apps.*;
import org.apache.openjpa.persistence.common.utils.AbstractTestCase;

import java.util.*;


import java.lang.annotation.Annotation;
import junit.framework.*;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import org.apache.openjpa.persistence.OpenJPAEntityManagerFactory;
import org.apache.openjpa.persistence.OpenJPAEntityManager;
import org.apache.openjpa.persistence.OpenJPAEntityManagerSPI;
import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
import org.apache.openjpa.jdbc.meta.MappingTool;
import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
import org.apache.openjpa.kernel.Extent;
import org.apache.openjpa.persistence.OpenJPAPersistence;
import org.apache.openjpa.kernel.OpenJPAStateManager;
import org.apache.openjpa.kernel.Query;


public class TestByteArrayAppId extends BaseJDBCTest {
   
    private static boolean _init = false;
    private OpenJPAEntityManagerFactory _pmf = null;
   
   
    /** Creates a new instance of TestByteArrayAppId */
    public TestByteArrayAppId(String name)
    {
      super(name);
    }
   
    public boolean skipTest() {
        return getCurrentPlatform() != AbstractTestCase.Platform.DB2;
    }
   
    public void setUp()
    throws Exception {
        // we have to use getbytes/setbytes for byte arrays to work properly
        _pmf =(OpenJPAEntityManagerFactory) getEmf(getProps());
       
        if (!_init) {
            initialize((JDBCConfiguration) ((OpenJPAEntityManagerFactorySPI)
                    OpenJPAPersistence.cast(_pmf)).getConfiguration());
            _init = true;
        }
        EntityManager pm = _pmf.createEntityManager();
        startTx(pm);
       
       deleteAll(ByteArrayPKPC.class,pm);
        endTx(pm);
        pm.close();
        pm = currentEntityManager();
        startTx(pm);
        ByteArrayPKPC2 testBytes = new ByteArrayPKPC2(new byte[]{ 1, 2 },
                "child");
        testBytes.setSubfield("sub");
        testBytes.setParent(new ByteArrayPKPC(new byte[]{ 3, 4 }, "parent"));
        pm.persist(testBytes);
        endTx(pm);
        pm.close();
    }
   
    public void tearDown()
    throws Exception {
        // closing the pmf every time slows things down too much b/c
        // schema reflection is so slow on DB2
        //  try { _pmf.close (); } catch (Exception e) {}
       
        super.tearDown();
    }
   
    private void initialize(JDBCConfiguration conf)
    throws Exception {
       
        EntityManager em= currentEntityManager();
        OpenJPAEntityManager kem = OpenJPAPersistence.cast (em);
        //JDBCConfiguration conf = (JDBCConfiguration) kem.getConfiguration();
       
        MappingTool tool = new MappingTool((JDBCConfiguration)
                ((OpenJPAEntityManagerSPI) kem).getConfiguration(),
                MappingTool.ACTION_REFRESH, false);
        tool.run(ByteArrayPKPC.class);
        tool.run(ByteArrayPKPC2.class);
        tool.record();
    }
   
    /**
     * Tests that application identity classes are returned correctly.
     */
    public void testGetObjectIdClass() {
        EntityManager em= currentEntityManager();
        OpenJPAEntityManager pm = OpenJPAPersistence.cast (em);

       
        assertEquals(ByteArrayPKPCId.class,
                pm.getObjectIdClass(ByteArrayPKPC.class));
        assertEquals(ByteArrayPKPCId.class,
                pm.getObjectIdClass(ByteArrayPKPC2.class));
        pm.close();
        em.close();
    }
   
    /**
     * Tests finding an instance by a manually-created id value.
     */
    public void testGetSubclassObjectById() {
        ByteArrayPKPC2 bytes2 = getChild();
        assertNotNull(bytes2);
        assertEquals(1, bytes2.getPK()[0]);
        assertEquals(2, bytes2.getPK()[1]);
        assertEquals("child", bytes2.getStringField());
        assertEquals("sub", bytes2.getSubfield());
        assertNotNull(bytes2.getParent());
        assertEquals(3, bytes2.getParent().getPK()[0]);
        assertEquals(4, bytes2.getParent().getPK()[1]);
        assertEquals("parent", bytes2.getParent().getStringField());
        assertNull(bytes2.getParent().getParent());
        //FIXME next line commented
        //JDOHelper.getPersistenceManager(bytes2).close();
    }
   
    /**
     * Tests finding an instance by a manually-created id value.
     */
    public void testGetObjectById() {
        ByteArrayPKPC bytes = getParent();
        assertNotNull(bytes);
        assertEquals(3, bytes.getPK()[0]);
        assertEquals(4, bytes.getPK()[1]);
        assertEquals("parent", bytes.getStringField());
        assertNull(bytes.getParent());
        //FIXME next line commented
        //JDOHelper.getPersistenceManager(bytes).close();
    }
   
    /**
     * Tests that the oid instances returned from the pm are copied to
     * prevent by-reference modification by the user.
     */
    public void testGetObjectId() {
       
        EntityManager em= currentEntityManager();
        OpenJPAEntityManager kem = OpenJPAPersistence.cast (em);
        if (! ((OpenJPAEntityManagerSPI) kem).getConfiguration()
                .getCompatibilityInstance().getCopyObjectIds())
            return;
       
        ByteArrayPKPCId oid = new ByteArrayPKPCId();
        oid.pk = new byte[]{ 1, 2 };
        ByteArrayPKPC bytes = (ByteArrayPKPC) kem.getObjectId(oid);
        ByteArrayPKPCId oidCopy = (ByteArrayPKPCId) kem.getObjectId(bytes);
        assertTrue("Oid not copied.", oid != oidCopy);
        assertEquals(1, oidCopy.pk[0]);
        assertEquals(2, oidCopy.pk[1]);
       
        em.close();
        kem.close();
    }
   
    /**
     * Tests that changing primary key values will fail.
     */
    public void testChangeIdentity() {
        ByteArrayPKPC2 bytes = getChild();
        OpenJPAEntityManager pm = OpenJPAPersistence.getEntityManager(bytes);
        startTx(pm);
       
        // make sure setting to same value is OK
        bytes.setPK(bytes.getPK());
        try {
            bytes.setPK(new byte[]{ 5, 6 });
            fail("Allowed changing of pk.");
        } catch (Exception je) {
        }
        rollbackTx(pm);
        pm.close();
    }
   
    /**
     * Tests that pk fields are retained on state transition to hollow.
     */
    public void testPKRetain() {
        ByteArrayPKPC2 bytes = getChild();
        OpenJPAEntityManager pm = OpenJPAPersistence.getEntityManager(bytes);
       
        //FIXME next line commented .... need substitute API
        //pm.currentTransaction().setNontransactionalRead(false);
       
        startTx(pm);
        bytes.setParent(null);
        endTx(pm);       
       
        // bytes should still allow access to oid fields
        assertEquals(1, bytes.getPK()[0]);
        assertEquals(2, bytes.getPK()[1]);
        try {
            bytes.getParent();
            fail("Allowed read of non-pk value outside of transaction.");
        } catch (Exception je) {
        }
        try {
            bytes.setPK(new byte[]{ 5, 6 });
            fail("Allowed setting of pk value outside of transaction.");
        } catch (Exception je) {
        }
        pm.close();
    }
   
    public void testDeleteAndInsert() {
        EntityManager em= currentEntityManager();
        OpenJPAEntityManager kem = OpenJPAPersistence.cast (em);
       
        startTx(kem);
      
        for (int i = 0; i < 20; i++) {
            ByteArrayPKPC bytes = new ByteArrayPKPC(new byte[]
            { (byte) (i + 5), (byte) (i + 6) }, String.valueOf(i));
            kem.persist(bytes);
        }
        endTx(kem);       
       
        kem.close();
       
        kem = _pmf.createEntityManager();
        startTx(kem);
        Extent extent = (Extent) kem.createExtent(ByteArrayPKPC.class,false);
        kem.detachAll(extent.list());
        extent.closeAll();
       
        ByteArrayPKPC owner = new ByteArrayPKPC();
        kem.persist(owner);
        owner.setPK(new byte[]{ 100, 101 });
        owner.setStringField("owner");
       
        // make new instances with same oids persistent
        for (int i = 0; i < 20; i++) {
            ByteArrayPKPC bytes = new ByteArrayPKPC(new byte[]
            { (byte) (i + 5), (byte) (i + 6) }, String.valueOf(i));
            kem.persist(bytes);
            assertEquals(bytes,
                    getStateManager(bytes, kem).getManagedInstance());
            owner.getRels().add(bytes);
        }
       
        endTx(kem)
       
        Object oid = kem.getObjectId(owner);
        assertOwner(kem, oid);
        kem.close();
       
        kem = _pmf.createEntityManager();
        assertOwner(kem, oid);
        em.close();
        kem.close();
    }
   
    public void testQuery() {
        EntityManager pm = _pmf.createEntityManager();
        //FIXME jthomas - partly commented
        //Query q = pm.newQuery(ByteArrayPKPC.class, "pk == bytes");
        Query q =null;//= pm.newQuery(ByteArrayPKPC.class, "pk == bytes");
        q.declareParameters("byte[] bytes");
        //FIXME jthomas - no execute for byte
        //Collection results = (Collection) q.execute(new byte[]{ 1, 2 });
        Collection results =null;//= (Collection) q.execute(new byte[]{ 1, 2 });
        assertEquals(1, results.size());
        ByteArrayPKPC2 child = (ByteArrayPKPC2) results.iterator().next();
        assertEquals("child", child.getStringField());
        q.closeAll();
        pm.close();
    }
   
    public void testConflictingIds() {
        OpenJPAEntityManager pm = _pmf.createEntityManager();
        startTx(pm);    
       
        // make a bunch of objects persistent with the same initial pk values
        ByteArrayPKPC owner = new ByteArrayPKPC();
        pm.persist(owner);
        owner.setPK(new byte[]{ 100, 101 });
        owner.setStringField("owner");
        for (int i = 0; i < 20; i++) {
            ByteArrayPKPC bytes = new ByteArrayPKPC();
            pm.persist(bytes);
            assertEquals(bytes, getStateManager(bytes, pm).
                    getManagedInstance());
            bytes.setPK(new byte[]{ (byte) (i + 5), (byte) (i + 6) });
            bytes.setStringField(String.valueOf(i));
            owner.getRels().add(bytes);
        }
        endTx(pm);
        Object oid = pm.getObjectId(owner);
        assertOwner(pm, oid);
        pm.close();
       
        pm = _pmf.createEntityManager();
        assertOwner(pm, oid);
        pm.close();
    }
   
    private void assertOwner(OpenJPAEntityManager pm, Object oid) {
        ByteArrayPKPC owner = (ByteArrayPKPC) pm.getObjectId(oid);
        assertEquals(100, owner.getPK()[0]);
        assertEquals(101, owner.getPK()[1]);
        assertEquals("owner", owner.getStringField());
        List rels = owner.getRels();
        assertEquals(20, rels.size());
        for (int i = 0; i < rels.size(); i++) {
            ByteArrayPKPC bytes = (ByteArrayPKPC) rels.get(i);
            assertEquals(i + 5, bytes.getPK()[0]);
            assertEquals(i + 6, bytes.getPK()[1]);
            assertEquals(String.valueOf(i), bytes.getStringField());
        }
    }
   
    private ByteArrayPKPC getParent() {
        ByteArrayPKPCId oid = new ByteArrayPKPCId();
        oid.pk = new byte[]{ 3, 4 };
        OpenJPAEntityManager pm = _pmf.createEntityManager();
        return (ByteArrayPKPC) pm.getObjectId(oid);
    }
   
    private ByteArrayPKPC2 getChild() {
        ByteArrayPKPCId oid = new ByteArrayPKPCId();
        oid.pk = new byte[]{ 1, 2 };
        OpenJPAEntityManager pm = _pmf.createEntityManager();
        return (ByteArrayPKPC2) pm.getObjectId(oid);
    }
   
    public static void main(String[] args) {
       // main();
    }
   
    private Map getProps() {
        Map props=new HashMap();
        props.put("openjpa.jdbc.DBDictionary", "");
        props.put("UseGetBytesForBlobs", "true");
        props.put("UseSetBytesForBlobs", "true");
        props.put("BatchLimit", "0");
       
        return props;
    }
   
   
}
TOP

Related Classes of org.apache.openjpa.persistence.jdbc.kernel.TestByteArrayAppId

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.