You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@openwebbeans.apache.org by Björn Berg <bj...@gmx.de> on 2017/11/21 20:27:12 UTC

Using JPA with Microwave fails

Hi,

I have tried to create a small application based on Meecrowave and JPA extension. But when I always try to persist an entity, it fails with a NullPointerException which I cannot really drill down to find the root cause.

First I thought injected EntityManager is null but logging the EntityManager call told me, that it really exists. PersistenceUnitInfoBuilder and DataSource is produced like described on
http://openwebbeans.apache.org/meecrowave/meecrowave-jpa/index.html <http://openwebbeans.apache.org/meecrowave/meecrowave-jpa/index.html>


The called InstrumentDao looks like this:
@ApplicationScoped
@Jpa(transactional = false)
public class InstrumentDao {
    @Inject
    @Unit(name = "depot")
    private EntityManager em;

    @Jpa
    public void save (Instrument instrument) {
        em.merge(instrument);
    }
  …
}

The entity Instrument is defined like this:
@Entity
@Table(name = "INSTRUMENT")
public class Instrument implements Serializable {
    @Id
    private String isin;
    private String name;

    public Instrument() {

    }
…
}

Stacktrace is like following:
Caused by: java.lang.NullPointerException
	at org.apache.meecrowave.jpa.internal.EntityManagerBean.destroy(EntityManagerBean.java:95) ~[meecrowave-jpa-1.1.0.jar:1.1.0]
	at org.apache.meecrowave.jpa.internal.EntityManagerBean.destroy(EntityManagerBean.java:29) ~[meecrowave-jpa-1.1.0.jar:1.1.0]
	at org.apache.webbeans.component.third.ThirdpartyBeanImpl.destroy(ThirdpartyBeanImpl.java:113) ~[openwebbeans-impl-2.0.1.jar:2.0.1]
	at org.apache.meecrowave.jpa.internal.EntityManagerContext$ThreadContext.doDestroy(EntityManagerContext.java:130) ~[meecrowave-jpa-1.1.0.jar:1.1.0]
	at org.apache.meecrowave.jpa.internal.EntityManagerContext$ThreadContext.lambda$exit$1(EntityManagerContext.java:140) ~[meecrowave-jpa-1.1.0.jar:1.1.0]
	at java.util.HashMap.forEach(HashMap.java:1280) ~[?:1.8.0_77]
	at org.apache.meecrowave.jpa.internal.EntityManagerContext$ThreadContext.exit(EntityManagerContext.java:140) ~[meecrowave-jpa-1.1.0.jar:1.1.0]
	at org.apache.meecrowave.jpa.internal.EntityManagerContext$ThreadContext.access$300(EntityManagerContext.java:94) ~[meecrowave-jpa-1.1.0.jar:1.1.0]
	at org.apache.meecrowave.jpa.internal.EntityManagerContext.exit(EntityManagerContext.java:52) ~[meecrowave-jpa-1.1.0.jar:1.1.0]
	at org.apache.meecrowave.jpa.internal.JpaInterceptorBase.inTransaction(JpaInterceptorBase.java:40) ~[meecrowave-jpa-1.1.0.jar:1.1.0]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_77]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_77]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_77]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_77]
	at org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:136) ~[openwebbeans-impl-2.0.1.jar:2.0.1]
	at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:65) ~[openwebbeans-impl-2.0.1.jar:2.0.1]
	at org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:139) ~[openwebbeans-impl-2.0.1.jar:2.0.1]
	at org.kivio.depot.dao.InstrumentDao$$OwbInterceptProxy0.save(org/kivio/depot/dao/InstrumentDao.java) ~[?:?]
	at org.kivio.depot.dao.InstrumentDao$$OwbNormalScopeProxy0.save(org/kivio/depot/dao/InstrumentDao.java) ~[?:?]
	at org.kivio.depot.service.DepotService.addInstrument(DepotService.java:69) ~[classes/:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_77]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_77]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_77]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_77]

Someone can give me a hint what I am doing wrong?

Kind regards,
Björn


Re: Using JPA with Microwave fails

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Oh right. Same for relationships BTW.

Le 23 nov. 2017 22:09, "Björn Berg" <bj...@gmx.de> a écrit :

