[
https://issues.jboss.org/browse/WELD-1125?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12692908#comment-12692908
]
Marko Lukša commented on WELD-1125:
-----------------------------------
OK, I've researched this and it should NOT work.
According to the spec, since WeldInjectionStackOverflow (WISO) doesn't declare
a scope, its scope defaults to Dependent. Instances of beans that have a
dependent scope are never shared between multiple injection points. This
results in StackOverflowError, since Weld creates a new instance of WISO before
it invokes the producer method. When creating the new instance of WISO, Weld
must inject Service into the service field (of the new WISO). Thus it needs to
invoke the producer method again - which again leads to creating a new instance
of WISO (because WISO is dependent-scoped), and so on.
If you make WISO @ApplicationScoped, the test will pass.
> StackOverflowError: It is not possible to define producers in an arquillian
> unit test
> -------------------------------------------------------------------------------------
>
> Key: WELD-1125
> URL: https://issues.jboss.org/browse/WELD-1125
> Project: Weld
> Issue Type: Bug
> Components: Bootstrap and Metamodel API
> Affects Versions: 1.1.6.Final, 1.1.7.Final, 1.1.8.Final
> Environment: windows7, junit, arquillian 1.0.0.Final
> Reporter: Manuel Hartl
> Assignee: Marko Lukša
> Fix For: 1.1.5.Final
>
>
> When i try to run the following unit test, it gives me a stackOverflowError
> with weld 1.1.6 and 1.1.7 - but it worked with 1.1.5!
> the problem seems to be a recursive loop, while trying to initialize the unit
> test itself for using its producer.
> when you move the Producer to an static innerclass and add it to the
> shrinkwrap definition, this test works.
> package com.kobil.ssms.kernel.logic.licencing;
> import javax.enterprise.inject.Produces;
> import javax.inject.Inject;
> import org.jboss.arquillian.container.test.api.Deployment;
> import org.jboss.arquillian.junit.Arquillian;
> import org.jboss.shrinkwrap.api.ShrinkWrap;
> import org.jboss.shrinkwrap.api.asset.EmptyAsset;
> import org.jboss.shrinkwrap.api.spec.JavaArchive;
> import org.junit.Assert;
> import org.junit.Test;
> import org.junit.runner.RunWith;
> /**
> *
> * @author Manuel Hartl / FlexSecure GmbH
> *
> */
> @RunWith(Arquillian.class)
> public class WeldInjectionStackOverflow {
> @Deployment
> public static JavaArchive createTestArchive() {
> return ShrinkWrap.create(JavaArchive.class,
> "test.jar").addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
> }
> public static interface Service {
> public int dummy();
> };
> @Produces
> Service getSevice() throws LicenceException {
> return new Service() {
> @Override
> public int dummy() {
> return 0;
> }
> };
> }
> @Inject
> private Service service;
> @Test
> public void checkInjection() throws Exception {
> Assert.assertEquals(0, service.dummy());
> }
> }
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
_______________________________________________
weld-issues mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/weld-issues