Thanks again Mark!

I guess I will have to watch the VJBUG session about Deltaspike from this
Tuesday. There are so many hidden gems there ;)

On Fri, Jan 23, 2015 at 5:35 PM, Mark Struberg <[email protected]> wrote:

> Hi!
>
>
> You are welcome!
>
> Just noticed some other thing:
>
> instead of doing the try finally with em.getTransaction().begin... you
> could also use DeltaSpikes @Transactional interceptor. Basically does the
> same, but much more elegantly.
>
> LieGrue,
> strub
>
>
>
>
> On Friday, 23 January 2015, 16:28, Ivan St. Ivanov <
> [email protected]> wrote:
>
>
> >
> >
> >Hello everybody,
> >
> >
> >Together with Mark I was able to solve my issues. However, I would like
> to send it to everyone, so that if anybody has this problem again, they can
> use this thread as a reference.
> >
> >
> >So, to remind you again, I have a special Tomcat based environment, where
> the only manipulation I can bring is via the application deployment. That
> is, I can't add any jars to the tomcat/lib directory, nor I can touch the
> server configuration. At the same time I would like to use CDI.
> >
> >
> >So, in the above described conditions, I *can* have CDI if the following
> dependencies declared in pom.xml:
> >
> >
> ><dependency>
> ><groupId>javax.enterprise</groupId>
> ><artifactId>cdi-api</artifactId>
> ><version>1.2</version>
> ></dependency>
> ><dependency>
> ><groupId>org.apache.openwebbeans</groupId>
> ><artifactId>openwebbeans-spi</artifactId>
> ><version>${owb.version}</version>
> ><scope>runtime</scope>
> ></dependency>
> ><dependency>
> ><groupId>org.apache.openwebbeans</groupId>
> ><artifactId>openwebbeans-impl</artifactId>
> ><version>${owb.version}</version>
> ><scope>runtime</scope>
> ></dependency>
> ><dependency>
> ><groupId>org.apache.openwebbeans</groupId>
> ><artifactId>openwebbeans-web</artifactId>
> ><version>${owb.version}</version>
> ><scope>runtime</scope>
> ></dependency>
> ><dependency>
> ><groupId>org.apache.openwebbeans</groupId>
> ><artifactId>openwebbeans-tomcat7</artifactId>
> ><version>${owb.version}</version>
> ><scope>runtime</scope> </dependency>
> >
> >
> >
> >This will bring the power of CDI (injection, interceptors, etc.) to all
> my classes, but the Servlets. If I don't want to touch tomcat/lib, then in
> order to get the closes to the Java EE dev experience, I had to use
> Deltaspike's BeanManager. So, I needed some more dependencies in my pom.xml:
> >
> >
> ><dependency>
> ><groupId>org.apache.deltaspike.core</groupId>
> ><artifactId>deltaspike-core-api</artifactId>
> ><version>${deltaspike.version}</version>
> ></dependency>
> ><dependency>
> ><groupId>org.apache.deltaspike.core</groupId>
> ><artifactId>deltaspike-core-impl</artifactId>
> ><version>${deltaspike.version}</version>
> ><scope>runtime</scope>
> ></dependency>
> >
> >
> >
> >And then in the Servlet's init method I could do things like that:
> >
> >
> >@Override
> >public void init() throws ServletException {
> >recorder =
> BeanProvider.getContextualReference(ServiceMethodInvocationRecorder.class,
> false);
> >dataImporter = BeanProvider.getContextualReference(DataImporter.class,
> false);
> >dataSummarizer =
> BeanProvider.getContextualReference(DataSummarizer.class, false);
> >}
> >
> >The final requirement that I had, was to have the entity manager produced
> by CDI and not by some hand crafted class of mine. So, here Mark proposed
> another Deltaspike extension:
> >
> >
> ><dependency>
> ><groupId>org.apache.deltaspike.modules</groupId>
> ><artifactId>deltaspike-jpa-module-api</artifactId>
> ><version>${deltaspike.version}</version>
> ></dependency>
> ><dependency>
> ><groupId>org.apache.deltaspike.modules</groupId>
> ><artifactId>deltaspike-jpa-module-impl</artifactId>
> ><version>${deltaspike.version}</version>
> ><scope>runtime</scope>
> ></dependency>
> >
> >And the following producer class:
> >
> >
> >@ApplicationScoped
> >public class EntityManagerProducer {
> >
> >@Inject
> >@PersistenceUnitName("perf-servicetest-local")
> >private EntityManagerFactory entityManagerFactory;
> >
> >@Produces
> >@RequestScoped
> >public EntityManager buildEntityManager() {
> >return entityManagerFactory.createEntityManager();
> >}
> >
> >public void dispose(@Disposes EntityManager entityManager) {
> >entityManager.close();
> >}
> >}
> >
> >
> >
> >Note that the scope of the factory method of the entity manager is
> Request. This seemed to be very important.
> >
> >
> >Afterwards, there is nothing special in injecting the entity manager: you
> do it via the @Inject annotation in the beans and via Deltaspike's
> BeanManager in Servlets.
> >
> >
> >Another important concern in such non-managed environments is that there
> is one central place where transactions are started and commited/rolled
> back. In my case this is the servlet, which controls the boundaries and
> delegates the business logic to the beans that the BeanManager created for
> it:
> >
> >
> >private void exportData() {
> >entityManager.getTransaction().begin();
> >try {
> >recorder.exportDataToOtherSource(dataImporter);
> >entityManager.getTransaction().commit();
> >} finally {
> >if (entityManager.getTransaction().isActive()) {
> >entityManager.getTransaction().rollback();
> >}
> >}
> >}
> >
> >
> >
> >So, great thanks again to Mark for his tremendous support!
> >
> >
> >Cheers,
> >Ivan
> >
> >
> >On Mon, Jan 5, 2015 at 7:13 PM, Mark Struberg <[email protected]> wrote:
> >
> >Hi Ivan!
> >>Sorry, simply forgot about it. Will look at it today.
> >>Thanks for remembering me ;)
> >>
> >>
> >>
> >>LieGrue,
> >>strub
> >>
> >>
> >>
> >>On Monday, 5 January 2015, 16:54, Ivan St. Ivanov <
> [email protected]> wrote:
> >>
> >>
> >>>
> >>>
> >>>Hi folks,
> >>>
> >>>
> >>>Happy New Year! :)
> >>>
> >>>
> >>>Did you manage to take a look at my sample app?
> >>>
> >>>
> >>>Thanks,
> >>>Ivan
> >>>
> >>>
> >>>On Tue, Dec 23, 2014 at 2:31 PM, Ivan St. Ivanov <
> [email protected]> wrote:
> >>>
> >>>Hi,
> >>>>
> >>>>
> >>>>Thanks everybody for your quick answer!
> >>>>
> >>>>
> >>>>It's not on github. I have attached the sources to this mail.
> >>>>
> >>>>
> >>>>Regards,
> >>>>Ivan
> >>>>
> >>>>
> >>>>On Tue, Dec 23, 2014 at 1:19 PM, Ludovic Pénet <[email protected]>
> wrote:
> >>>>
> >>>>Quick question : do you have a beans.xml file ?
> >>>>>
> >>>>>Ludovic
> >>>>>
> >>>>>
> >>>>>Le 23 décembre 2014 10:05:26 UTC+01:00, "Ivan St. Ivanov" <
> [email protected]> a écrit :
> >>>>>Hello,
> >>>>>>
> >>>>>>
> >>>>>>I have a question about integrating OpenWebBeans with a pure Tomcat
> server.
> >>>>>>
> >>>>>>
> >>>>>>I looked for some solutions in the internet and here is what I did
> with my project:
> >>>>>>
> >>>>>>
> >>>>>>First I added some dependencies to the pom.xml:
> >>>>>>
> >>>>>>
> >>>>>><dependency>
> >>>>>>    <groupId>javax.enterprise</groupId>
> >>>>>>    <artifactId>cdi-api</artifactId>
> >>>>>>    <version>1.2</version>
> >>>>>></dependency>
> >>>>>><dependency>
> >>>>>>    <groupId>org.apache.openwebbeans</groupId>
> >>>>>>    <artifactId>openwebbeans-spi</artifactId>
> >>>>>>    <version>1.2.7</version>
> >>>>>></dependency>
> >>>>>><dependency>
> >>>>>>    <groupId>org.apache.openwebbeans</groupId>
> >>>>>>    <artifactId>openwebbeans-impl</artifactId>
> >>>>>>    <version>1.2.7</version>
> >>>>>></dependency>
> >>>>>><dependency>
> >>>>>>    <groupId>org.apache.openwebbeans</groupId>
> >>>>>>    <artifactId>openwebbeans-web</artifactId>
> >>>>>>    <version>1.2.7</version>
> >>>>>></dependency>
> >>>>>>
> >>>>>>Having them, I was able to compile and deploy my project, however
> the dependency injection simply did not work.
> >>>>>>
> >>>>>>
> >>>>>>Then I additionally added the following dependency:
> >>>>>>
> >>>>>>
> >>>>>><dependency>
> >>>>>>    <groupId>org.apache.openwebbeans</groupId>
> >>>>>>    <artifactId>openwebbeans-tomcat7</artifactId>
> >>>>>>    <version>1.2.7</version>
> >>>>>></dependency>
> >>>>>>
> >>>>>>
> >>>>>>And also created context.xml file under the src/main/webapp/META-INF
> folder of my app with the following content:
> >>>>>>
> >>>>>>
> >>>>>><Context>
> >>>>>>    <ListenerclassName=
> >>>>>>      "org.apache.webbeans.web.tomcat7.ContextLifecycleListener" />
> >>>>>></Context>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>However, this time I had deployment issue:
> >>>>>>
> >>>>>>
> >>>>>>Dec 22, 2014 6:54:28 PM
> org.apache.tomcat.util.digester.Digester startElement
> >>>>>>SEVERE: Begin event
> threw exception
> >>>>>>java.lang.ClassNotFoundException:
> org.apache.webbeans.web.tomcat.ContextLifecycleListener
> >>>>>>        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
> >>>>>>        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
> >>>>>>        at java.security.AccessController.doPrivileged(Native Method)
> >>>>>>        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
> >>>>>>        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
> >>>>>>        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
> >>>>>>        at
>
> org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:144)
> >>>>>>        at
> org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1288)
> >>>>>>        at
> com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
> >>>>>>
> >>>>>>
> >>>>>>I tried to tackle that with adding the OWB jars in the tomcat/lib
> folder. But gave it up after the fifth ClassNotFoundError. It is not an
> option for me anyway: I am not in control of the productive server, so I
> cannot touch its lib directory.
> >>>>>>
> >>>>>>
> >>>>>>I also looked in the OpenWebBeans samples, but they don't even
> package the jars with them.
> >>>>>>
> >>>>>>
> >>>>>>Can anyone share their experience with me?
> >>>>>>
> >>>>>>
> >>>>>>Thanks a lot!
> >>>>>>Ivan
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>--
> >>>>>Envoyé de mon téléphone Android avec K-9 Mail. Excusez la brièveté.
> >>>>>|
> | AVANT D'IMPRIMER, PENSEZ A L'ENVIRONNEMENT.
> |
> >>>>
> >>>
> >>>
> >>>
> >
> >
> >
>

Reply via email to