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 + -
显示快捷键?