Both would work.

arquillian-tomee-remote or arquillian-tomee-embedded artifact are our
arquillian integrations.

Without you need some custome code glue, not sure it is the best to go
while tomee 2 is not released.
Le 29 janv. 2015 00:32, "Randy Tidd" <[email protected]> a écrit :

> Romain,
>
> Thank you for your reply this was helpful.  Switching from "openejb-core"
> to "tomee-embedded" has fixed the problem of the missing javaee
> implementations, I am now able to mock the FacesContext and other JSF
> resources for the unit tests, and the glassfish-embeded package was not
> needed.
>
> I wonder if I can ask a follow up question. I would like to inject my JSF
> beans and EJB's into my unit test class, so they will all be managed by
> TomEE.  Trying this:
>
> @ManagedBean
> @ViewScoped
> public abstract class FooBean ...
>
> ...
>
> @Inject
> FooBean fooBean;
>
> I get:
>
> Caused by: javax.enterprise.inject.UnsatisfiedResolutionException: Api
> type [...FooBean] is not found with the qualifiers
> Qualifiers: [@javax.enterprise.inject.Default()]
>
> I see toolkits like Arquillian which are intended to support this, I am
> looking for information on if or how this works with TomEE or if TomEE can
> handle this without Arquillian, again any info appreciated.
>
> Randy
>
> On Jan 28, 2015, at 10:24 AM, Romain Manni-Bucau wrote:
>
> > Hi
> >
> > Several points (without any order)
> > 1) javax:javaee-api:6.0 is broken don't use it for any run
> > (org.apache.openejb:javaee-api + myfaces-api can replace it)
> > 2) before InvalidApplicationException the error is logged and that's
> > what will help you to solve the issue, this exception is just here to
> > make the deployment failing
> > 3) openejb 2 will be able to run jsf in embedded mode (we use it for cdi
> tck)
> > 4) tomee 1.x can already do it using tomee-embedded instead of openejb
> > 5) don't know that much your solution but maybe you just miss
> > myfaces-api, myfaces-impl, tomcat-jasper, tomcat-jasper-el,
> > openejb-jstl dependencies. (check here adapting your versions
> >
> https://git-wip-us.apache.org/repos/asf?p=tomee.git;a=blob;f=tck/cdi-embedded/pom.xml;h=d33af5dc0cef62b93f3e46a41d4c776befd50ed8;hb=21ad55b9f9e07c638ab53a6abc5451c680c29ba7
> )
> >
> > Hope it gives you few pointers
> >
> >
> > Romain Manni-Bucau
> > @rmannibucau
> > http://www.tomitribe.com
> > http://rmannibucau.wordpress.com
> > https://github.com/rmannibucau
> >
> >
> > 2015-01-28 16:17 GMT+01:00 Randy Tidd <[email protected]>:
> >> I set up some "unit" tests (really integration tests) using embedded
> OpenEJB with this:
> >>
> >>    <dependency>
> >>        <groupId>org.apache.openejb</groupId>
> >>        <artifactId>openejb-core</artifactId>
> >>        <version>4.7.1</version>
> >>        <scope>test</scope>
> >>    </dependency>
> >>
> >> I am able to call my EJB methods which use JPA and this works great.
> >>
> >> My app is J2EE deployed to Glassfish and I would like to expand the
> unit testing to the JSF managed bean classes.  I am able to invoke methods
> on those beans with the same setup.  However, those beans reference
> FacesContext with calls like this:
> >>
> >>        Principal principal =
> FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();
> >>
> >> This blows up with an exception because FacesContext is not available
> in embedded OpenEJB.
> >>
> >> The FacesContext can be mocked with something like Mockito, but this
> code does not run without a javaee implementation on the classpath, as
> described here:
> >>
> >>
> https://developer.jboss.org/wiki/WhatsTheCauseOfThisExceptionJavalangClassFormatErrorAbsentCode
> >>
> >> Essentially, including a Maven dependency like this:
> >>
> >>        <dependency>
> >>            <groupId>javax</groupId>
> >>            <artifactId>javaee-api</artifactId>
> >>            <version>6.0</version>
> >>            <scope>provided</scope>
> >>        </dependency>
> >>
> >> Provides only the API's for the javaee classes which allows the code to
> compile, but does not provide an implementation, so it can't run.  When the
> code runs inside a container like Glassfish, the implementation is there.
> But when running as a unit test, there is no such implementation unless it
> is explicitly added.
> >>
> >> I tried adding this:
> >>
> >>            <dependency>
> >>                <groupId>org.glassfish.main.extras</groupId>
> >>                <artifactId>glassfish-embedded-all</artifactId>
> >>                <version>3.1.2.2</version>
> >>                <scope>test</scope>
> >>            </dependency>
> >>
> >> My understanding is that this is supposed to provide Glassfish classes
> at runtime with test scope which is intended to address this problem.
> However, when I run this with OpenEJB, I get this:
> >>
> >> org.apache.openejb.OpenEjbContainer$InvalidApplicationException:
> org.apache.openejb.config.ValidationFailedException: Module failed
> validation. AppModule(name=)
> >>        at
> org.apache.openejb.OpenEjbContainer$Provider.createEJBContainer(OpenEjbContainer.java:320)
> >>        at
> javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:56)
> >>        at
> com.aoi.aoiweb.ejb.RegistrarEjbTest.initialize(RegistrarEjbTest.java:71)
> >>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >>        at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> >>        at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> >>        at java.lang.reflect.Method.invoke(Method.java:597)
> >>        at
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
> >>        at
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
> >>        at
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
> >>        at
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
> >>        at
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
> >>        at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
> >>        at
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
> >>        at
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> >>        at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
> >>        at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
> >>        at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
> >>        at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> >> Caused by: org.apache.openejb.config.ValidationFailedException: Module
> failed validation. AppModule(name=)
> >>        at
> org.apache.openejb.config.ReportValidationResults.deploy(ReportValidationResults.java:88)
> >>        at
> org.apache.openejb.config.AppInfoBuilder.build(AppInfoBuilder.java:309)
> >>        at
> org.apache.openejb.config.ConfigurationFactory.configureApplication(ConfigurationFactory.java:965)
> >>        at
> org.apache.openejb.OpenEjbContainer$Provider.createEJBContainer(OpenEjbContainer.java:314)
> >>        ... 18 more
> >>
> >> I suspect that the glassfish-embedded-all dependency is conflicting
> with OpenEJB since they both attempt to provide the same classes and would
> each be configured differently.
> >>
> >> So what I think I'm looking for is an "embedded TomEE" or a way to add
> javaee implementation classes, or minimally FacesContext, to an embedded
> OpenEJB.  I have been searching around the docs and web sites and have not
> found much to help, thanks in advance for any info.
> >>
> >> Randy
> >>
> >>
> >>
>
>

Reply via email to