> So stupid. I had to enhance my entities for usage with OpenJPA.
> Only if enhancement tool worked on entities, IdClass and EmbeddedId
> working properly.
> The option openjpa.RuntimeUnenhancedClasses = supported does not work for
> composite keys.
>
> Am 23.11.2017 um 21:04 schrieb Björn Berg <bj...@gmx.de>:
>
> I am indirectly using OpenJpa with meecrowave-jpa component. @Vetoed does
> not help and there is no beans.xml.
> Seems to be a problem with all kinds of EmbeddedId or IdClass.
> I have added my sample to GitHub: https://github.com/
> rollinhand/meecrowave-jpa-sample
>
> What do you mean with "exclude it from meecrowave option“?
>
>
> Am 23.11.2017 um 06:32 schrieb Romain Manni-Bucau <rm...@gmail.com>:
>
> Can depend your jpa provider. Maybe try adding @Vetoed on it or exclude it
> from meecrowave option or CDI beans.xml excludes.
>
> Le 22 nov. 2017 23:58, "Björn Berg" <bj...@gmx.de> a écrit :
>
>> One addition because my latest post was not right. It is not Liquibase,
>> it is an embedded Id I use in a different class, added to the persistence
>> context.
>>
>> When I remove the class, everything is fine.
>> When I add a single @Id annotation, everything is fine.
>>
>> This is the entity class and its embedded Id:
>>
>> @Getter
>> @Setter
>> @Entity
>> @Table(name = "PORTFOLIO")
>> public class Portfolio {
>>     @EmbeddedId
>>     private PortfolioId portfolioId;
>>
>>     @Column(name = "NOMINAL")
>>     private BigDecimal nominal;
>>
>>     @Column(name = "CURRENCY")
>>     private String currency;
>>
>>     …
>>
>> }
>>
>> @Getter
>> @Setter
>> @Embeddable
>> public class PortfolioId {
>>     @Temporal(TemporalType.DATE)
>>     @Column(name = "NAV_DATE", nullable = false)
>>     private Date navDate;
>>
>>     @Column(name = "ISIN", nullable = false, length = 12)
>>     private String isin;
>>
>>     public PortfolioId() {}
>>     …
>> }
>>
>> What’s wrong with it?
>>
>> Björn
>>
>>
>>
>>
>>
>> Am 22.11.2017 um 22:00 schrieb Björn Berg <bj...@gmx.de>:
>>
>> Found the problem. I am using Liquibase CDI extension in my project and a
>> Liquibase producer.
>> If I run migrations before, there seems to be a problem with the
>> datasource and injection of EntityManager.
>>
>> Removing all Liquibase extensions made the project running.
>>
>> Am 21.11.2017 um 23:38 schrieb Romain Manni-Bucau <rmannibucau@gmail.com
>> >:
>>
>> Looks like cdi instance is null in this context. Do you have a sample
>> reproducing it?
>>
>> Le 21 nov. 2017 21:27, "Björn Berg" <bj...@gmx.de> a écrit :
>>
>>> Hi,
>>>
>>> I have tried to create a small application based on Meecrowave and JPA
>>> extension. But when I always try to persist an entity, it fails with a
>>> NullPointerException which I cannot really drill down to find the root
>>> cause.
>>>
>>> First I thought injected EntityManager is null but logging the
>>> EntityManager call told me, that it really exists.
>>> PersistenceUnitInfoBuilder and DataSource is produced like described on
>>> http://openwebbeans.apache.org/meecrowave/meecrowave-jpa/index.html
>>>
>>>
>>> [...]
>>>
>>> Someone can give me a hint what I am doing wrong?
>>>
>>> Kind regards,
>>> Björn
>>>
>>>
>>
>>
>
>

Re: Using JPA with Microwave fails

Posted by Björn Berg <bj...@gmx.de>.
So stupid. I had to enhance my entities for usage with OpenJPA.
Only if enhancement tool worked on entities, IdClass and EmbeddedId working properly.
The option openjpa.RuntimeUnenhancedClasses = supported does not work for composite keys.

