⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transactiontest.java

📁 berkeley db 4.6.21的源码。berkeley db是一个简单的数据库管理系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2002,2007 Oracle.  All rights reserved. * * $Id: TransactionTest.java,v 12.9 2007/05/04 00:28:29 mark Exp $ */package com.sleepycat.collections.test;import java.io.File;import java.util.Iterator;import java.util.List;import java.util.SortedSet;import junit.framework.Test;import junit.framework.TestCase;import junit.framework.TestSuite;import com.sleepycat.collections.CurrentTransaction;import com.sleepycat.collections.StoredCollections;import com.sleepycat.collections.StoredContainer;import com.sleepycat.collections.StoredIterator;import com.sleepycat.collections.StoredList;import com.sleepycat.collections.StoredSortedMap;import com.sleepycat.collections.TransactionRunner;import com.sleepycat.collections.TransactionWorker;import com.sleepycat.compat.DbCompat;import com.sleepycat.db.CursorConfig;import com.sleepycat.db.Database;import com.sleepycat.db.DatabaseConfig;import com.sleepycat.db.DatabaseEntry;import com.sleepycat.db.DatabaseException;import com.sleepycat.db.Environment;import com.sleepycat.db.EnvironmentConfig;import com.sleepycat.db.Transaction;import com.sleepycat.db.TransactionConfig;import com.sleepycat.util.RuntimeExceptionWrapper;/** * @author Mark Hayes */public class TransactionTest extends TestCase {    private static final Long ONE = new Long(1);    private static final Long TWO = new Long(2);    private static final Long THREE = new Long(3);    /**     * Runs a command line collection test.     * @see #usage     */    public static void main(String[] args)        throws Exception {        if (args.length == 1 &&            (args[0].equals("-h") || args[0].equals("-help"))) {            usage();        } else {            junit.framework.TestResult tr =                junit.textui.TestRunner.run(suite());            if (tr.errorCount() > 0 ||                tr.failureCount() > 0) {                System.exit(1);            } else {                System.exit(0);            }        }    }    private static void usage() {        System.out.println(              "Usage: java com.sleepycat.collections.test.TransactionTest"            + " [-h | -help]\n");        System.exit(2);    }    public static Test suite()        throws Exception {        TestSuite suite = new TestSuite(TransactionTest.class);        return suite;    }    private Environment env;    private CurrentTransaction currentTxn;    private Database store;    private StoredSortedMap map;    private TestStore testStore = TestStore.BTREE_UNIQ;    public TransactionTest(String name) {        super(name);    }    public void setUp()        throws Exception {        DbTestUtil.printTestName(DbTestUtil.qualifiedTestName(this));        env = TestEnv.TXN.open("TransactionTests");        currentTxn = CurrentTransaction.getInstance(env);        store = testStore.open(env, dbName(0));        map = new StoredSortedMap(store, testStore.getKeyBinding(),                                  testStore.getValueBinding(), true);    }    public void tearDown() {        try {            if (store != null) {                store.close();            }            if (env != null) {                env.close();            }        } catch (Exception e) {            System.out.println("Ignored exception during tearDown: " + e);        } finally {            /* Ensure that GC can cleanup. */            store = null;            env = null;            currentTxn = null;            map = null;            testStore = null;        }    }    private String dbName(int i) {        return "txn-test-" + getName() + '-' + i;    }    public void testGetters()        throws Exception {        assertNotNull(env);        assertNotNull(currentTxn);        assertNull(currentTxn.getTransaction());        currentTxn.beginTransaction(null);        assertNotNull(currentTxn.getTransaction());        currentTxn.commitTransaction();        assertNull(currentTxn.getTransaction());        currentTxn.beginTransaction(null);        assertNotNull(currentTxn.getTransaction());        currentTxn.abortTransaction();        assertNull(currentTxn.getTransaction());        // read-uncommitted property should be inherited        assertTrue(!isReadUncommitted(map));        assertTrue(!isReadUncommitted(map.values()));        assertTrue(!isReadUncommitted(map.keySet()));        assertTrue(!isReadUncommitted(map.entrySet()));        StoredSortedMap other = (StoredSortedMap)            StoredCollections.configuredMap                (map, CursorConfig.READ_UNCOMMITTED);        assertTrue(isReadUncommitted(other));        assertTrue(isReadUncommitted(other.values()));        assertTrue(isReadUncommitted(other.keySet()));        assertTrue(isReadUncommitted(other.entrySet()));        assertTrue(!isReadUncommitted(map));        assertTrue(!isReadUncommitted(map.values()));        assertTrue(!isReadUncommitted(map.keySet()));        assertTrue(!isReadUncommitted(map.entrySet()));        // read-committed property should be inherited        assertTrue(!isReadCommitted(map));        assertTrue(!isReadCommitted(map.values()));        assertTrue(!isReadCommitted(map.keySet()));        assertTrue(!isReadCommitted(map.entrySet()));        other = (StoredSortedMap)            StoredCollections.configuredMap                (map, CursorConfig.READ_COMMITTED);        assertTrue(isReadCommitted(other));        assertTrue(isReadCommitted(other.values()));        assertTrue(isReadCommitted(other.keySet()));        assertTrue(isReadCommitted(other.entrySet()));        assertTrue(!isReadCommitted(map));        assertTrue(!isReadCommitted(map.values()));        assertTrue(!isReadCommitted(map.keySet()));        assertTrue(!isReadCommitted(map.entrySet()));    }    public void testTransactional()        throws Exception {        // is transactional because DB_AUTO_COMMIT was passed to        // Database.open()        //        assertTrue(map.isTransactional());        store.close();        store = null;        // is not transactional        //        DatabaseConfig dbConfig = new DatabaseConfig();        DbCompat.setTypeBtree(dbConfig);        dbConfig.setAllowCreate(true);        Database db = DbCompat.openDatabase(env, null,                                             dbName(1), null,                                            dbConfig);        map = new StoredSortedMap(db, testStore.getKeyBinding(),                                      testStore.getValueBinding(), true);        assertTrue(!map.isTransactional());        map.put(ONE, ONE);        readCheck(map, ONE, ONE);        db.close();        // is transactional        //        dbConfig.setTransactional(true);        currentTxn.beginTransaction(null);        db = DbCompat.openDatabase(env, currentTxn.getTransaction(),                                    dbName(2), null, dbConfig);        currentTxn.commitTransaction();        map = new StoredSortedMap(db, testStore.getKeyBinding(),                                      testStore.getValueBinding(), true);        assertTrue(map.isTransactional());        currentTxn.beginTransaction(null);        map.put(ONE, ONE);        readCheck(map, ONE, ONE);        currentTxn.commitTransaction();        db.close();    }    public void testExceptions()        throws Exception {        try {            currentTxn.commitTransaction();            fail();        } catch (IllegalStateException expected) {}        try {            currentTxn.abortTransaction();            fail();        } catch (IllegalStateException expected) {}    }    public void testNested()        throws Exception {        if (!DbCompat.NESTED_TRANSACTIONS) {            return;        }        assertNull(currentTxn.getTransaction());        Transaction txn1 = currentTxn.beginTransaction(null);        assertNotNull(txn1);        assertTrue(txn1 == currentTxn.getTransaction());        assertNull(map.get(ONE));        assertNull(map.put(ONE, ONE));        assertEquals(ONE, map.get(ONE));        Transaction txn2 = currentTxn.beginTransaction(null);        assertNotNull(txn2);        assertTrue(txn2 == currentTxn.getTransaction());        assertTrue(txn1 != txn2);        assertNull(map.put(TWO, TWO));        assertEquals(TWO, map.get(TWO));        Transaction txn3 = currentTxn.beginTransaction(null);        assertNotNull(txn3);        assertTrue(txn3 == currentTxn.getTransaction());        assertTrue(txn1 != txn2);        assertTrue(txn1 != txn3);        assertTrue(txn2 != txn3);        assertNull(map.put(THREE, THREE));        assertEquals(THREE, map.get(THREE));        Transaction txn = currentTxn.abortTransaction();        assertTrue(txn == txn2);        assertTrue(txn == currentTxn.getTransaction());        assertNull(map.get(THREE));        assertEquals(TWO, map.get(TWO));        txn3 = currentTxn.beginTransaction(null);        assertNotNull(txn3);        assertTrue(txn3 == currentTxn.getTransaction());        assertTrue(txn1 != txn2);        assertTrue(txn1 != txn3);        assertTrue(txn2 != txn3);        assertNull(map.put(THREE, THREE));        assertEquals(THREE, map.get(THREE));        txn = currentTxn.commitTransaction();        assertTrue(txn == txn2);        assertTrue(txn == currentTxn.getTransaction());        assertEquals(THREE, map.get(THREE));        assertEquals(TWO, map.get(TWO));        txn = currentTxn.commitTransaction();        assertTrue(txn == txn1);        assertTrue(txn == currentTxn.getTransaction());        assertEquals(THREE, map.get(THREE));        assertEquals(TWO, map.get(TWO));        assertEquals(ONE, map.get(ONE));        txn = currentTxn.commitTransaction();        assertNull(txn);        assertNull(currentTxn.getTransaction());        assertEquals(THREE, map.get(THREE));        assertEquals(TWO, map.get(TWO));        assertEquals(ONE, map.get(ONE));    }    public void testRunnerCommit()        throws Exception {        commitTest(false);    }    public void testExplicitCommit()        throws Exception {        commitTest(true);    }    private void commitTest(final boolean explicit)        throws Exception {        final TransactionRunner runner = new TransactionRunner(env);        runner.setAllowNestedTransactions(DbCompat.NESTED_TRANSACTIONS);        assertNull(currentTxn.getTransaction());        runner.run(new TransactionWorker() {            public void doWork() throws Exception {                final Transaction txn1 = currentTxn.getTransaction();                assertNotNull(txn1);                assertNull(map.put(ONE, ONE));                assertEquals(ONE, map.get(ONE));                runner.run(new TransactionWorker() {                    public void doWork() throws Exception {                        final Transaction txn2 = currentTxn.getTransaction();                        assertNotNull(txn2);                        if (DbCompat.NESTED_TRANSACTIONS) {                            assertTrue(txn1 != txn2);                        } else {                            assertTrue(txn1 == txn2);                        }                        assertNull(map.put(TWO, TWO));                        assertEquals(TWO, map.get(TWO));                        assertEquals(ONE, map.get(ONE));                        if (DbCompat.NESTED_TRANSACTIONS && explicit) {                            currentTxn.commitTransaction();                        }                    }                });                Transaction txn3 = currentTxn.getTransaction();                assertSame(txn1, txn3);                assertEquals(TWO, map.get(TWO));                assertEquals(ONE, map.get(ONE));            }        });        assertNull(currentTxn.getTransaction());    }    public void testRunnerAbort()        throws Exception {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -