@Override public void doTest() throws Throwable { ThreadMXBean tbean; tbean = ManagementFactory.getThreadMXBean(); int nonDaemonThreadCountA = tbean.getThreadCount() - tbean.getDaemonThreadCount(); int daemonThreadCountA = tbean.getDaemonThreadCount(); long[] listA = tbean.getAllThreadIds(); for (int loopNumber = 0; loopNumber < 4; loopNumber++) { cacheManager = new CacheManager( DaemonThreadsWriteBehindTestClient.class.getResourceAsStream("/ehcache-config.xml")); int daemonThreadCountB = tbean.getDaemonThreadCount(); Assert.assertTrue(daemonThreadCountA < daemonThreadCountB); Cache cache = cacheManager.getCache("test"); cache.registerCacheWriter(new WriteBehindCacheWriter(this)); Assert.assertNotNull(cache.getWriterManager()); Assert.assertTrue(cache.getWriterManager() instanceof WriteBehindManager); for (int i = 0; i < 10; i++) { cache.putWithWriter(new Element(i, i)); } while (getWriteCount() < 10) { Thread.sleep(200); } resetWriteCount(); cacheManager.shutdown(); System.out.println("done with iteration " + loopNumber); } TimeUnit.MINUTES.sleep(1L); long[] listC = tbean.getAllThreadIds(); int daemonThreadCountC = tbean.getDaemonThreadCount(); int nonDaemonThreadCountC = tbean.getThreadCount() - tbean.getDaemonThreadCount(); List<Long> listIntA = new ArrayList<Long>(); for (long listAItrator : listA) { listIntA.add(new Long(listAItrator)); } List<Long> listIntC = new ArrayList<Long>(); for (long listAItrator : listC) { listIntC.add(new Long(listAItrator)); } listIntC.removeAll(listIntA); Set<String> knownThreads = getKnownThreads(); int skipThreadCount = 0; StringBuffer threadsInfo = new StringBuffer(); System.out.println( "\n\n" + listIntC.size() + " Start Printing Stack Trace\n--------------------"); for (int i = 0; i < listIntC.size(); i++) { ThreadInfo tinfo = tbean.getThreadInfo(listIntC.get(i)); if (knownThreads.contains(tinfo.getThreadName().trim())) { ++skipThreadCount; continue; } String info = "Thread name: " + tinfo.getThreadName() + " | " + tinfo.getThreadId(); threadsInfo.append(info); for (StackTraceElement e : tinfo.getStackTrace()) { threadsInfo.append(e + "\n\n"); } } System.out.println(threadsInfo + "\n\n-----------------------\n\n"); Assert.assertEquals( threadsInfo.toString(), daemonThreadCountA, daemonThreadCountC - skipThreadCount); Assert.assertEquals(nonDaemonThreadCountA, nonDaemonThreadCountC); }
public CacheWriterManager getWriterManager() { return cache.getWriterManager(); }