To start the FacesContext I added myfaces-test22 dependecy and changed EjbContainerTest to extend AbstractViewControllerTestCase.
With *@javax.faces.bean.ManagedBean + @javax.faces.bean.ViewScoped* it works, but with *@javax.inject.Named + @javax.faces.view.ViewScoped* I'm getting a *java.lang.ClassCastException: javax.faces.component.UIViewRoot$ViewMap cannot be cast to org.apache.myfaces.view.ViewScopeProxyMap* Any ideas? Thanks *Stacktrace:* FAILED: gerarRelatorio on EjbContainerTest(br.com.tecnico.page.teleSuporte.RelatoriosSacwebControllerTest) java.lang.ClassCastException: javax.faces.component.UIViewRoot$ViewMap cannot be cast to org.apache.myfaces.view.ViewScopeProxyMap at org.apache.myfaces.cdi.view.ViewScopeContextImpl.getCurrentViewScopeId(ViewScopeContextImpl.java:81) at org.apache.myfaces.cdi.view.ViewScopeContextImpl.getContextualStorage(ViewScopeContextImpl.java:98) at org.apache.myfaces.cdi.view.ViewScopeContextImpl.get(ViewScopeContextImpl.java:156) at org.apache.webbeans.context.CustomPassivatingContextImpl.get(CustomPassivatingContextImpl.java:46) at org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.getContextualInstance(NormalScopedBeanInterceptorHandler.java:100) at org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.get(NormalScopedBeanInterceptorHandler.java:70) at br.com.tecnico.page.teleSuporte.RelatoriosSacwebController$$OwbNormalScopeProxy0.setFiltro(br/com/spdata/tecnico/page/teleSuporte/RelatoriosSacwebController.java) at br.com.tecnico.page.teleSuporte.RelatoriosSacwebControllerTest.gerarRelatorio(RelatoriosSacwebControllerTest.java:27) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85) at org.testng.internal.Invoker.invokeMethod(Invoker.java:648) at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:834) at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1142) at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:124) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108) at org.testng.TestRunner.privateRun(TestRunner.java:771) at org.testng.TestRunner.run(TestRunner.java:621) at org.testng.SuiteRunner.runTest(SuiteRunner.java:357) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:352) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:310) at org.testng.SuiteRunner.run(SuiteRunner.java:259) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1176) at org.testng.TestNG.runSuitesLocally(TestNG.java:1101) at org.testng.TestNG.run(TestNG.java:1009) at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111) at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204) at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175) 2015-12-05 18:58 GMT-02:00 Romain Manni-Bucau <[email protected]>: > Isnt it an "AbstractContext" so you can active getting it from bm? > Le 5 déc. 2015 20:05, "Mark Struberg" <[email protected]> a écrit : > > > ViewScope is _not_ part of the CDI spec. Thus ContextsService wont help > > you here. This is only for OWB internal Contexts. > > > > You need to use the ‚owner‘ of the Context if you like control it’s > > lifecycle. > > This depends on whether you have > > > > @ManagedBean > > @ViewScoped > > (which would be a JSF managed ViewScoped bean) -> JSF > > > > or > > @ViewScoped > > managed by Apache Deltaspike. > > > > LieGrue, > > strub > > > > > > > > > > > Am 04.12.2015 um 11:53 schrieb Romain Manni-Bucau < > [email protected] > > >: > > > > > > Hi > > > > > > sure, you just need to start/stop the context using > > > WebBeansContext.current().getContextsService() then you have start/stop > > and > > > you pass ViewScoped.class as scope type. > > > > > > > > > Romain Manni-Bucau > > > @rmannibucau <https://twitter.com/rmannibucau> | Blog > > > <http://rmannibucau.wordpress.com> | Github < > > https://github.com/rmannibucau> | > > > LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber > > > <http://www.tomitribe.com> > > > > > > 2015-12-04 11:37 GMT+01:00 Felipe Jaekel <[email protected]>: > > > > > >> Adding beans.xml to main/resources/META-INF solved the problem, > thanks. > > >> > > >> Regular CDI scoped beans are working fine, but I would like also to > > >> test javax.faces.view.ViewScoped beans. > > >> > > >> Is it possible? > > >> > > >> > > >> javax.enterprise.context.ContextNotActiveException: WebBeans context > > with > > >> scope type annotation @ViewScoped does not exist within current thread > > >> at > > >> > > >> > > > org.apache.webbeans.container.BeanManagerImpl.getContext(BeanManagerImpl.java:330) > > >> at > > >> > > >> > > > org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.getContextualInstance(NormalScopedBeanInterceptorHandler.java:88) > > >> at > > >> > > >> > > > org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.get(NormalScopedBeanInterceptorHandler.java:70) > > >> at > > >> > > >> > > > br.com.tecnico.page.teleSuporte.RelatoriosSacwebController$$OwbNormalScopeProxy0.gerarRelatorio(br/com/tecnico/page/teleSuporte/RelatoriosSacwebController.java) > > >> at > > >> > > >> > > > br.com.tecnico.page.teleSuporte.RelatoriosSacwebControllerTest.gerarRelatorio(RelatoriosSacwebControllerTest.java:17) > > >> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > >> at > > >> > > >> > > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > > >> at > > >> > > >> > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > > >> at java.lang.reflect.Method.invoke(Method.java:606) > > >> at > > >> > > >> > > > org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85) > > >> at org.testng.internal.Invoker.invokeMethod(Invoker.java:648) > > >> at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:834) > > >> at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1142) > > >> at > > >> > > >> > > > org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:124) > > >> at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108) > > >> at org.testng.TestRunner.privateRun(TestRunner.java:771) > > >> at org.testng.TestRunner.run(TestRunner.java:621) > > >> at org.testng.SuiteRunner.runTest(SuiteRunner.java:357) > > >> at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:352) > > >> at org.testng.SuiteRunner.privateRun(SuiteRunner.java:310) > > >> at org.testng.SuiteRunner.run(SuiteRunner.java:259) > > >> at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) > > >> at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) > > >> at org.testng.TestNG.runSuitesSequentially(TestNG.java:1176) > > >> at org.testng.TestNG.runSuitesLocally(TestNG.java:1101) > > >> at org.testng.TestNG.run(TestNG.java:1009) > > >> at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111) > > >> at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204) > > >> at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175) > > >> > > >> > > >> 2015-12-03 17:52 GMT-02:00 Romain Manni-Bucau <[email protected] > >: > > >> > > >>> Hi > > >>> > > >>> 2015-12-03 20:43 GMT+01:00 Felipe Jaekel <[email protected]>: > > >>> > > >>>> Hi, > > >>>> > > >>>> I believe this was already discussed on this list, but I didn't > found > > >> the > > >>>> topic on google. > > >>>> > > >>>> I'm able to test EJBs using the EJBContainer as mentioned on TomEE > > >>>> examples. > > >>>> > > >>>> But when I try to test a CDI bean I'm getting a > > >>>> UnsatisfiedResolutionException. > > >>>> > > >>>> I tried to add a beans.xml to /src/test/resources/META-INF but no > > >>> success. > > >>>> > > >>>> > > >>> and in main/resources/META-INF as well? > > >>> > > >>> > > >>>> Do I need DeltaSpike on this case? > > >>>> > > >>>> > > >>> No worse case you can use ApplicationComposer > > >>> > > >>> > > >>>> Thanks > > >>>> > > >>>> > > >>>> INFORMAÇÕES - Existing thread singleton service in SystemInstance(): > > >>>> org.apache.openejb.cdi.ThreadSingletonServiceImpl@4b4b25c8 > > >>>> INFORMAÇÕES - OpenWebBeans Container is starting... > > >>>> INFORMAÇÕES - Adding OpenWebBeansPlugin : [CdiPlugin] > > >>>> INFORMAÇÕES - Adding OpenWebBeansPlugin : [OpenWebBeansJsfPlugin] > > >>>> GRAVE - CDI Beans module deployment failed > > >>>> org.apache.webbeans.exception.inject.DeploymentException: > > >>>> javax.enterprise.inject.UnsatisfiedResolutionException: Api type > > >>>> [br.com.test.CdiBean] is not found with the qualifiers > > >>>> Qualifiers: [@javax.enterprise.inject.Default()] > > >>>> for injection into Field Injection Point, field name : bean, Bean > > >> Owner > > >>> : > > >>>> [CdiBeanTest, Name:null, WebBeans Type:MANAGED, API > > >>>> > > >>>> > > >>> > > >> > > > Types:[java.lang.Object,br.com.test.EjbContainerTest,br.com.test.CdiBeanTest], > > >>>> > > >> > > Qualifiers:[javax.enterprise.inject.Any,javax.enterprise.inject.Default]] > > >>>> at > > >>> > org.apache.webbeans.config.BeansDeployer.deploy(BeansDeployer.java:215) > > >>>> at > > >>>> > > >>>> > > >>> > > >> > > > org.apache.openejb.cdi.OpenEJBLifecycle.startApplication(OpenEJBLifecycle.java:192) > > >>>> at > > >>>> > > >>>> > > >>> > > >> > > > org.apache.openejb.cdi.ThreadSingletonServiceImpl.initialize(ThreadSingletonServiceImpl.java:160) > > >>>> at org.apache.openejb.cdi.CdiBuilder.build(CdiBuilder.java:41) > > >>>> at > > >>>> > > >>>> > > >>> > > >> > > > org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:846) > > >>>> at > > >>>> > > >>>> > > >>> > > >> > > > org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:652) > > >>>> at > > >>>> > > >>>> > > >>> > > >> > > > org.apache.openejb.OpenEjbContainer$Provider.createEJBContainer(OpenEjbContainer.java:335) > > >>>> at > > >>>> > > >>> > > >> > > > javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:56) > > >>>> at br.com.test.EjbContainerTest.setUp(EjbContainerTest.java:43) > > >>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > >>>> at > > >>>> > > >>>> > > >>> > > >> > > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > > >>>> at > > >>>> > > >>>> > > >>> > > >> > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > > >>>> at java.lang.reflect.Method.invoke(Method.java:606) > > >>>> at > > >>>> > > >>>> > > >>> > > >> > > > org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85) > > >>>> at > > >>> > org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:515) > > >>>> at > org.testng.internal.Invoker.invokeConfigurations(Invoker.java:213) > > >>>> at > org.testng.internal.Invoker.invokeConfigurations(Invoker.java:140) > > >>>> at > > >>>> > > >>>> > > >>> > > >> > > > org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:170) > > >>>> at > org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:104) > > >>>> at org.testng.TestRunner.privateRun(TestRunner.java:771) > > >>>> at org.testng.TestRunner.run(TestRunner.java:621) > > >>>> at org.testng.SuiteRunner.runTest(SuiteRunner.java:357) > > >>>> at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:352) > > >>>> at org.testng.SuiteRunner.privateRun(SuiteRunner.java:310) > > >>>> at org.testng.SuiteRunner.run(SuiteRunner.java:259) > > >>>> at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) > > >>>> at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) > > >>>> at org.testng.TestNG.runSuitesSequentially(TestNG.java:1176) > > >>>> at org.testng.TestNG.runSuitesLocally(TestNG.java:1101) > > >>>> at org.testng.TestNG.run(TestNG.java:1009) > > >>>> at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111) > > >>>> at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204) > > >>>> at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175) > > >>>> Caused by: javax.enterprise.inject.UnsatisfiedResolutionException: > Api > > >>> type > > >>>> [br.com.test.CdiBean] is not found with the qualifiers > > >>>> Qualifiers: [@javax.enterprise.inject.Default()] > > >>>> for injection into Field Injection Point, field name : bean, Bean > > >> Owner > > >>> : > > >>>> [CdiBeanTest, Name:null, WebBeans Type:MANAGED, API > > >>>> > > >>>> > > >>> > > >> > > > Types:[java.lang.Object,br.com.test.EjbContainerTest,br.com.test.CdiBeanTest], > > >>>> > > >> > > Qualifiers:[javax.enterprise.inject.Any,javax.enterprise.inject.Default]] > > >>>> at > > >>>> > > >>>> > > >>> > > >> > > > org.apache.webbeans.util.InjectionExceptionUtil.throwUnsatisfiedResolutionException(InjectionExceptionUtil.java:60) > > >>>> at > > >>>> > > >>>> > > >>> > > >> > > > org.apache.webbeans.container.InjectionResolver.checkInjectionPoint(InjectionResolver.java:195) > > >>>> at > > >>>> > > >>>> > > >>> > > >> > > > org.apache.webbeans.container.BeanManagerImpl.validate(BeanManagerImpl.java:960) > > >>>> at > > >>>> > > >> > > org.apache.webbeans.config.BeansDeployer.validate(BeansDeployer.java:491) > > >>>> at > > >>>> > > >>>> > > >>> > > >> > > > org.apache.webbeans.config.BeansDeployer.validateInjectionPoints(BeansDeployer.java:422) > > >>>> at > > >>> > org.apache.webbeans.config.BeansDeployer.deploy(BeansDeployer.java:202) > > >>>> ... 32 more > > >>>> > > >>>> > > >>>> > > >>>> > > >>> > > >> > > > ---------------------------------------------------------------------------------------- > > >>>> > > >>>> @Named > > >>>> public class CdiBean > > >>>> { > > >>>> public double randomNumber() > > >>>> { > > >>>> return Math.random(); > > >>>> } > > >>>> } > > >>>> > > >>>> > > >>>> > > >>>> > > >>> > > >> > > > ---------------------------------------------------------------------------------------- > > >>>> > > >>>> public class CdiBeanTest extends EjbContainerTest > > >>>> { > > >>>> //@Inject > > >>>> //private StatelessEjb ejb; > > >>>> > > >>>> @Inject > > >>>> private CdiBean bean; > > >>>> > > >>>> @Test > > >>>> public void f() > > >>>> { > > >>>> //System.out.println(ejb.randomNumber()); > > >>>> System.out.println(bean.randomNumber()); > > >>>> } > > >>>> } > > >>>> > > >>>> > > >>>> > > >>>> > > >>> > > >> > > > ---------------------------------------------------------------------------------------- > > >>>> > > >>>> public class EjbContainerTest > > >>>> { > > >>>> protected EJBContainer container; > > >>>> > > >>>> @BeforeClass > > >>>> public void setUp() throws Exception > > >>>> { > > >>>> final Properties properties = new Properties(); > > >>>> properties.setProperty("openejb.embedded.remotable", "true"); > > >>>> > > >>>> > > >>> > > >> > > > properties.setProperty("openejb.autocreate.jta-datasource-from-non-jta-one", > > >>>> "false"); > > >>>> > > >>>> > > >>>> // dataSource setup ommited > > >>>> > > >>>> container = EJBContainer.createEJBContainer(properties); > > >>>> } > > >>>> > > >>>> @BeforeMethod > > >>>> public void inject() throws NamingException > > >>>> { > > >>>> if(container != null) > > >>>> { > > >>>> container.getContext().bind("inject", this); > > >>>> } > > >>>> } > > >>>> > > >>>> @AfterClass > > >>>> public void close() > > >>>> { > > >>>> if(container != null) > > >>>> { > > >>>> container.close(); > > >>>> container = null; > > >>>> } > > >>>> } > > >>>> } > > >>>> > > >>> > > >> > > > > >
