Example usage for javax.transaction UserTransaction begin

List of usage examples for javax.transaction UserTransaction begin

Introduction

In this page you can find the example usage for javax.transaction UserTransaction begin.

Prototype

void begin() throws NotSupportedException, SystemException;

Source Link

Document

Create a new transaction and associate it with the current thread.

Usage

From source file:org.alfresco.module.vti.handler.alfresco.AlfrescoMeetingServiceHandler.java

protected void renameDocumentsFolder(String siteName, MeetingBean meeting, String folderNodeRef) {
    NodeRef docLibraryContainer = null;/*from ww w.  j ava 2s  . c o m*/
    docLibraryContainer = siteService.getContainer(siteName, DOCUMENT_LIBRARY_CONTAINER_NAME);
    if (docLibraryContainer == null) {
        throw new VtiHandlerException(getMessage("vti.meeting.error.no_site_update"));
    }
    if (folderNodeRef == null) {
        throw new VtiHandlerException(getMessage("vti.meeting.error.no_meeting_update"));
    }
    NodeRef folderRef = new NodeRef(folderNodeRef);
    UserTransaction tx = transactionService.getUserTransaction(false);
    try {
        tx.begin();
        fileFolderService.rename(folderRef, getFolderName(meeting));
        if (meeting.getSubject() != null && meeting.getSubject().length() > 0) {
            nodeService.setProperty(folderRef, ContentModel.PROP_DESCRIPTION, new MLText(meeting.getSubject()));
        }
        tx.commit();

        if (logger.isDebugEnabled()) {
            logger.debug("Folder successfully renamed.");
        }
    } catch (Throwable e) {
        try {
            tx.rollback();
        } catch (Exception tex) {
        }

        if (e instanceof FileExistsException) {
            throw new VtiHandlerException(VtiHandlerException.ITEM_NOT_FOUND);
        }

        throw VtiExceptionUtils.createRuntimeException(e);
    }
}

From source file:org.alfresco.module.vti.handler.alfresco.AlfrescoUserGroupServiceHandler.java

/**
 * @see org.alfresco.module.vti.handler.UserGroupServiceHandler#addUserCollectionToRole(java.lang.String, java.lang.String, java.util.List)
 *//*from   w w w .j  a  v  a 2  s.com*/
public void addUserCollectionToRole(String dws, String roleName, List<UserBean> usersList) {
    dws = VtiPathHelper.removeSlashes(dws);
    if (logger.isDebugEnabled())
        logger.debug("Method with name 'addUserCollectionToRole' is started.");

    if (logger.isDebugEnabled())
        logger.debug("Getting siteInfo for '" + dws + "'.");
    SiteInfo siteInfo = siteService.getSite(dws);

    if (siteInfo == null) {
        if (logger.isDebugEnabled())
            logger.debug("Error: Site info not found.");
        throw new VtiHandlerException(VtiHandlerException.NOT_FOUND);
    }

    for (UserBean userBean : usersList) {
        NodeRef person = personService.getPerson(userBean.getLoginName().substring("ALFRESCO\\".length()));
        if (person != null) {
            String userName = (String) nodeService.getProperty(person, ContentModel.PROP_USERNAME);

            if (AuthorityType.getAuthorityType(userName) == AuthorityType.GUEST) {
                if (logger.isDebugEnabled())
                    logger.debug("Error: Not allowed operation: guest can not be added.");
                throw new RuntimeException("Not allowed operation: guest can not be added.");
            }
            UserTransaction tx = transactionService.getUserTransaction(false);
            try {
                if (logger.isDebugEnabled())
                    logger.debug("Setting membership [" + dws + ", " + userName + "].");

                tx.begin();

                siteService.setMembership(dws, userName, roleName);

                tx.commit();
            } catch (Exception e) {
                try {
                    tx.rollback();
                } catch (Exception tex) {
                }
                if (logger.isDebugEnabled())
                    logger.debug("Error: The user does not have sufficient rights.", e);
                throw new VtiHandlerException(VtiHandlerException.NO_PERMISSIONS);
            }

        } else {
            if (logger.isDebugEnabled())
                logger.debug("Error: The user does not have sufficient rights.");
            throw new VtiHandlerException(VtiHandlerException.NO_PERMISSIONS);
        }
    }
    if (logger.isDebugEnabled())
        logger.debug("Method with name 'addUserCollectionToRole' is finished.");
}

From source file:org.alfresco.module.vti.handler.alfresco.AlfrescoVersionsServiceHandler.java