> Am 23.11.2017 um 21:04 schrieb Björn Berg <bj...@gmx.de>:
> 
> I am indirectly using OpenJpa with meecrowave-jpa component. @Vetoed does not help and there is no beans.xml.
> Seems to be a problem with all kinds of EmbeddedId or IdClass.
> I have added my sample to GitHub: https://github.com/rollinhand/meecrowave-jpa-sample <https://github.com/rollinhand/meecrowave-jpa-sample>
> 
> What do you mean with "exclude it from meecrowave option“?
> 
> 
>> Am 23.11.2017 um 06:32 schrieb Romain Manni-Bucau <rmannibucau@gmail.com <ma...@gmail.com>>:
>> 
>> Can depend your jpa provider. Maybe try adding @Vetoed on it or exclude it from meecrowave option or CDI beans.xml excludes.
>> 
>> Le 22 nov. 2017 23:58, "Björn Berg" <bjoern.berg@gmx.de <ma...@gmx.de>> a écrit :
>> One addition because my latest post was not right. It is not Liquibase, it is an embedded Id I use in a different class, added to the persistence context.
>> 
>> When I remove the class, everything is fine. 
>> When I add a single @Id annotation, everything is fine.
>> 
>> This is the entity class and its embedded Id:
>> 
>> @Getter
>> @Setter
>> @Entity
>> @Table(name = "PORTFOLIO")
>> public class Portfolio {
>>     @EmbeddedId
>>     private PortfolioId portfolioId;
>> 
>>     @Column(name = "NOMINAL")
>>     private BigDecimal nominal;
>> 
>>     @Column(name = "CURRENCY")
>>     private String currency;
>> 
>>     …
>> 
>> }
>> 
>> @Getter
>> @Setter
>> @Embeddable
>> public class PortfolioId {
>>     @Temporal(TemporalType.DATE)
>>     @Column(name = "NAV_DATE", nullable = false)
>>     private Date navDate;
>> 
>>     @Column(name = "ISIN", nullable = false, length = 12)
>>     private String isin;
>> 
>>     public PortfolioId() {}
>>     …
>> }
>> 
>> What’s wrong with it?
>> 
>> Björn
>> 
>> 
>> 
>> 
>> 
>>> Am 22.11.2017 um 22:00 schrieb Björn Berg <bjoern.berg@gmx.de <ma...@gmx.de>>:
>>> 
>>> Found the problem. I am using Liquibase CDI extension in my project and a Liquibase producer.
>>> If I run migrations before, there seems to be a problem with the datasource and injection of EntityManager.
>>> 
>>> Removing all Liquibase extensions made the project running. 
>>> 
>>>> Am 21.11.2017 um 23:38 schrieb Romain Manni-Bucau <rmannibucau@gmail.com <ma...@gmail.com>>:
>>>> 
>>>> Looks like cdi instance is null in this context. Do you have a sample reproducing it?
>>>> 
>>>> Le 21 nov. 2017 21:27, "Björn Berg" <bjoern.berg@gmx.de <ma...@gmx.de>> a écrit :
>>>> Hi,
>>>> 
>>>> I have tried to create a small application based on Meecrowave and JPA extension. But when I always try to persist an entity, it fails with a NullPointerException which I cannot really drill down to find the root cause.
>>>> 
>>>> First I thought injected EntityManager is null but logging the EntityManager call told me, that it really exists. PersistenceUnitInfoBuilder and DataSource is produced like described on
>>>> http://openwebbeans.apache.org/meecrowave/meecrowave-jpa/index.html <http://openwebbeans.apache.org/meecrowave/meecrowave-jpa/index.html>
>>>> 
>>>> 
>>>> [...]
>>>> 
>>>> Someone can give me a hint what I am doing wrong?
>>>> 
>>>> Kind regards,
>>>> Björn
>>>> 
>>> 
>> 
> 


Re: Using JPA with Microwave fails

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Hmm

Theses classes are not scanned inti the jpa extension. Can be missing. Want
to try to patch it to test?

Le 23 nov. 2017 21:05, "Björn Berg" <bj...@gmx.de> a écrit :

