Skip to content

Commit 05bb18f

Browse files
committed
Makes transaction provider produced with test scope
1 parent f0ed7b8 commit 05bb18f

13 files changed

+93
-150
lines changed

impl-base/src/main/java/org/jboss/arquillian/transaction/impl/client/ClientSideTransactionHandler.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@
2323
import org.jboss.arquillian.core.api.annotation.Inject;
2424
import org.jboss.arquillian.core.spi.context.ApplicationContext;
2525
import org.jboss.arquillian.test.spi.event.suite.TestEvent;
26+
import org.jboss.arquillian.transaction.impl.lifecycle.ModeChecker;
2627
import org.jboss.arquillian.transaction.impl.lifecycle.TransactionHandler;
2728

2829
public class ClientSideTransactionHandler extends TransactionHandler
2930
{
30-
3131
@Inject
3232
private Instance<Deployment> deploymentInstance;
3333

@@ -40,11 +40,7 @@ public class ClientSideTransactionHandler extends TransactionHandler
4040
@Override
4141
public boolean isTransactionSupported(TestEvent testEvent)
4242
{
43-
44-
boolean runAsClient = RunModeUtils.isRunAsClient(deploymentInstance.get(), testEvent.getTestClass().getJavaClass(), testEvent.getTestMethod());
45-
boolean isLocal = RunModeUtils.isLocalContainer(containerInstance.get());
46-
47-
return runAsClient || isLocal;
43+
return new ModeChecker(deploymentInstance.get(), containerInstance.get()).isClientMode(testEvent);
4844
}
4945

5046
}

impl-base/src/main/java/org/jboss/arquillian/transaction/impl/client/TransactionExtension.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919

2020
import org.jboss.arquillian.container.test.spi.client.deployment.AuxiliaryArchiveAppender;
2121
import org.jboss.arquillian.core.spi.LoadableExtension;
22+
import org.jboss.arquillian.transaction.impl.configuration.TransactionConfigurationProducer;
2223
import org.jboss.arquillian.transaction.impl.context.TransactionContextImpl;
24+
import org.jboss.arquillian.transaction.impl.lifecycle.TransactionProviderProducer;
2325

2426
/**
2527
* Registers the extension.
@@ -34,6 +36,7 @@ public void register(ExtensionBuilder builder)
3436
{
3537
builder.context(TransactionContextImpl.class);
3638
builder.observer(TransactionConfigurationProducer.class);
39+
builder.observer(TransactionProviderProducer.class);
3740
builder.observer(ClientSideTransactionHandler.class);
3841
builder.service(AuxiliaryArchiveAppender.class, TransactionArchiveAppender.class);
3942
}

impl-base/src/main/java/org/jboss/arquillian/transaction/impl/client/TransactionConfigurationProducer.java renamed to impl-base/src/main/java/org/jboss/arquillian/transaction/impl/configuration/TransactionConfigurationProducer.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
* limitations under the License.
1717
*/
1818

19-
package org.jboss.arquillian.transaction.impl.client;
19+
package org.jboss.arquillian.transaction.impl.configuration;
2020

2121
import org.jboss.arquillian.config.descriptor.api.ArquillianDescriptor;
2222
import org.jboss.arquillian.config.descriptor.api.ExtensionDef;
@@ -25,7 +25,6 @@
2525
import org.jboss.arquillian.core.api.annotation.Inject;
2626
import org.jboss.arquillian.core.api.annotation.Observes;
2727
import org.jboss.arquillian.transaction.api.annotation.TransactionMode;
28-
import org.jboss.arquillian.transaction.impl.configuration.TransactionConfiguration;
2928

3029
import java.util.Collections;
3130
import java.util.Map;

impl-base/src/main/java/org/jboss/arquillian/transaction/impl/container/TransactionRemoteExtension.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import org.jboss.arquillian.container.test.spi.RemoteLoadableExtension;
2121
import org.jboss.arquillian.transaction.impl.context.TransactionContextImpl;
22+
import org.jboss.arquillian.transaction.impl.lifecycle.TransactionProviderProducer;
2223

