cachetest.java

来自「好东西,hibernate-3.2.0,他是一开元的树杖hibernate-3.」· Java 代码 · 共 145 行

JAVA
145
字号
//$Id: CacheTest.java 8894 2005-12-21 13:22:50Z steveebersole $
package org.hibernate.test.legacy;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

import org.hibernate.cache.Cache;
import org.hibernate.cache.CacheConcurrencyStrategy;
import org.hibernate.cache.CacheProvider;
import org.hibernate.cache.ReadWriteCache;
import org.hibernate.cache.CacheConcurrencyStrategy.SoftLock;

public class CacheTest extends TestCase {

	public CacheTest(String arg0) {
		super(arg0);
	}

	public static Test suite() {
		return new TestSuite(CacheTest.class);
	}

	public void testCaches() throws Exception {
		//doTestCache( new CoherenceCacheProvider() );
// steve - commented this out becuase it is breaking the build after the package rename
		//doTestCache( new Provider() );
	}

	public void doTestCache(CacheProvider cacheProvider) throws Exception {

		Cache cache = cacheProvider.buildCache( String.class.getName(), System.getProperties() );

		long longBefore = cache.nextTimestamp();

		Thread.sleep(15);

		long before = cache.nextTimestamp();

		Thread.sleep(15);

		//cache.setTimeout(1000);
		CacheConcurrencyStrategy ccs = new ReadWriteCache();
		ccs.setCache(cache);

		// cache something

		assertTrue( ccs.put("foo", "foo", before, null, null, false) );

		Thread.sleep(15);

		long after = cache.nextTimestamp();

		assertTrue( ccs.get("foo", longBefore)==null );
		assertTrue( ccs.get("foo", after).equals("foo") );

		assertTrue( !ccs.put("foo", "foo", before, null, null, false) );

		// update it:

		SoftLock lock = ccs.lock("foo", null);

		assertTrue( ccs.get("foo", after)==null );
		assertTrue( ccs.get("foo", longBefore)==null );

		assertTrue( !ccs.put("foo", "foo", before, null, null, false) );

		Thread.sleep(15);

		long whileLocked = cache.nextTimestamp();

		assertTrue( !ccs.put("foo", "foo", whileLocked, null, null, false) );

		Thread.sleep(15);

		ccs.release("foo", lock);

		assertTrue( ccs.get("foo", after)==null );
		assertTrue( ccs.get("foo", longBefore)==null );

		assertTrue( !ccs.put("foo", "bar", whileLocked, null, null, false) );
		assertTrue( !ccs.put("foo", "bar", after, null, null, false) );

		Thread.sleep(15);

		long longAfter = cache.nextTimestamp();

		assertTrue( ccs.put("foo", "baz", longAfter, null, null, false) );

		assertTrue( ccs.get("foo", after)==null );
		assertTrue( ccs.get("foo", whileLocked)==null );

		Thread.sleep(15);

		long longLongAfter = cache.nextTimestamp();

		assertTrue( ccs.get("foo", longLongAfter).equals("baz") );

		// update it again, with multiple locks:

		SoftLock lock1 = ccs.lock("foo", null);
		SoftLock lock2 = ccs.lock("foo", null);

		assertTrue( ccs.get("foo", longLongAfter)==null );

		Thread.sleep(15);

		whileLocked = cache.nextTimestamp();

		assertTrue( !ccs.put("foo", "foo", whileLocked, null, null, false) );

		Thread.sleep(15);

		ccs.release("foo", lock2);

		Thread.sleep(15);

		long betweenReleases = cache.nextTimestamp();

		assertTrue( !ccs.put("foo", "bar", betweenReleases, null, null, false) );
		assertTrue( ccs.get("foo", betweenReleases)==null );

		Thread.sleep(15);

		ccs.release("foo", lock1);

		assertTrue( !ccs.put("foo", "bar", whileLocked, null, null, false) );

		Thread.sleep(15);

		longAfter = cache.nextTimestamp();

		assertTrue( ccs.put("foo", "baz", longAfter, null, null, false) );
		assertTrue( ccs.get("foo", whileLocked)==null );

		Thread.sleep(15);

		longLongAfter = cache.nextTimestamp();

		assertTrue( ccs.get("foo", longLongAfter).equals("baz") );

	}

}

⌨️ 快捷键说明

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