/**
 * @see org.alfresco.module.vti.handler.VersionsServiceHandler#restoreVersion(java.lang.String, java.lang.String)
 *///from   w w  w .  ja  v a2s.  c o  m
public List<DocumentVersionBean> restoreVersion(String fileName, String fileVersion) {
    if (logger.isDebugEnabled())
        logger.debug("Method with name 'restoreVersion' is started.");

    FileInfo documentFileInfo = pathHelper.resolvePathFileInfo(fileName);

    assertDocument(documentFileInfo);
    UserTransaction tx = transactionService.getUserTransaction(false);
    try {
        tx.begin();

        Map<String, Serializable> props = new HashMap<String, Serializable>(1, 1.0f);
        props.put(Version.PROP_DESCRIPTION, "");
        props.put(VersionModel.PROP_VERSION_TYPE, VersionType.MAJOR);

        String alfrescoVersionLabel = VtiUtils.toAlfrescoVersionLabel(fileVersion);
        VersionHistory versionHistory = versionService.getVersionHistory(documentFileInfo.getNodeRef());
        Version version = versionHistory.getVersion(alfrescoVersionLabel);
        if (logger.isDebugEnabled())
            logger.debug("Reverting version '" + fileVersion + " for '" + fileName + "'.");
        versionService.revert(documentFileInfo.getNodeRef(), version);

        if (logger.isDebugEnabled())
            logger.debug("Creating a new version for '" + fileName + "'.");
        versionService.createVersion(documentFileInfo.getNodeRef(), props);

        tx.commit();
    } catch (Exception e) {
        try {
            tx.rollback();
        } catch (Exception tex) {
        }
        if (logger.isDebugEnabled())
            logger.debug("Error: version was not restored. ", e);
        throw new RuntimeException("Version was not restored. May be you don't have appropriate permissions.");
    }

    List<DocumentVersionBean> result = getVersions(documentFileInfo);

    if (logger.isDebugEnabled())
        logger.debug("Method with name 'restoreVersion' is finished.");

    return result;
}

From source file:org.alfresco.repo.cache.CacheTest.java

public void testTransactionalCacheWithSingleTxn() throws Throwable {
    // add item to global cache
    TransactionalCache.putSharedCacheValue(backingCache, NEW_GLOBAL_ONE, NEW_GLOBAL_ONE, null);
    TransactionalCache.putSharedCacheValue(backingCache, NEW_GLOBAL_TWO, NEW_GLOBAL_TWO, null);
    TransactionalCache.putSharedCacheValue(backingCache, NEW_GLOBAL_THREE, NEW_GLOBAL_THREE, null);

    TransactionService transactionService = serviceRegistry.getTransactionService();
    UserTransaction txn = transactionService.getUserTransaction();

    try {/*w  ww. j  a va 2s .  com*/
        // begin a transaction
        txn.begin();

        // remove 1 from the cache
        transactionalCache.remove(NEW_GLOBAL_ONE);
        assertFalse("Item was not removed from txn cache", transactionalCache.contains(NEW_GLOBAL_ONE));
        assertNull("Get didn't return null", transactionalCache.get(NEW_GLOBAL_ONE));
        assertTrue("Item was removed from backing cache", backingCache.contains(NEW_GLOBAL_ONE));

        // read 2 from the cache
        assertEquals("Item not read from backing cache", NEW_GLOBAL_TWO,
                transactionalCache.get(NEW_GLOBAL_TWO));
        // Change the backing cache
        TransactionalCache.putSharedCacheValue(backingCache, NEW_GLOBAL_TWO, NEW_GLOBAL_TWO + "-updated", null);
        // Ensure read-committed
        assertEquals("Read-committed not preserved", NEW_GLOBAL_TWO, transactionalCache.get(NEW_GLOBAL_TWO));

        // update 3 in the cache
        transactionalCache.put(UPDATE_TXN_THREE, "XXX");
        assertEquals("Item not updated in txn cache", "XXX", transactionalCache.get(UPDATE_TXN_THREE));
        assertFalse("Item was put into backing cache", backingCache.contains(UPDATE_TXN_THREE));

        // check that the keys collection is correct
        Collection<String> transactionalKeys = transactionalCache.getKeys();
        assertFalse("Transactionally removed item found in keys", transactionalKeys.contains(NEW_GLOBAL_ONE));
        assertTrue("Transactionally added item not found in keys",
                transactionalKeys.contains(UPDATE_TXN_THREE));

        // Register a post-commit cache reader to make sure that nothing blows up if the cache is hit in post-commit
        PostCommitCacheReader listenerReader = new PostCommitCacheReader(transactionalCache, UPDATE_TXN_THREE);
        AlfrescoTransactionSupport.bindListener(listenerReader);

        // Register a post-commit cache reader to make sure that nothing blows up if the cache is hit in post-commit
        PostCommitCacheWriter listenerWriter = new PostCommitCacheWriter(transactionalCache, UPDATE_TXN_FOUR,
                "FOUR");
        AlfrescoTransactionSupport.bindListener(listenerWriter);

        // commit the transaction
        txn.commit();

        // Check the post-commit stressers
        if (listenerReader.e != null) {
            throw listenerReader.e;
        }
        if (listenerWriter.e != null) {
            throw listenerWriter.e;
        }

        // check that backing cache was updated with the in-transaction changes
        assertFalse("Item was not removed from backing cache", backingCache.contains(NEW_GLOBAL_ONE));
        assertNull("Item could still be fetched from backing cache",
                TransactionalCache.getSharedCacheValue(backingCache, NEW_GLOBAL_ONE, null));
        assertEquals("Item not updated in backing cache", "XXX",
                TransactionalCache.getSharedCacheValue(backingCache, UPDATE_TXN_THREE, null));

        // Check that the transactional cache serves get requests
        assertEquals("Transactional cache must serve post-commit get requests", "XXX",
                transactionalCache.get(UPDATE_TXN_THREE));
    } catch (Throwable e) {
        if (txn.getStatus() == Status.STATUS_ACTIVE) {
            txn.rollback();
        }
        throw e;
    }
}