> I am indirectly using OpenJpa with meecrowave-jpa component. @Vetoed does
> not help and there is no beans.xml.
> Seems to be a problem with all kinds of EmbeddedId or IdClass.
> I have added my sample to GitHub: https://github.com/
> rollinhand/meecrowave-jpa-sample
>
> What do you mean with "exclude it from meecrowave option“?
>
>
> Am 23.11.2017 um 06:32 schrieb Romain Manni-Bucau <rm...@gmail.com>:
>
> Can depend your jpa provider. Maybe try adding @Vetoed on it or exclude it
> from meecrowave option or CDI beans.xml excludes.
>
> Le 22 nov. 2017 23:58, "Björn Berg" <bj...@gmx.de> a écrit :
>
>> One addition because my latest post was not right. It is not Liquibase,
>> it is an embedded Id I use in a different class, added to the persistence
>> context.
>>
>> When I remove the class, everything is fine.
>> When I add a single @Id annotation, everything is fine.
>>
>> This is the entity class and its embedded Id:
>>
>> @Getter
>> @Setter
>> @Entity
>> @Table(name = "PORTFOLIO")
>> public class Portfolio {
>>     @EmbeddedId
>>     private PortfolioId portfolioId;
>>
>>     @Column(name = "NOMINAL")
>>     private BigDecimal nominal;
>>
>>     @Column(name = "CURRENCY")
>>     private String currency;
>>
>>     …
>>
>> }
>>
>> @Getter
>> @Setter
>> @Embeddable
>> public class PortfolioId {
>>     @Temporal(TemporalType.DATE)
>>     @Column(name = "NAV_DATE", nullable = false)
>>     private Date navDate;
>>
>>     @Column(name = "ISIN", nullable = false, length = 12)
>>     private String isin;
>>
>>     public PortfolioId() {}
>>     …
>> }
>>
>> What’s wrong with it?
>>
>> Björn
>>
>>
>>
>>
>>
>> Am 22.11.2017 um 22:00 schrieb Björn Berg <bj...@gmx.de>:
>>
>> Found the problem. I am using Liquibase CDI extension in my project and a
>> Liquibase producer.
>> If I run migrations before, there seems to be a problem with the
>> datasource and injection of EntityManager.
>>
>> Removing all Liquibase extensions made the project running.
>>
>> Am 21.11.2017 um 23:38 schrieb Romain Manni-Bucau <rmannibucau@gmail.com
>> >:
>>
>> Looks like cdi instance is null in this context. Do you have a sample
>> reproducing it?
>>
>> Le 21 nov. 2017 21:27, "Björn Berg" <bj...@gmx.de> a écrit :
>>
>>> Hi,
>>>
>>> I have tried to create a small application based on Meecrowave and JPA
>>> extension. But when I always try to persist an entity, it fails with a
>>> NullPointerException which I cannot really drill down to find the root
>>> cause.
>>>
>>> First I thought injected EntityManager is null but logging the
>>> EntityManager call told me, that it really exists.
>>> PersistenceUnitInfoBuilder and DataSource is produced like described on
>>> http://openwebbeans.apache.org/meecrowave/meecrowave-jpa/index.html
>>>
>>>
>>> [...]
>>>
>>> Someone can give me a hint what I am doing wrong?
>>>
>>> Kind regards,
>>> Björn
>>>
>>>
>>
>>
>

Re: Using JPA with Microwave fails

Posted by Björn Berg <bj...@gmx.de>.
I am indirectly using OpenJpa with meecrowave-jpa component. @Vetoed does not help and there is no beans.xml.
Seems to be a problem with all kinds of EmbeddedId or IdClass.
I have added my sample to GitHub: https://github.com/rollinhand/meecrowave-jpa-sample

What do you mean with "exclude it from meecrowave option“?


