From 5ea7ba879115ed6e1a58486144a063cb419cc598 Mon Sep 17 00:00:00 2001 From: "Lincoln Baxter, III" Date: Mon, 5 May 2014 16:59:04 -0400 Subject: [PATCH] Implement Thread.interrupt() support. --- .../mock/MockSimpleCountService.java | 24 +++++ .../ClassLoaderAdapterCallbackTest.java | 2 +- .../ClassLoaderAdapterCollisionsTest.java | 2 +- ...derAdapterDuplicateMethodCallbackTest.java | 2 +- ...ClassLoaderAdapterEnumTranslationTest.java | 2 +- .../ClassLoaderAdapterExceptionProxyTest.java | 2 +- .../ClassLoaderAdapterJavaIOSubclassTest.java | 2 +- .../ClassLoaderAdapterJavaIOTest.java | 2 +- .../ClassLoaderAdapterPassthroughTest.java | 2 +- .../ClassLoaderAdapterProxiedTest.java | 2 +- .../ClassLoaderAdapterResultProxyTest.java | 2 +- .../ClassLoaderListParameterProxiedTest.java | 2 +- .../ClassLoaderNestedInterfaceProxyTest.java | 2 +- .../ClassLoaderParameterUnwrappedTest.java | 2 +- .../SidewaysProxyAnonymousCollisionTest.java | 2 +- ...ClassLoaderNullClassLoaderAdapterTest.java | 2 +- .../CLACProxiedCollectionsTest.java | 2 +- .../collections/CLACProxiedIterableTest.java | 2 +- ...oaderAdapterWhitelistLoaderLookupTest.java | 2 +- ...AdapterWhitelistLoaderPassthroughTest.java | 2 +- .../classloader/whitelist/MockContext.java | 2 +- .../whitelist/MockContextConsumer.java | 2 +- .../whitelist/MockContextPayload.java | 2 +- .../whitelist/MockContextPayloadImpl.java | 2 +- .../thread/ThreadProxyInterruptTest.java | 88 +++++++++++++++++++ .../proxy/ClassLoaderAdapterCallback.java | 5 ++ .../furnace/proxy/ClassLoaderInterceptor.java | 6 ++ .../services/ReflectionExportedInstance.java | 11 ++- 28 files changed, 154 insertions(+), 26 deletions(-) create mode 100644 proxy-tests/src/main/java/org/jboss/forge/classloader/mock/MockSimpleCountService.java rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/ClassLoaderAdapterCallbackTest.java (98%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/ClassLoaderAdapterCollisionsTest.java (99%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/ClassLoaderAdapterDuplicateMethodCallbackTest.java (95%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/ClassLoaderAdapterEnumTranslationTest.java (98%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/ClassLoaderAdapterExceptionProxyTest.java (98%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/ClassLoaderAdapterJavaIOSubclassTest.java (98%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/ClassLoaderAdapterJavaIOTest.java (98%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/ClassLoaderAdapterPassthroughTest.java (98%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/ClassLoaderAdapterProxiedTest.java (99%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/ClassLoaderAdapterResultProxyTest.java (99%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/ClassLoaderListParameterProxiedTest.java (98%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/ClassLoaderNestedInterfaceProxyTest.java (98%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/ClassLoaderParameterUnwrappedTest.java (99%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/SidewaysProxyAnonymousCollisionTest.java (98%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/SystemClassLoaderNullClassLoaderAdapterTest.java (97%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/collections/CLACProxiedCollectionsTest.java (97%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/collections/CLACProxiedIterableTest.java (98%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/whitelist/ClassLoaderAdapterWhitelistLoaderLookupTest.java (98%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/whitelist/ClassLoaderAdapterWhitelistLoaderPassthroughTest.java (98%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/whitelist/MockContext.java (89%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/whitelist/MockContextConsumer.java (93%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/whitelist/MockContextPayload.java (83%) rename proxy-tests/src/test/java/org/jboss/forge/{ => furnace/proxy}/classloader/whitelist/MockContextPayloadImpl.java (84%) create mode 100644 proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/thread/ThreadProxyInterruptTest.java diff --git a/proxy-tests/src/main/java/org/jboss/forge/classloader/mock/MockSimpleCountService.java b/proxy-tests/src/main/java/org/jboss/forge/classloader/mock/MockSimpleCountService.java new file mode 100644 index 00000000..71d6ee9d --- /dev/null +++ b/proxy-tests/src/main/java/org/jboss/forge/classloader/mock/MockSimpleCountService.java @@ -0,0 +1,24 @@ +/* + * Copyright 2014 Red Hat, Inc. and/or its affiliates. + * + * Licensed under the Eclipse Public License version 1.0, available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.jboss.forge.classloader.mock; + +/** + * @author Lincoln Baxter, III + * + */ +public class MockSimpleCountService +{ + private int count = 0; + + /** + * Return's the number of times this services has been previously called. + */ + public int execute() + { + return count++; + } +} diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterCallbackTest.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterCallbackTest.java similarity index 98% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterCallbackTest.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterCallbackTest.java index db611457..411c8e52 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterCallbackTest.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterCallbackTest.java @@ -4,7 +4,7 @@ * Licensed under the Eclipse Public License version 1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader; +package org.jboss.forge.furnace.proxy.classloader; import java.lang.reflect.Method; diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterCollisionsTest.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterCollisionsTest.java similarity index 99% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterCollisionsTest.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterCollisionsTest.java index 156bf070..c2ad4d33 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterCollisionsTest.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterCollisionsTest.java @@ -5,7 +5,7 @@ * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader; +package org.jboss.forge.furnace.proxy.classloader; import java.util.ArrayList; import java.util.List; diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterDuplicateMethodCallbackTest.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterDuplicateMethodCallbackTest.java similarity index 95% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterDuplicateMethodCallbackTest.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterDuplicateMethodCallbackTest.java index 35820ba6..514bf88f 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterDuplicateMethodCallbackTest.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterDuplicateMethodCallbackTest.java @@ -4,7 +4,7 @@ * Licensed under the Eclipse Public License version 1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader; +package org.jboss.forge.furnace.proxy.classloader; import org.jboss.forge.classloader.mock.MockParentInterface1; import org.jboss.forge.classloader.mock.MockService2; diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterEnumTranslationTest.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterEnumTranslationTest.java similarity index 98% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterEnumTranslationTest.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterEnumTranslationTest.java index 5d2557c7..c1787125 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterEnumTranslationTest.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterEnumTranslationTest.java @@ -5,7 +5,7 @@ * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader; +package org.jboss.forge.furnace.proxy.classloader; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterExceptionProxyTest.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterExceptionProxyTest.java similarity index 98% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterExceptionProxyTest.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterExceptionProxyTest.java index fdde1f48..724d2b33 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterExceptionProxyTest.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterExceptionProxyTest.java @@ -5,7 +5,7 @@ * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader; +package org.jboss.forge.furnace.proxy.classloader; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterJavaIOSubclassTest.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterJavaIOSubclassTest.java similarity index 98% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterJavaIOSubclassTest.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterJavaIOSubclassTest.java index bf20a146..c37725fe 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterJavaIOSubclassTest.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterJavaIOSubclassTest.java @@ -5,7 +5,7 @@ * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader; +package org.jboss.forge.furnace.proxy.classloader; import java.io.File; import java.io.PrintStream; diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterJavaIOTest.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterJavaIOTest.java similarity index 98% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterJavaIOTest.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterJavaIOTest.java index 70e33465..90555664 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterJavaIOTest.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterJavaIOTest.java @@ -5,7 +5,7 @@ * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader; +package org.jboss.forge.furnace.proxy.classloader; import java.io.File; diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterPassthroughTest.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterPassthroughTest.java similarity index 98% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterPassthroughTest.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterPassthroughTest.java index bb46f728..06cf5fba 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterPassthroughTest.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterPassthroughTest.java @@ -5,7 +5,7 @@ * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader; +package org.jboss.forge.furnace.proxy.classloader; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterProxiedTest.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterProxiedTest.java similarity index 99% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterProxiedTest.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterProxiedTest.java index 45683263..b1b9eb62 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterProxiedTest.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterProxiedTest.java @@ -4,7 +4,7 @@ * Licensed under the Eclipse Public License version 1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader; +package org.jboss.forge.furnace.proxy.classloader; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.LazyLoader; diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterResultProxyTest.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterResultProxyTest.java similarity index 99% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterResultProxyTest.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterResultProxyTest.java index 884c1538..893ab682 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderAdapterResultProxyTest.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderAdapterResultProxyTest.java @@ -5,7 +5,7 @@ * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader; +package org.jboss.forge.furnace.proxy.classloader; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderListParameterProxiedTest.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderListParameterProxiedTest.java similarity index 98% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderListParameterProxiedTest.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderListParameterProxiedTest.java index 9271eeaa..dd71aa20 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderListParameterProxiedTest.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderListParameterProxiedTest.java @@ -5,7 +5,7 @@ * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader; +package org.jboss.forge.furnace.proxy.classloader; import java.util.ArrayList; import java.util.List; diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderNestedInterfaceProxyTest.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderNestedInterfaceProxyTest.java similarity index 98% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderNestedInterfaceProxyTest.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderNestedInterfaceProxyTest.java index e259cf46..cadd4f20 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderNestedInterfaceProxyTest.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderNestedInterfaceProxyTest.java @@ -5,7 +5,7 @@ * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader; +package org.jboss.forge.furnace.proxy.classloader; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderParameterUnwrappedTest.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderParameterUnwrappedTest.java similarity index 99% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderParameterUnwrappedTest.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderParameterUnwrappedTest.java index 0da0d5ab..a039e7fd 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/ClassLoaderParameterUnwrappedTest.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/ClassLoaderParameterUnwrappedTest.java @@ -5,7 +5,7 @@ * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader; +package org.jboss.forge.furnace.proxy.classloader; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/SidewaysProxyAnonymousCollisionTest.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/SidewaysProxyAnonymousCollisionTest.java similarity index 98% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/SidewaysProxyAnonymousCollisionTest.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/SidewaysProxyAnonymousCollisionTest.java index 9b3df8ea..5296c5bb 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/SidewaysProxyAnonymousCollisionTest.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/SidewaysProxyAnonymousCollisionTest.java @@ -5,7 +5,7 @@ * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader; +package org.jboss.forge.furnace.proxy.classloader; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/SystemClassLoaderNullClassLoaderAdapterTest.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/SystemClassLoaderNullClassLoaderAdapterTest.java similarity index 97% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/SystemClassLoaderNullClassLoaderAdapterTest.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/SystemClassLoaderNullClassLoaderAdapterTest.java index 30d424bf..23a7c957 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/SystemClassLoaderNullClassLoaderAdapterTest.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/SystemClassLoaderNullClassLoaderAdapterTest.java @@ -5,7 +5,7 @@ * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader; +package org.jboss.forge.furnace.proxy.classloader; import java.util.List; diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/collections/CLACProxiedCollectionsTest.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/collections/CLACProxiedCollectionsTest.java similarity index 97% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/collections/CLACProxiedCollectionsTest.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/collections/CLACProxiedCollectionsTest.java index 3044570c..43867a56 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/collections/CLACProxiedCollectionsTest.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/collections/CLACProxiedCollectionsTest.java @@ -5,7 +5,7 @@ * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader.collections; +package org.jboss.forge.furnace.proxy.classloader.collections; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/collections/CLACProxiedIterableTest.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/collections/CLACProxiedIterableTest.java similarity index 98% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/collections/CLACProxiedIterableTest.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/collections/CLACProxiedIterableTest.java index 8fd0d6d8..bb7c7330 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/collections/CLACProxiedIterableTest.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/collections/CLACProxiedIterableTest.java @@ -5,7 +5,7 @@ * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader.collections; +package org.jboss.forge.furnace.proxy.classloader.collections; import java.util.Iterator; diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/whitelist/ClassLoaderAdapterWhitelistLoaderLookupTest.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/whitelist/ClassLoaderAdapterWhitelistLoaderLookupTest.java similarity index 98% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/whitelist/ClassLoaderAdapterWhitelistLoaderLookupTest.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/whitelist/ClassLoaderAdapterWhitelistLoaderLookupTest.java index 82be618a..9df2309b 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/whitelist/ClassLoaderAdapterWhitelistLoaderLookupTest.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/whitelist/ClassLoaderAdapterWhitelistLoaderLookupTest.java @@ -5,7 +5,7 @@ * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader.whitelist; +package org.jboss.forge.furnace.proxy.classloader.whitelist; import java.util.Arrays; import java.util.HashSet; diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/whitelist/ClassLoaderAdapterWhitelistLoaderPassthroughTest.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/whitelist/ClassLoaderAdapterWhitelistLoaderPassthroughTest.java similarity index 98% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/whitelist/ClassLoaderAdapterWhitelistLoaderPassthroughTest.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/whitelist/ClassLoaderAdapterWhitelistLoaderPassthroughTest.java index 0fc11c3a..44208220 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/whitelist/ClassLoaderAdapterWhitelistLoaderPassthroughTest.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/whitelist/ClassLoaderAdapterWhitelistLoaderPassthroughTest.java @@ -5,7 +5,7 @@ * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader.whitelist; +package org.jboss.forge.furnace.proxy.classloader.whitelist; import java.util.Arrays; import java.util.HashSet; diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/whitelist/MockContext.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/whitelist/MockContext.java similarity index 89% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/whitelist/MockContext.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/whitelist/MockContext.java index fe2e3e21..04dbde71 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/whitelist/MockContext.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/whitelist/MockContext.java @@ -4,7 +4,7 @@ * Licensed under the Eclipse Public License version 1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader.whitelist; +package org.jboss.forge.furnace.proxy.classloader.whitelist; import java.util.HashMap; import java.util.Map; diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/whitelist/MockContextConsumer.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/whitelist/MockContextConsumer.java similarity index 93% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/whitelist/MockContextConsumer.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/whitelist/MockContextConsumer.java index 1ff41900..8eb6ad3d 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/whitelist/MockContextConsumer.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/whitelist/MockContextConsumer.java @@ -4,7 +4,7 @@ * Licensed under the Eclipse Public License version 1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader.whitelist; +package org.jboss.forge.furnace.proxy.classloader.whitelist; import org.jboss.forge.furnace.proxy.Proxies; diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/whitelist/MockContextPayload.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/whitelist/MockContextPayload.java similarity index 83% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/whitelist/MockContextPayload.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/whitelist/MockContextPayload.java index 8d7a4a6d..d7eb3fe2 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/whitelist/MockContextPayload.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/whitelist/MockContextPayload.java @@ -4,7 +4,7 @@ * Licensed under the Eclipse Public License version 1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader.whitelist; +package org.jboss.forge.furnace.proxy.classloader.whitelist; /** * @author Lincoln Baxter, III diff --git a/proxy-tests/src/test/java/org/jboss/forge/classloader/whitelist/MockContextPayloadImpl.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/whitelist/MockContextPayloadImpl.java similarity index 84% rename from proxy-tests/src/test/java/org/jboss/forge/classloader/whitelist/MockContextPayloadImpl.java rename to proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/whitelist/MockContextPayloadImpl.java index 96f4a02d..ff061c3d 100644 --- a/proxy-tests/src/test/java/org/jboss/forge/classloader/whitelist/MockContextPayloadImpl.java +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/classloader/whitelist/MockContextPayloadImpl.java @@ -4,7 +4,7 @@ * Licensed under the Eclipse Public License version 1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.jboss.forge.classloader.whitelist; +package org.jboss.forge.furnace.proxy.classloader.whitelist; /** * @author Lincoln Baxter, III diff --git a/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/thread/ThreadProxyInterruptTest.java b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/thread/ThreadProxyInterruptTest.java new file mode 100644 index 00000000..ca940013 --- /dev/null +++ b/proxy-tests/src/test/java/org/jboss/forge/furnace/proxy/thread/ThreadProxyInterruptTest.java @@ -0,0 +1,88 @@ +/* + * Copyright 2012 Red Hat, Inc. and/or its affiliates. + * + * Licensed under the Eclipse Public License version 1.0, available at + * http://www.eclipse.org/legal/epl-v10.html + */ + +package org.jboss.forge.furnace.proxy.thread; + +import java.util.concurrent.atomic.AtomicReference; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.forge.arquillian.archive.ForgeArchive; +import org.jboss.forge.arquillian.services.LocalServices; +import org.jboss.forge.classloader.mock.MockSimpleCountService; +import org.jboss.forge.furnace.addons.AddonRegistry; +import org.jboss.forge.furnace.exception.ContainerException; +import org.jboss.forge.furnace.repositories.AddonDependencyEntry; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(Arquillian.class) +public class ThreadProxyInterruptTest +{ + @Deployment(order = 1) + public static ForgeArchive getDeployment() + { + ForgeArchive archive = ShrinkWrap.create(ForgeArchive.class) + .addAsLocalServices(ThreadProxyInterruptTest.class) + .addAsAddonDependencies(AddonDependencyEntry.create("dep")); + + return archive; + } + + @Deployment(name = "dep,1", testable = false, order = 0) + public static ForgeArchive getDeploymentDep1() + { + ForgeArchive archive = ShrinkWrap.create(ForgeArchive.class) + .addClasses(MockSimpleCountService.class) + .addAsLocalServices(MockSimpleCountService.class); + + return archive; + } + + @Test + public void testServiceProxiesCanBeInterrupted() throws Exception + { + AddonRegistry registry = LocalServices.getFurnace(getClass().getClassLoader()) + .getAddonRegistry(); + + final MockSimpleCountService service = registry.getServices(MockSimpleCountService.class).get(); + final AtomicReference exception = new AtomicReference<>(); + Thread t = new Thread(new Runnable() + { + @Override + public void run() + { + try + { + while (true) + { + service.execute(); + } + } + catch (ContainerException e) + { + exception.set(e); + } + + if (!Thread.currentThread().isInterrupted()) + throw new RuntimeException("Should have been interrupted at this point."); + } + }); + + Assert.assertNull(exception.get()); + + t.start(); + Thread.sleep(250); + t.interrupt(); + Thread.sleep(250); + + Assert.assertTrue(service.execute() > 0); + Assert.assertNotNull(exception.get()); + } +} diff --git a/proxy/src/main/java/org/jboss/forge/furnace/proxy/ClassLoaderAdapterCallback.java b/proxy/src/main/java/org/jboss/forge/furnace/proxy/ClassLoaderAdapterCallback.java index 18cedbe3..72b29231 100644 --- a/proxy/src/main/java/org/jboss/forge/furnace/proxy/ClassLoaderAdapterCallback.java +++ b/proxy/src/main/java/org/jboss/forge/furnace/proxy/ClassLoaderAdapterCallback.java @@ -68,6 +68,11 @@ public ClassLoaderAdapterCallback(Callable> whitelist, ClassLoa public Object invoke(final Object obj, final Method thisMethod, final Method proceed, final Object[] args) throws Throwable { + if(Thread.currentThread().isInterrupted()) + { + throw new ContainerException("Thread.interrupt() requested."); + } + return ClassLoaders.executeIn(delegateLoader, new Callable() { @Override diff --git a/proxy/src/main/java/org/jboss/forge/furnace/proxy/ClassLoaderInterceptor.java b/proxy/src/main/java/org/jboss/forge/furnace/proxy/ClassLoaderInterceptor.java index 348bb524..0aa08bcf 100644 --- a/proxy/src/main/java/org/jboss/forge/furnace/proxy/ClassLoaderInterceptor.java +++ b/proxy/src/main/java/org/jboss/forge/furnace/proxy/ClassLoaderInterceptor.java @@ -10,6 +10,7 @@ import java.lang.reflect.Method; import java.util.concurrent.Callable; +import org.jboss.forge.furnace.exception.ContainerException; import org.jboss.forge.furnace.util.ClassLoaders; /** @@ -32,6 +33,11 @@ public ClassLoaderInterceptor(ClassLoader loader, Object delegate) public Object invoke(final Object self, final Method thisMethod, final Method proceed, final Object[] args) throws Throwable { + if (Thread.currentThread().isInterrupted()) + { + throw new ContainerException("Thread.interrupt() requested."); + } + Callable task = new Callable() { @Override diff --git a/test-harness/arquillian/core/src/main/java/org/jboss/forge/arquillian/services/ReflectionExportedInstance.java b/test-harness/arquillian/core/src/main/java/org/jboss/forge/arquillian/services/ReflectionExportedInstance.java index d7b5d5a9..6981ef05 100644 --- a/test-harness/arquillian/core/src/main/java/org/jboss/forge/arquillian/services/ReflectionExportedInstance.java +++ b/test-harness/arquillian/core/src/main/java/org/jboss/forge/arquillian/services/ReflectionExportedInstance.java @@ -8,6 +8,8 @@ import org.jboss.forge.furnace.addons.Addon; import org.jboss.forge.furnace.exception.ContainerException; +import org.jboss.forge.furnace.proxy.ClassLoaderInterceptor; +import org.jboss.forge.furnace.proxy.Proxies; import org.jboss.forge.furnace.spi.ExportedInstance; /** @@ -16,8 +18,8 @@ */ public class ReflectionExportedInstance implements ExportedInstance { - private Class type; - private Addon addon; + private final Class type; + private final Addon addon; public ReflectionExportedInstance(Addon addon, Class clazz) { @@ -30,7 +32,10 @@ public T get() { try { - return type.newInstance(); + T delegate = type.newInstance(); + delegate = Proxies.enhance(addon.getClassLoader(), delegate, new ClassLoaderInterceptor( + addon.getClassLoader(), delegate)); + return delegate; } catch (Exception e) {