concurrentcheckinmixedtransactiontest.java
来自「jsr170接口的java实现。是个apache的开源项目。」· Java 代码 · 共 96 行
JAVA
96 行
/* * 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.jackrabbit.core;import javax.jcr.RepositoryException;import javax.jcr.Session;import javax.jcr.Node;import javax.transaction.NotSupportedException;import javax.transaction.SystemException;import javax.transaction.HeuristicMixedException;import javax.transaction.HeuristicRollbackException;import javax.transaction.RollbackException;/** * <code>ConcurrentCheckinMixedTransactionTest</code> performs concurrent * version operations with only some threads using XATransactions. */public class ConcurrentCheckinMixedTransactionTest extends AbstractConcurrencyTest { private static final int NUM_THREADS = 10; private static final int RUN_NUM_SECONDS = 20; public void testCheckInOut() throws RepositoryException { final long end = System.currentTimeMillis() + RUN_NUM_SECONDS * 1000; // tasks with even ids run within transactions final int[] taskId = new int[1]; Thread t = new Thread(new Runnable() { public void run() { try { runTask(new Task() { public void execute(Session session, Node test) throws RepositoryException { int id; synchronized (ConcurrentCheckinMixedTransactionTest.this) { id = taskId[0]++; } int i = 0; while (end > System.currentTimeMillis()) { UserTransactionImpl uTx = null; try { if (id % 2 == 0) { uTx = new UserTransactionImpl(session); uTx.begin(); } Node n = test.addNode("node" + i++); n.addMixin(mixVersionable); session.save(); n.checkout(); n.checkin(); if (uTx != null) { uTx.commit(); } } catch (NotSupportedException e) { throw new RepositoryException(e); } catch (SystemException e) { throw new RepositoryException(e); } catch (HeuristicMixedException e) { throw new RepositoryException(e); } catch (HeuristicRollbackException e) { throw new RepositoryException(e); } catch (RollbackException e) { throw new RepositoryException(e); } } } }, NUM_THREADS); } catch (RepositoryException e) { e.printStackTrace(); } } }); t.start(); try { t.join(); } catch (InterruptedException e) { // ignore } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?