> Am 23.11.2017 um 06:32 schrieb Romain Manni-Bucau <rm...@gmail.com>:
> 
> Can depend your jpa provider. Maybe try adding @Vetoed on it or exclude it from meecrowave option or CDI beans.xml excludes.
> 
> Le 22 nov. 2017 23:58, "Björn Berg" <bjoern.berg@gmx.de <ma...@gmx.de>> a écrit :
> One addition because my latest post was not right. It is not Liquibase, it is an embedded Id I use in a different class, added to the persistence context.
> 
> When I remove the class, everything is fine. 
> When I add a single @Id annotation, everything is fine.
> 
> This is the entity class and its embedded Id:
> 
> @Getter
> @Setter
> @Entity
> @Table(name = "PORTFOLIO")
> public class Portfolio {
>     @EmbeddedId
>     private PortfolioId portfolioId;
> 
>     @Column(name = "NOMINAL")
>     private BigDecimal nominal;
> 
>     @Column(name = "CURRENCY")
>     private String currency;
> 
>     …
> 
> }
> 
> @Getter
> @Setter
> @Embeddable
> public class PortfolioId {
>     @Temporal(TemporalType.DATE)
>     @Column(name = "NAV_DATE", nullable = false)
>     private Date navDate;
> 
>     @Column(name = "ISIN", nullable = false, length = 12)
>     private String isin;
> 
>     public PortfolioId() {}
>     …
> }
> 
> What’s wrong with it?
> 
> Björn
> 
> 
> 
> 
> 
>> Am 22.11.2017 um 22:00 schrieb Björn Berg <bjoern.berg@gmx.de <ma...@gmx.de>>:
>> 
>> Found the problem. I am using Liquibase CDI extension in my project and a Liquibase producer.
>> If I run migrations before, there seems to be a problem with the datasource and injection of EntityManager.
>> 
>> Removing all Liquibase extensions made the project running. 
>> 
>>> Am 21.11.2017 um 23:38 schrieb Romain Manni-Bucau <rmannibucau@gmail.com <ma...@gmail.com>>:
>>> 
>>> Looks like cdi instance is null in this context. Do you have a sample reproducing it?
>>> 
>>> Le 21 nov. 2017 21:27, "Björn Berg" <bjoern.berg@gmx.de <ma...@gmx.de>> a écrit :
>>> Hi,
>>> 
>>> I have tried to create a small application based on Meecrowave and JPA extension. But when I always try to persist an entity, it fails with a NullPointerException which I cannot really drill down to find the root cause.
>>> 
>>> First I thought injected EntityManager is null but logging the EntityManager call told me, that it really exists. PersistenceUnitInfoBuilder and DataSource is produced like described on
>>> http://openwebbeans.apache.org/meecrowave/meecrowave-jpa/index.html <http://openwebbeans.apache.org/meecrowave/meecrowave-jpa/index.html>
>>> 
>>> 
>>> [...]
>>> 
>>> Someone can give me a hint what I am doing wrong?
>>> 
>>> Kind regards,
>>> Björn
>>> 
>> 
> 


Re: Using JPA with Microwave fails

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Can depend your jpa provider. Maybe try adding @Vetoed on it or exclude it
from meecrowave option or CDI beans.xml excludes.

Le 22 nov. 2017 23:58, "Björn Berg" <bj...@gmx.de> a écrit :

> One addition because my latest post was not right. It is not Liquibase, it
> is an embedded Id I use in a different class, added to the persistence
> context.
>
> When I remove the class, everything is fine.
> When I add a single @Id annotation, everything is fine.
>
> This is the entity class and its embedded Id:
>
> @Getter
> @Setter
> @Entity
> @Table(name = "PORTFOLIO")
> public class Portfolio {
>     @EmbeddedId
>     private PortfolioId portfolioId;
>
>     @Column(name = "NOMINAL")
>     private BigDecimal nominal;
>
>     @Column(name = "CURRENCY")
>     private String currency;
>
>     …
>
> }
>
> @Getter
> @Setter
> @Embeddable
> public class PortfolioId {
>     @Temporal(TemporalType.DATE)
>     @Column(name = "NAV_DATE", nullable = false)
>     private Date navDate;
>
>     @Column(name = "ISIN", nullable = false, length = 12)
>     private String isin;
>
>     public PortfolioId() {}
>     …
> }
>
> What’s wrong with it?
>
> Björn
>
>
>
>
>
> Am 22.11.2017 um 22:00 schrieb Björn Berg <bj...@gmx.de>:
>
> Found the problem. I am using Liquibase CDI extension in my project and a
> Liquibase producer.
> If I run migrations before, there seems to be a problem with the
> datasource and injection of EntityManager.
>
> Removing all Liquibase extensions made the project running.
>
> Am 21.11.2017 um 23:38 schrieb Romain Manni-Bucau <rm...@gmail.com>:
>
> Looks like cdi instance is null in this context. Do you have a sample
> reproducing it?
>
> Le 21 nov. 2017 21:27, "Björn Berg" <bj...@gmx.de> a écrit :
>
>> Hi,
>>
>> I have tried to create a small application based on Meecrowave and JPA
>> extension. But when I always try to persist an entity, it fails with a
>> NullPointerException which I cannot really drill down to find the root
>> cause.
>>
>> First I thought injected EntityManager is null but logging the
>> EntityManager call told me, that it really exists.
>> PersistenceUnitInfoBuilder and DataSource is produced like described on
>> http://openwebbeans.apache.org/meecrowave/meecrowave-jpa/index.html
>>
>>
>> [...]
>>
>> Someone can give me a hint what I am doing wrong?
>>
>> Kind regards,
>> Björn
>>
>>
>
>