2324
/**
2425
* Registers the extension in the remote container.
@@ -37,5 +38,6 @@ public void register(ExtensionBuilder builder)
3738
builder.context(TransactionContextImpl.class);
3839
builder.observer(TransactionConfigurationRemoteProducer.class);
3940
builder.observer(InContainerTransactionHandler.class);
41+
builder.observer(TransactionProviderProducer.class);
4042
}
4143
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.jboss.arquillian.transaction.impl.lifecycle;
2+
3+
import org.jboss.arquillian.container.spi.Container;
4+
import org.jboss.arquillian.container.spi.client.deployment.Deployment;
5+
import org.jboss.arquillian.test.spi.event.suite.TestEvent;
6+
7+
public class ModeChecker {
8+
private final Deployment deployment;
9+
private final Container container;
10+
11+
public ModeChecker(Deployment deployment, Container container) {
12+
this.deployment = deployment;
13+
this.container = container;
14+
}
15+
16+
public boolean isClientMode(TestEvent testEvent) {
17+
boolean runAsClient = RunModeUtils.isRunAsClient(deployment, testEvent.getTestClass().getJavaClass(), testEvent.getTestMethod());
18+
boolean isLocal = RunModeUtils.isLocalContainer(container);
19+
return runAsClient || isLocal;
20+
}
21+
}

impl-base/src/main/java/org/jboss/arquillian/transaction/impl/client/RunModeUtils.java renamed to impl-base/src/main/java/org/jboss/arquillian/transaction/impl/lifecycle/RunModeUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* See the License for the specific language governing permissions and
1616
* limitations under the License.
1717
*/
18-
package org.jboss.arquillian.transaction.impl.client;
18+
package org.jboss.arquillian.transaction.impl.lifecycle;
1919

2020
import org.jboss.arquillian.container.spi.Container;
2121
import org.jboss.arquillian.container.spi.client.deployment.Deployment;

impl-base/src/main/java/org/jboss/arquillian/transaction/impl/lifecycle/TransactionHandler.java

Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ public abstract class TransactionHandler
7676
@Inject
7777
private Instance<TestResult> testResultInstance;
7878

79+
@Inject
80+
private Instance<TransactionProvider> transactionProviderInstance;
81+
7982
public abstract boolean isTransactionSupported(TestEvent testEvent);
8083