From source file:org.alfresco.repo.cache.CacheTest.java

public void testTransactionalCacheDisableSharedCaches() throws Throwable {
    // add item to global cache
    TransactionalCache.putSharedCacheValue(backingCache, NEW_GLOBAL_ONE, NEW_GLOBAL_ONE, null);
    TransactionalCache.putSharedCacheValue(backingCache, NEW_GLOBAL_TWO, NEW_GLOBAL_TWO, null);
    TransactionalCache.putSharedCacheValue(backingCache, NEW_GLOBAL_THREE, NEW_GLOBAL_THREE, null);

    TransactionService transactionService = serviceRegistry.getTransactionService();
    UserTransaction txn = transactionService.getUserTransaction();
    try {//from   w  w w  . jav a 2  s.  c  o  m
        // begin a transaction
        txn.begin();

        // Go directly past ALL shared caches
        transactionalCache.setDisableSharedCacheReadForTransaction(true);

        // Try to get results in shared caches
        assertNull("Read of mutable shared cache MUST NOT use backing cache",
                transactionalCache.get(NEW_GLOBAL_ONE));
        assertNull("Value should not be in any cache", transactionalCache.get(UPDATE_TXN_THREE));

        // Update the transactional caches
        transactionalCache.put(NEW_GLOBAL_TWO, "An update");
        transactionalCache.put(UPDATE_TXN_THREE, UPDATE_TXN_THREE);

        // Try to get results in shared caches
        assertNull("Read of mutable shared cache MUST NOT use backing cache",
                transactionalCache.get(NEW_GLOBAL_ONE));
        assertEquals("Value should be in transactional cache", "An update",
                transactionalCache.get(NEW_GLOBAL_TWO));
        assertEquals("Value should be in transactional cache", UPDATE_TXN_THREE,
                transactionalCache.get(UPDATE_TXN_THREE));

        txn.commit();

        // Now check that values were not written through for any caches
        assertEquals("Out-of-txn read must return shared value", NEW_GLOBAL_ONE,
                transactionalCache.get(NEW_GLOBAL_ONE));
        assertNull("Value should be removed from shared cache", transactionalCache.get(NEW_GLOBAL_TWO));
        assertEquals("New values must be written to shared cache", UPDATE_TXN_THREE,
                transactionalCache.get(UPDATE_TXN_THREE));
    } catch (Throwable e) {
        if (txn.getStatus() == Status.STATUS_ACTIVE) {
            txn.rollback();
        }
        throw e;
    }
}

From source file:org.alfresco.repo.cache.CacheTest.java

/**
 * Tests a straight Ehcache adapter against a transactional cache both in and out
 * of a transaction.  This is done repeatedly, pushing the count up.
 *//*from  ww w  . j  a v a2  s .co m*/