Re: Using JPA with Microwave fails

Posted by Björn Berg <bj...@gmx.de>.
One addition because my latest post was not right. It is not Liquibase, it is an embedded Id I use in a different class, added to the persistence context.

When I remove the class, everything is fine. 
When I add a single @Id annotation, everything is fine.

This is the entity class and its embedded Id:

@Getter
@Setter
@Entity
@Table(name = "PORTFOLIO")
public class Portfolio {
    @EmbeddedId
    private PortfolioId portfolioId;

    @Column(name = "NOMINAL")
    private BigDecimal nominal;

    @Column(name = "CURRENCY")
    private String currency;

    …

}

@Getter
@Setter
@Embeddable
public class PortfolioId {
    @Temporal(TemporalType.DATE)
    @Column(name = "NAV_DATE", nullable = false)
    private Date navDate;

    @Column(name = "ISIN", nullable = false, length = 12)
    private String isin;

    public PortfolioId() {}
    …
}

What’s wrong with it?

Björn





> Am 22.11.2017 um 22:00 schrieb Björn Berg <bj...@gmx.de>:
> 
> Found the problem. I am using Liquibase CDI extension in my project and a Liquibase producer.
> If I run migrations before, there seems to be a problem with the datasource and injection of EntityManager.
> 
> Removing all Liquibase extensions made the project running. 
> 
>> Am 21.11.2017 um 23:38 schrieb Romain Manni-Bucau <rmannibucau@gmail.com <ma...@gmail.com>>:
>> 
>> Looks like cdi instance is null in this context. Do you have a sample reproducing it?
>> 
>> Le 21 nov. 2017 21:27, "Björn Berg" <bjoern.berg@gmx.de <ma...@gmx.de>> a écrit :
>> Hi,
>> 
>> I have tried to create a small application based on Meecrowave and JPA extension. But when I always try to persist an entity, it fails with a NullPointerException which I cannot really drill down to find the root cause.
>> 
>> First I thought injected EntityManager is null but logging the EntityManager call told me, that it really exists. PersistenceUnitInfoBuilder and DataSource is produced like described on
>> http://openwebbeans.apache.org/meecrowave/meecrowave-jpa/index.html <http://openwebbeans.apache.org/meecrowave/meecrowave-jpa/index.html>
>> 
>> 
>> [...]
>> 
>> Someone can give me a hint what I am doing wrong?
>> 
>> Kind regards,
>> Björn
>> 
> 


Re: Using JPA with Microwave fails

Posted by Björn Berg <bj...@gmx.de>.
Found the problem. I am using Liquibase CDI extension in my project and a Liquibase producer.
If I run migrations before, there seems to be a problem with the datasource and injection of EntityManager.

Removing all Liquibase extensions made the project running. 

> Am 21.11.2017 um 23:38 schrieb Romain Manni-Bucau <rm...@gmail.com>:
> 
> Looks like cdi instance is null in this context. Do you have a sample reproducing it?
> 
> Le 21 nov. 2017 21:27, "Björn Berg" <bjoern.berg@gmx.de <ma...@gmx.de>> a écrit :
> Hi,
> 
> I have tried to create a small application based on Meecrowave and JPA extension. But when I always try to persist an entity, it fails with a NullPointerException which I cannot really drill down to find the root cause.
> 
> First I thought injected EntityManager is null but logging the EntityManager call told me, that it really exists. PersistenceUnitInfoBuilder and DataSource is produced like described on
> http://openwebbeans.apache.org/meecrowave/meecrowave-jpa/index.html <http://openwebbeans.apache.org/meecrowave/meecrowave-jpa/index.html>
> 
> 
> [...]
> 
> Someone can give me a hint what I am doing wrong?
> 
> Kind regards,
> Björn
> 


Re: Using JPA with Microwave fails

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Looks like cdi instance is null in this context. Do you have a sample
reproducing it?

Le 21 nov. 2017 21:27, "Björn Berg" <bj...@gmx.de> a écrit :

