Mark, I tend to think it can be a blocker, criteria API looks broken even
in not spring data apps with some generic querying capabilities and I didnt
even check primefaces.

What's the cost of a release these days - never did one on openjpa. If two
mvn commands I'm tempted to relaunch it straight, if a week I can agree
with your proposal.

Wdyt?

Le mar. 9 avr. 2019 à 20:33, Mark Struberg <[email protected]> a
écrit :

> Hi Michael!
>
> I'd still move forward and fix this in a follow up release which we will
> ship soon.
> Is this ok for you?
> Can you please file a ticket so it doesn't get lost?
>
> LieGrue,
> strub
>
> > Am 09.04.2019 um 16:20 schrieb Michael Wiles <[email protected]>:
> >
> > I use Spring DAta extensively and am a big fan of openjpa so I want them
> to
> > place nice...
> >
> > I can't upgrade the 3.1 until this issue is fixed as basically, as far
> as I
> > can tell, any parameterised call via spring data does not work.
> >
> > Not sure it's the right place to discuss this but the way I see it the
> > ParameterExpressionImpl (
> >
> https://github.com/apache/openjpa/blob/master/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/ParameterExpressionImpl.java
> )
> > has acquired a hashCode and equals with this release -
> >
> https://github.com/apache/openjpa/commit/0e4ec5b392b978c4515b26c60e485f2b610de94f#diff-e357856846fb8b88f15c08e60891cc35
> > and
> > this is the code of the problem with spring data.
> >
> > Now what's happening is that the compile is called - and this is called
> > before the parameter expression has a value. All hashcode calcs are done
> > and stuff is added to a set.
> >
> > Then later on the value for the parameter is set. This causes changes to
> > the hashCode and equals, resulting in the problem that I'm seeing.
> >
> > Now I apologise if I'm completely out of line but I'm wondering why the
> > value is included in the hashCode and equals of a Parameter as surely a
> > value is a "runtime" concept and it not necessarily available at compile
> > time.
> >
> > Now the hashCode and equals were added for good reason I assume, and
> > furthermore, the value is included in the hashCode/equals also for good
> > reason. But we arguably need a mechanism to view the parameter purely
> from
> > a metadata point of view (which is I think what we need here) as well as
> > from a metadata+value point of view.
> >
> > But I do wonder why the ParamterExpressionImpl does include the value in
> > the hashCode and equals. My gut feel is that it's not necessary.
> >
> > Relevant stack traces: first time hashCode is called - at this point the
> > value is not specified in the ParameterExpressionImpl. Notice that the
> > CriteriaQueryImpl.compile kicks this off.
> >
> >
> org.apache.openjpa.persistence.criteria.ParameterExpressionImpl<T>.hashCode()
> > line: 154
> > java.util.HashMap<K,V>.hash(java.lang.Object) line: 338
> >
> java.util.LinkedHashMap<K,V>(java.util.HashMap<K,V>).containsKey(java.lang.Object)
> > line: 595
> > org.apache.openjpa.lib.util.OrderedMap<K,V>.containsKey(java.lang.Object)
> > line: 70
> >
> org.apache.openjpa.persistence.criteria.CriteriaQueryImpl<T>.registerParameter(org.apache.openjpa.persistence.criteria.ParameterExpressionImpl<?>)
> > line: 227
> >
> org.apache.openjpa.persistence.criteria.CriteriaExpressionVisitor$ParameterVisitor.enter(org.apache.openjpa.persistence.criteria.CriteriaExpression)
> > line: 106
> >
> org.apache.openjpa.persistence.criteria.Expressions.acceptVisit(org.apache.openjpa.persistence.criteria.CriteriaExpressionVisitor,
> > org.apache.openjpa.persistence.criteria.CriteriaExpression,
> > javax.persistence.criteria.Expression<?>...) line: 106
> >
> org.apache.openjpa.persistence.criteria.ParameterExpressionImpl<T>(org.apache.openjpa.persistence.criteria.SelectionImpl<X>).acceptVisit(org.apache.openjpa.persistence.criteria.CriteriaExpressionVisitor)
> > line: 156
> >
> org.apache.openjpa.persistence.criteria.Expressions.visitChildren(org.apache.openjpa.persistence.criteria.CriteriaExpressionVisitor,
> > javax.persistence.criteria.Expression<?>...) line: 121
> >
> org.apache.openjpa.persistence.criteria.Expressions.acceptVisit(org.apache.openjpa.persistence.criteria.CriteriaExpressionVisitor,
> > org.apache.openjpa.persistence.criteria.CriteriaExpression,
> > javax.persistence.criteria.Expression<?>...) line: 108
> >
> org.apache.openjpa.persistence.criteria.Expressions$Equal(org.apache.openjpa.persistence.criteria.Expressions$BinaryLogicalExpression).acceptVisit(org.apache.openjpa.persistence.criteria.CriteriaExpressionVisitor)
> > line: 278
> >
> org.apache.openjpa.persistence.criteria.CriteriaQueryImpl<T>.collectParameters(org.apache.openjpa.persistence.criteria.CriteriaExpressionVisitor)
> > line: 681
> > *org.apache.openjpa.persistence.criteria.CriteriaQueryImpl<T>.compile()
> > line: 672 *
> >
> org.apache.openjpa.persistence.EntityManagerImpl.createQuery(javax.persistence.criteria.CriteriaQuery<T>)
> > line: 1898
> >
> > Then the error I get, occurs here - in
> org.apache.openjpa.kernel.QueryImpl
> >
> >  protected void assertParameters(StoreQuery q, StoreQuery.Executor ex,
> Map
> > params) {
> >        if (!q.requiresParameterDeclarations())
> >            return;
> >
> >        OrderedMap<Object,Class<?>> paramTypes =
> > ex.getOrderedParameterTypes(q);
> > *        for (Object actual : params.keySet()) {*
> > *            if (!paramTypes.containsKey(actual))*
> >            throw new UserException(_loc.get("unbound-params",
> >                actual, paramTypes.keySet()));
> >        }
> >        for (Object expected : paramTypes.keySet()) {
> >            if (!params.containsKey(expected))
> >            throw new UserException(_loc.get("unbound-params",
> >                expected, paramTypes.keySet()));
> >        }
> >
> >        for (Entry<Object, Class<?>> entry : paramTypes.entrySet()) {
> >            if (entry.getValue().isPrimitive()
> >                && params.get(entry.getKey()) == null)
> >                throw new UserException(_loc.get("null-primitive-param",
> > entry.getKey()));
> >        }
> >    }
> >
> > The error occurs in the bold stuff.
> >
> > And the fundamental reason as far as I can tell is that the paramtypes
> map
> > was populated when the value was set and then the *actual* reference in
> > this code has the value set...
> >
> > Iow, getOrderedParameterTypes returns the map created before the value
> was
> > set and the params.keySet has parameterExpressionImpls that have their
> > values set.
> >
> > And you know what happens when you use a hashMap and you change the
> > hashCode after you've populated the hashmap.
> >
> > Error stack trace:
> > at
> org.apache.openjpa.kernel.QueryImpl.assertParameters(QueryImpl.java:1849)
> > at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:905)
> > at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:843)
> > at
> >
> org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:601)
> > at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:297)
> > at
> >
> org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:314)
> > at
> >
> org.apache.openjpa.persistence.QueryImpl.getSingleResult(QueryImpl.java:343)
> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > at
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> > at
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > at java.lang.reflect.Method.invoke(Method.java:498)
> > at org.springframework.orm.jpa.SharedEntityManagerCreat
> >
> > On Mon, 8 Apr 2019 at 23:24, Romain Manni-Bucau <[email protected]>
> > wrote:
> >
> >> Yep, same thought
> >>
> >> No worries, we can always delay a bit the end of the vote to be sure of
> the
> >> quality we deliver
> >>
> >> Le lun. 8 avr. 2019 à 23:13, Jonathan Gallimore <
> >> [email protected]> a écrit :
> >>
> >>> At the moment, I believe its a spring-data thing rather than an OpenEJB
> >>> thing. I'll try and come up with an actual test, but it'll likely be
> >>> tomorrow morning. Hope that's ok.
> >>>
> >>> Jon
> >>>
> >>> On Mon, Apr 8, 2019 at 10:08 PM Romain Manni-Bucau <
> >> [email protected]>
> >>> wrote:
> >>>
> >>>> IMHO if we break spring data it is a blocker, if we break openejb
> layer
> >>> it
> >>>> is not since fixable with the upgrade.
> >>>>
> >>>> Le lun. 8 avr. 2019 à 23:05, Jonathan Gallimore <
> >>>> [email protected]> a écrit :
> >>>>
> >>>>> Removing the equals() and hashcode() methods added on
> >>>>> ParameterExpressionImpl here:
> >>>>>
> >>>>>
> >>>>
> >>>
> >>
> https://github.com/apache/openjpa/commit/0e4ec5b392b978c4515b26c60e485f2b610de94f#diff-e357856846fb8b88f15c08e60891cc35
> >>>>> enables
> >>>>> the test I mentioned to pass. It seems that _boundsParam.get() here:
> >>>>>
> >>>>>
> >>>>
> >>>
> >>
> https://github.com/apache/openjpa/blob/master/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AbstractQuery.java#L81
> >>>>> fails
> >>>>> with these equals()/hashcode() methods.
> >>>>>
> >>>>> Will see if I can fix and send a patch. I'm not sure if this issue
> >>> would
> >>>> be
> >>>>> considered to be a release blocker or not.
> >>>>>
> >>>>> Jon
> >>>>>
> >>>>> On Mon, Apr 8, 2019 at 11:25 AM Jonathan Gallimore <
> >>>>> [email protected]> wrote:
> >>>>>
> >>>>>> I get a single test failure on the TomEE side with this release -
> >>>>>> specifically org.superbiz.dynamic.DynamicUserDaoTest in
> >>>>>> examples/spring-proxy-data. I'll take a look during the day.
> >>> Otherwise,
> >>>>>> I'm +1. Thanks for the new release!
> >>>>>>
> >>>>>> Jon
> >>>>>>
> >>>>>> On Sun, Apr 7, 2019 at 3:14 PM Maxim Solodovnik <
> >>> [email protected]>
> >>>>>> wrote:
> >>>>>>
> >>>>>>> +1
> >>>>>>>
> >>>>>>> Thanks for this release!
> >>>>>>>
> >>>>>>> On Sun, 7 Apr 2019 at 17:29, Francesco Chicchiriccò <
> >>>>> [email protected]>
> >>>>>>> wrote:
> >>>>>>>>
> >>>>>>>> On 2019-04-06 14:52 Mark Struberg wrote:
> >>>>>>>>> hi folks!
> >>>>>>>>>
> >>>>>>>>> We have fixed tons of enhancements and bugs in OpenJPA for our
> >>>> 3.1.0
> >>>>>>>>> release.
> >>>>>>>>> One of the main improvements is to move to a native JavaEE8
> >>> level
> >>>> -
> >>>>>>>>> JPA-2.2.
> >>>>>>>>> Please note that we implemented many JPA-2.2 features but not
> >>> all
> >>>>> yet.
> >>>>>>>>> We will work towards implementing the rest of the missing 2.2
> >>>> stuff
> >>>>> in
> >>>>>>>>> the next bugfix releases.
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> Here are the fixed tickets:
> >>>>>>>>>
> >>>>>>>>> Sub-task
> >>>>>>>>>
> >>>>>>>>>      • [OPENJPA-2710] - Create and update to
> >>>> geronimo-jpa_2.2_spec
> >>>>>>>>> Bug
> >>>>>>>>>
> >>>>>>>>>      • [OPENJPA-1993] - Deadlock Potential with ORM XML
> >>>> Processing
> >>>>>>>>>      • [OPENJPA-2555] - Timestamp precision from manual
> >> schema
> >>>> not
> >>>>>>>>> respected
> >>>>>>>>>      • [OPENJPA-2567] - TINY/MEDIUM/LONG TEXT fields for
> >> MySQL
> >>>> and
> >>>>>>> MariaDB
> >>>>>>>>> are not supported
> >>>>>>>>>      • [OPENJPA-2673] - Table is not created in openjpa
> >>>>>>> 3.0.0-SNAPSHOT and
> >>>>>>>>> OSGi
> >>>>>>>>>      • [OPENJPA-2704] - The openjpa.jdbc.Schema no longer
> >>>> overrides
> >>>>>>> orm.xml
> >>>>>>>>> default
> >>>>>>>>>      • [OPENJPA-2733] - Subquery parameters are incorrectly
> >>>>> assigned
> >>>>>>>>>      • [OPENJPA-2742] - SchemaTool fails with MySQL
> >>>>>>>>>      • [OPENJPA-2746] - OpenJPA Karaf feature is not complete
> >>>>>>>>>      • [OPENJPA-2756] - PostgreSQL requires escaping of
> >> search
> >>>>>>> strings in
> >>>>>>>>> all versions
> >>>>>>>>>      • [OPENJPA-2757] - upgrade to xbean-asm7 to support
> >> Java11
> >>>>>>>>>      • [OPENJPA-2761] - problem inserting more than 4000
> >>>> charcters
> >>>>> in
> >>>>>>>>> oracle XMLTYPE column
> >>>>>>>>>      • [OPENJPA-2764] - Map path expression tests behave
> >> random
> >>>>>>>>>      • [OPENJPA-2768] - XMLStore SAXParser doesn't
> >> distinguish
> >>>>>>> between
> >>>>>>>>> element and extent
> >>>>>>>>>      • [OPENJPA-2770] - false boolean literal doesn't work
> >>>>>>>>>      • [OPENJPA-2771] - It seems like h2 'unlimited' is not
> >>>> "LIMIT
> >>>>>>> 0" but
> >>>>>>>>> rather "LIMIT -1"
> >>>>>>>>>      • [OPENJPA-2772] - list of h2 reserved words is
> >> incomplete
> >>>>>>>>>      • [OPENJPA-2777] - Indices specified using
> >>>>>>> javax.persistence.Index
> >>>>>>>>> annotation are not being created
> >>>>>>>>>      • [OPENJPA-2780] - ReverseMappingTool does not generate
> >>>>>>> @Enumerated
> >>>>>>>>> annotation
> >>>>>>>>>      • [OPENJPA-2781] - OpenJPA need internet connection to
> >>> read
> >>>>> the
> >>>>>>>>> persistence.xml
> >>>>>>>>> Improvement
> >>>>>>>>>
> >>>>>>>>>      • [OPENJPA-2745] - Clean up try-catch implementation for
> >>>>>>> DB2Dictionary
> >>>>>>>>>      • [OPENJPA-2747] - Upgrade to JPA 2.2 and use
> >>>>>>> javax.persistence-api
> >>>>>>>>> spec
> >>>>>>>>>      • [OPENJPA-2748] - commons-collections should be updated
> >>> to
> >>>>> most
> >>>>>>>>> recent version
> >>>>>>>>>      • [OPENJPA-2750] - commons-dbcp need to be updated to
> >> most
> >>>>>>> recent
> >>>>>>>>> version
> >>>>>>>>>      • [OPENJPA-2751] - Code clean-up should be performed
> >>>>>>>>>      • [OPENJPA-2752] - More libraries can be updated
> >>>>>>>>>      • [OPENJPA-2753] - Create profiles to start various
> >>>> databases
> >>>>>>> via
> >>>>>>>>> Docker
> >>>>>>>>>      • [OPENJPA-2755] - support MySQL DATETIME and TIMESTAMP
> >>>>>>> fractions
> >>>>>>>>> (milliseconds, nanos)
> >>>>>>>>>      • [OPENJPA-2773] - set minIdle to > 0 in
> >>>> DBCPDriverDataSource
> >>>>>>>>>      • [OPENJPA-2775] - hsqldb doesn't support NullTable to
> >>>>> retrieve
> >>>>>>> meta
> >>>>>>>>> information
> >>>>>>>>> Task
> >>>>>>>>>
> >>>>>>>>>      • [OPENJPA-2744] - commons-pool should be updated to
> >> most
> >>>>> recent
> >>>>>>>>> version
> >>>>>>>>>      • [OPENJPA-2754] - update to latest dbcp and verify
> >> moving
> >>>>> from
> >>>>>>>>> maxActive to maxTotal
> >>>>>>>>>      • [OPENJPA-2758] - JPA 2.2 compliance
> >>>>>>>>> Dependency upgrade
> >>>>>>>>>
> >>>>>>>>>      • [OPENJPA-2784] - update docs before our release
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> The staging repository is at:
> >>>>>>>>>
> >>>>>>>
> >>>>>
> >>>>
> >>>
> >>
> https://repository.apache.org/content/repositories/orgapacheopenjpa-1005/
> >>>>>>>>>
> >>>>>>>>> The source release is at
> >>>>>>>>>
> >>>>>>>
> >>>>>
> >>>>
> >>>
> >>
> https://repository.apache.org/content/repositories/orgapacheopenjpa-1005/org/apache/openjpa/openjpa-parent/3.1.0/
> >>>>>>>>> sha1 is 1aea7cfff20c3a5fed57fb41fb1fcd4784b999ae
> >>>>>>>>>
> >>>>>>>>> I've pushed the release branch to my github repo
> >>>>>>>>> https://github.com/struberg/openjpa/tree/release-3.1.0
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> Please VOTE:
> >>>>>>>>>
> >>>>>>>>> [+1] yeah, ship it!
> >>>>>>>>> [+0] meh, don't care
> >>>>>>>>> [-1] nah, because ${showstopper}
> >>>>>>>>
> >>>>>>>> +1
> >>>>>>>>
> >>>>>>>> ..and special thanks to Mark, for his enduring effort!
> >>>>>>>> Regards.
> >>>>>>>> --
> >>>>>>>> Francesco Chicchiriccò
> >>>>>>>>
> >>>>>>>> Tirasa - Open Source Excellence
> >>>>>>>> http://www.tirasa.net/
> >>>>>>>>
> >>>>>>>> Member at The Apache Software Foundation
> >>>>>>>> Syncope, Cocoon, Olingo, CXF, OpenJPA, PonyMail
> >>>>>>>> http://home.apache.org/~ilgrosso/
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> --
> >>>>>>> WBR
> >>>>>>> Maxim aka solomax
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>
> >>
> >
> >
> > --
> > see my blog:
> > http://analysis102.blogspot.com
> > http://audiblethoughts.blogspot.com
> > http://outsideofficehours.blogspot.com
>
>

Reply via email to