public void testPerformance() throws Exception {
    for (int i = 0; i < 6; i++) {
        int count = (int) Math.pow(10D, (double) i);

        // test standalone
        long timePlain = runPerformanceTestOnCache(objectCache, count);

        // do transactional cache in a transaction
        TransactionService transactionService = serviceRegistry.getTransactionService();
        UserTransaction txn = transactionService.getUserTransaction();
        txn.begin();
        long timeTxn = runPerformanceTestOnCache(transactionalCache, count);
        long commitStart = System.nanoTime();
        txn.commit();
        long commitEnd = System.nanoTime();
        long commitTime = (commitEnd - commitStart);
        // add this to the cache's performance overhead
        timeTxn += commitTime;

        // report
        System.out.println("Cache performance test: \n" + "   count: " + count + "\n" + "   direct: "
                + timePlain / ((long) count) + " ns\\count \n" + "   transaction: " + timeTxn / ((long) count)
                + " ns\\count");
    }
}

From source file:org.alfresco.repo.cache.CacheTest.java

/**
 * Time how long it takes to create and complete a whole lot of transactions
 *//*from   www  .j a  v  a 2s  .c  o  m*/
public void testInitializationPerformance() throws Exception {
    TransactionService transactionService = serviceRegistry.getTransactionService();
    long start = System.nanoTime();
    int count = 10000;
    for (int i = 0; i < count; i++) {
        UserTransaction txn = transactionService.getUserTransaction();
        try {
            txn.begin();
            transactionalCache.contains("A");
        } finally {
            try {
                txn.rollback();
            } catch (Throwable ee) {
                ee.printStackTrace();
            }
        }
    }
    long end = System.nanoTime();

    // report
    System.out.println("Cache initialization performance test: \n" + "   count:       " + count + "\n"
            + "   transaction: " + (end - start) / ((long) count) + " ns\\count");
}

From source file:org.alfresco.repo.cache.CacheTest.java

/**
 * Starts off with a <tt>null</tt> in the backing cache and adds a value to the
 * transactional cache.  There should be no problem with this.
 *///from www .  j ava2  s  . c o m
public void testNullValue() throws Throwable {
    TransactionService transactionService = serviceRegistry.getTransactionService();
    UserTransaction txn = transactionService.getUserTransaction();

    txn.begin();

    TransactionalCache.putSharedCacheValue(backingCache, "A", null, null);
    transactionalCache.put("A", "AAA");

    try {
        txn.commit();
    } catch (Throwable e) {
        try {
            txn.rollback();
        } catch (Throwable ee) {
        }
        throw e;
    }
}

From source file:org.alfresco.repo.cache.CacheTest.java

/**
 * Add 50K objects into the transactional cache and checks that the first object added
 * has been discarded.//from  w ww .  ja v a 2 s .co  m
 */
public void testMaxSizeOverrun() throws Exception {
    TransactionService transactionService = serviceRegistry.getTransactionService();
    UserTransaction txn = transactionService.getUserTransaction();
    try {
        txn.begin();

        Object startValue = new Integer(-1);
        String startKey = startValue.toString();
        transactionalCache.put(startKey, startValue);

        assertEquals("The start value isn't correct", startValue, transactionalCache.get(startKey));

        for (int i = 0; i < 205000; i++) {
            Object value = Integer.valueOf(i);
            String key = value.toString();
            transactionalCache.put(key, value);
        }

        // Is the start value here?
        Object checkStartValue = transactionalCache.get(startKey);
        // Now, the cache should no longer contain the first value
        assertNull("The start value didn't drop out of the cache", checkStartValue);

        txn.commit();
    } finally {
        try {
            txn.rollback();
        } catch (Throwable ee) {
        }
    }
}

From source file:org.alfresco.repo.cache.CacheTest.java

/** Execute the callback and ensure that the backing cache is left with the expected value */
private void executeAndCheck(RetryingTransactionCallback<Object> callback, boolean readOnly, String key,
        Object expectedValue, boolean mustContainKey) throws Throwable {
    if (expectedValue != null && !mustContainKey) {
        throw new IllegalArgumentException("Why have a value when the key should not be there?");
    }/*from   w w w  .j  av  a2 s  .c o m*/

    TransactionService transactionService = serviceRegistry.getTransactionService();
    UserTransaction txn = transactionService.getUserTransaction(readOnly);
    try {
        txn.begin();
        callback.execute();
        txn.commit();
    } finally {
        try {
            txn.rollback();
        } catch (Throwable ee) {
        }
    }
    Object actualValue = TransactionalCache.getSharedCacheValue(backingCache, key, null);
    assertEquals("Backing cache value was not correct", expectedValue, actualValue);
    assertEquals("Backing cache contains(key): ", mustContainKey, backingCache.contains(key));

    // Clear the backing cache to ensure that subsequent tests don't run into existing data
    backingCache.clear();
}