> Hi,
>
> I have tried to create a small application based on Meecrowave and JPA
> extension. But when I always try to persist an entity, it fails with a
> NullPointerException which I cannot really drill down to find the root
> cause.
>
> First I thought injected EntityManager is null but logging the
> EntityManager call told me, that it really exists.
> PersistenceUnitInfoBuilder and DataSource is produced like described on
> http://openwebbeans.apache.org/meecrowave/meecrowave-jpa/index.html
>
>
> The called InstrumentDao looks like this:
> @ApplicationScoped
> @Jpa(transactional = false)
> public class InstrumentDao {
>     @Inject
>     @Unit(name = "depot")
>     private EntityManager em;
>
>     @Jpa
>     public void save (Instrument instrument) {
>         em.merge(instrument);
>     }
>   …
> }
>
> The entity Instrument is defined like this:
> @Entity
> @Table(name = "INSTRUMENT")
> public class Instrument implements Serializable {
>     @Id
>     private String isin;
>     private String name;
>
>     public Instrument() {
>
>     }
> …
> }
>
> Stacktrace is like following:
> Caused by: java.lang.NullPointerException
> at org.apache.meecrowave.jpa.internal.EntityManagerBean.
> destroy(EntityManagerBean.java:95) ~[meecrowave-jpa-1.1.0.jar:1.1.0]
> at org.apache.meecrowave.jpa.internal.EntityManagerBean.
> destroy(EntityManagerBean.java:29) ~[meecrowave-jpa-1.1.0.jar:1.1.0]
> at org.apache.webbeans.component.third.ThirdpartyBeanImpl.
> destroy(ThirdpartyBeanImpl.java:113) ~[openwebbeans-impl-2.0.1.jar:2.0.1]
> at org.apache.meecrowave.jpa.internal.EntityManagerContext$
> ThreadContext.doDestroy(EntityManagerContext.java:130)
> ~[meecrowave-jpa-1.1.0.jar:1.1.0]
> at org.apache.meecrowave.jpa.internal.EntityManagerContext$
> ThreadContext.lambda$exit$1(EntityManagerContext.java:140)
> ~[meecrowave-jpa-1.1.0.jar:1.1.0]
> at java.util.HashMap.forEach(HashMap.java:1280) ~[?:1.8.0_77]
> at org.apache.meecrowave.jpa.internal.EntityManagerContext$
> ThreadContext.exit(EntityManagerContext.java:140)
> ~[meecrowave-jpa-1.1.0.jar:1.1.0]
> at org.apache.meecrowave.jpa.internal.EntityManagerContext$
> ThreadContext.access$300(EntityManagerContext.java:94)
> ~[meecrowave-jpa-1.1.0.jar:1.1.0]
> at org.apache.meecrowave.jpa.internal.EntityManagerContext.
> exit(EntityManagerContext.java:52) ~[meecrowave-jpa-1.1.0.jar:1.1.0]
> at org.apache.meecrowave.jpa.internal.JpaInterceptorBase.inTransaction(JpaInterceptorBase.java:40)
> ~[meecrowave-jpa-1.1.0.jar:1.1.0]
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> ~[?:1.8.0_77]
> at sun.reflect.NativeMethodAccessorImpl.invoke(
> NativeMethodAccessorImpl.java:62) ~[?:1.8.0_77]
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(
> DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_77]
> at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_77]
> at org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:136)
> ~[openwebbeans-impl-2.0.1.jar:2.0.1]
> at org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(
> InterceptorInvocationContext.java:65) ~[openwebbeans-impl-2.0.1.jar:2.0.1]
> at org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(
> DefaultInterceptorHandler.java:139) ~[openwebbeans-impl-2.0.1.jar:2.0.1]
> at org.kivio.depot.dao.InstrumentDao$$OwbInterceptProxy0.save(org/
> kivio/depot/dao/InstrumentDao.java) ~[?:?]
> at org.kivio.depot.dao.InstrumentDao$$OwbNormalScopeProxy0.save(org/
> kivio/depot/dao/InstrumentDao.java) ~[?:?]
> at org.kivio.depot.service.DepotService.addInstrument(DepotService.java:69)
> ~[classes/:?]
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> ~[?:1.8.0_77]
> at sun.reflect.NativeMethodAccessorImpl.invoke(
> NativeMethodAccessorImpl.java:62) ~[?:1.8.0_77]
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(
> DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_77]
> at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_77]
>
> Someone can give me a hint what I am doing wrong?
>
> Kind regards,
> Björn
>
>