tomee-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Fabio Jun Takada Chino (JIRA)" <>
Subject [jira] [Commented] (TOMEE-2223) Incorrect JPA entity used when running under docker
Date Tue, 21 Aug 2018 16:59:00 GMT


Fabio Jun Takada Chino commented on TOMEE-2223:


Each concrete class has only a single no argument constructor that calls the constructor of
the base abstract class using the correct parameters.If it was a problem with the constructors,
the problem would surface as a NullPointerException instead of the usage of the wrong class
inside the proxy. Anyway, I moved the initialization to a PostConstruct method and the effect
remains the same. Sometimes it still generates the wrong proxy for EntityARepository.

The problem is actually related to the fact that the proxy for EntityARepository is encapsulating
an instance of the class EntityBRepository and is calling its methods instead. I'm sure that
it is what is happening because EntityBRepository has an extra field that EntityARepository
does not have and it appears in the debugger during the incorrect call. Furthermore, the interface
for EntityBRepository has an additional method that EntityARepository doesn't so they do not
share the same interface.

It is more likely that the proxy generator is messing up with both classes. Since it is random,
I guess it may be related to an odd race condition during the application deployment or even
an issue with the JVM inside docker because I cannot reproduce the issue when I'm running
outside it.

Another possible issue is that my annotations are not referencing the classes and interfaces
explicitly. I'll try to change the annotations and see if it changes the behavior of the application.

As soon as I have news, I'll post it here.

> Incorrect JPA entity used when running under docker
> ---------------------------------------------------
>                 Key: TOMEE-2223
>                 URL:
>             Project: TomEE
>          Issue Type: Bug
>          Components: TomEE Core Server
>    Affects Versions: 7.0.5
>         Environment: * Docker version 17.12.1-ce, build 7390fc6;
> * Official Ubuntu 18.04 (x64) docker image with OpenJDK 8 installed;
> * apache-tomee-webprofile-7.0.5;
> * Apache Derby (embedded);
>            Reporter: Fabio Jun Takada Chino
>            Priority: Minor
> While packing a very simple web application inside a docker container based on the official
Ubuntu 18.04 image, I found a very inconvenient error related to OpenJPA using the wrong entity
to access the database.
> When it happens, the following exception can be found in the log:
> {{org.apache.openjpa.persistence.ArgumentException : The given value "test" cannot be
converted into an identity for "class EntityB".  The value is the wrong type (java.lang.String)}}{{
using the wrong entity to store information inside}}
> The major problem with this code is that the actual method is trying to access the entity
EntityA instead of EntityB. The conversion error occurs because the ID for EntityB is a composite
value while the ID for EntityA is indeed a string.
> Given that, I tried to trace the issue using a remote debugger but, when I activate,
the problem vanishes. It does not matter if the debugger is connected or not. Since it is
not a critical application, I can workaround it by leaving the remote debugger enabled but
it would be a real issue for production environment.
> The docker image I'm using as the base can be found in the Docker Hub with the name opencs/ubuntu-openjdk-8-headless.
> The application is a single WAR file with some EJBs, JPA entities, a few servlets and
a few JSF pages. Almost all JPA entities have single primary keys but one of them have a composite
key with 2 strings.
> Thanks in advance,

This message was sent by Atlassian JIRA

View raw message