8184
public void startTransactionBeforeTest(@Observes(precedence = 10) Before beforeTest)
@@ -89,7 +92,7 @@ public void startTransactionBeforeTest(@Observes(precedence = 10) Before beforeT
8992

9093
lifecycleEvent.fire(new BeforeTransactionStarted());
9194

92-
getTransactionProvider().beginTransaction(new DefaultTransactionalTest(getTransactionManager(beforeTest)));
95+
transactionProviderInstance.get().beginTransaction(new DefaultTransactionalTest(getTransactionManager(beforeTest)));
9396

9497
lifecycleEvent.fire(new AfterTransactionStarted());
9598
}
@@ -117,7 +120,7 @@ private void endTransaction(After afterTest)
117120
{
118121
lifecycleEvent.fire(new BeforeTransactionEnded());
119122

120-
final TransactionProvider transactionProvider = getTransactionProvider();
123+
final TransactionProvider transactionProvider = transactionProviderInstance.get();
121124
final TransactionalTest transactionalTest = new DefaultTransactionalTest(getTransactionManager(afterTest));
122125

123126
if (rollbackRequired(afterTest))
@@ -266,28 +269,4 @@ private String obtainTranscationManagerFromConfiguration(String transactionManag
266269
return transactionManager;
267270
}
268271

269-
/**
270-
* Retrieves the {@link TransactionProvider} registered in current context.
271-
*
272-
* @return the transaction provider
273-
* @throws TransactionProviderNotFoundException
274-
* if no provider could be found or there are multiple providers registered.
275-
*/
276-
private TransactionProvider getTransactionProvider()
277-
{
278-
try
279-
{
280-
final TransactionProvider transactionProvider = serviceLoaderInstance.get().onlyOne(TransactionProvider.class);
281-
if (transactionProvider == null)
282-
{
283-
throw new TransactionProviderNotFoundException("Transaction provider for given test case has not been found.");
284-
}
285-
return transactionProvider;
286-
}
287-
catch (IllegalStateException e)
288-
{
289-
throw new TransactionProviderNotFoundException("More then one transaction provider has been specified.", e);
290-
}
291-
}
292-
293272
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package org.jboss.arquillian.transaction.impl.lifecycle;
2+
3+
import org.jboss.arquillian.container.spi.Container;
4+
import org.jboss.arquillian.container.spi.client.deployment.Deployment;
5+
import org.jboss.arquillian.core.api.Instance;
6+
import org.jboss.arquillian.core.api.InstanceProducer;
7+
import org.jboss.arquillian.core.api.annotation.Inject;
8+
import org.jboss.arquillian.core.api.annotation.Observes;
9+
import org.jboss.arquillian.core.spi.ServiceLoader;
10+
import org.jboss.arquillian.test.spi.annotation.TestScoped;
11+
import org.jboss.arquillian.test.spi.event.suite.Before;
12+
import org.jboss.arquillian.test.spi.event.suite.TestEvent;
13+
import org.jboss.arquillian.transaction.spi.provider.TransactionProvider;
14+
15+
public class TransactionProviderProducer {
16+
17+
@Inject
18+
private Instance<ServiceLoader> serviceLoaderInstance;
19+
20+
@Inject
21+
private Instance<Deployment> deploymentInstance;
22+
23+
@Inject
24+
private Instance<Container> containerInstance;
25+
26+
@Inject
27+
@TestScoped
28+
private InstanceProducer<TransactionProvider> transactionProviderProducer;
29+
30+
/**
31+
* Retrieves the {@link TransactionProvider} registered in current context.
32+
*
33+
* @return the transaction provider
34+
* @throws TransactionProviderNotFoundException if no provider could be found or there are multiple providers registered.
35+
*/
36+
37+
public void registerTransactionProvider(@Observes(precedence = 100) Before beforeTest) {
38+
if (!isTransactionSupported(beforeTest)) {
39+
return;
40+
}
41+
try {
42+
final TransactionProvider transactionProvider = serviceLoaderInstance.get().onlyOne(TransactionProvider.class);
43+
if (transactionProvider == null) {
44+
throw new TransactionProviderNotFoundException("Transaction provider for given test case has not been found.");
45+
}
46+
transactionProviderProducer.set(transactionProvider);
47+
} catch (IllegalStateException e) {
48+
throw new TransactionProviderNotFoundException("More then one transaction provider has been specified.", e);
49+
}
50+
}
51+
52+
private boolean isTransactionSupported(TestEvent testEvent) {
53+
return new ModeChecker(deploymentInstance.get(), containerInstance.get()).isClientMode(testEvent);
54+
}
55+
}

impl-base/src/test/java/org/jboss/arquillian/transaction/impl/client/TransactionConfigurationProducerTestCase.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.jboss.arquillian.test.test.AbstractTestTestBase;
2626
import org.jboss.arquillian.transaction.api.annotation.TransactionMode;
2727
import org.jboss.arquillian.transaction.impl.configuration.TransactionConfiguration;
28+
import org.jboss.arquillian.transaction.impl.configuration.TransactionConfigurationProducer;
2829
import org.jboss.shrinkwrap.descriptor.api.Descriptors;
2930
import org.junit.Before;
3031
import org.junit.Test;

impl-base/src/test/java/org/jboss/arquillian/transaction/impl/client/TransactionExtensionTestCase.java

Lines changed: 0 additions & 60 deletions
This file was deleted.

0 commit comments

Comments
 (0)