The particular issue that was causing spring data jpa to fail - suffice to say it is no longer failing with 3.1.0-SNAPSHOT
Michael On Wed, 10 Apr 2019 at 15:02, Jonathan Gallimore < jonathan.gallim...@gmail.com> wrote: > FYI - forwarding to list > > ---------- Forwarded message --------- > From: Michael Wiles <michael.wi...@gmail.com> > Date: Wed, Apr 10, 2019 at 9:24 AM > Subject: Re: [VOTE] [CANCELLED] Release Apache OpenJPA-3.1.0 > To: Jonathan Gallimore <jonathan.gallim...@gmail.com> > > > Created https://issues.apache.org/jira/browse/OPENJPA-2785 > > > > On Tue, 9 Apr 2019 at 21:20, Jonathan Gallimore < > jonathan.gallim...@gmail.com> wrote: > > > Hi Mark > > > > The test that failed in TomEE was org.superbiz.dynamic.DynamicUserDaoTest > > in examples/spring-proxy-data. > > > > Thanks for looking at this. > > > > Jon > > > > On Tue, Apr 9, 2019 at 8:13 PM Mark Struberg <strub...@yahoo.de.invalid> > > wrote: > > > >> I think I remember where I added it. > >> > >> It has to do with OPENJPA-2733 and using the same ParameterExpression. > >> > >> The tricky part is how to match parameter expressions. The same 'param' > >> can be used in 2 subqueries. > >> Or 2 separate ParameterExpression instances can be used with the same > >> name. > >> > >> Still you only have one query.setParameter("thatName" ... > >> > >> Jean-Louis, can you please check which test did fail in TomEE? > >> Would like to add test coverage for this scenario directly in OpenJPA. > >> > >> LieGrue, > >> strub > >> > >> > Am 09.04.2019 um 20:52 schrieb Mark Struberg > <strub...@yahoo.de.INVALID > >> >: > >> > > >> > Oki, it should be rather easy to fix. > >> > > >> > Do we have a ticket for it already? Then I try to work on it tomorrow > >> and ship a new VOTE. > >> > > >> > Txs all for testing and finding this glitch! > >> > > >> > > >> > LieGrue, > >> > strub > >> > > >> > > >> >> Am 09.04.2019 um 20:39 schrieb Romain Manni-Bucau < > >> rmannibu...@gmail.com>: > >> >> > >> >> 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 <strub...@yahoo.de.invalid > > > >> 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 < > >> michael.wi...@gmail.com>: > >> >>>> > >> >>>> 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 < > >> rmannibu...@gmail.com> > >> >>>> 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 < > >> >>>>> jonathan.gallim...@gmail.com> 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 < > >> >>>>> rmannibu...@gmail.com> > >> >>>>>> 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 < > >> >>>>>>> jonathan.gallim...@gmail.com> 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 < > >> >>>>>>>> jonathan.gallim...@gmail.com> 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 < > >> >>>>>> solomax...@gmail.com> > >> >>>>>>>>> wrote: > >> >>>>>>>>> > >> >>>>>>>>>> +1 > >> >>>>>>>>>> > >> >>>>>>>>>> Thanks for this release! > >> >>>>>>>>>> > >> >>>>>>>>>> On Sun, 7 Apr 2019 at 17:29, Francesco Chicchiriccò < > >> >>>>>>>> ilgro...@apache.org> > >> >>>>>>>>>> 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 > >> >>> > >> >>> > >> > > >> > >> > > -- > see my blog: > http://analysis102.blogspot.com > http://audiblethoughts.blogspot.com > http://outsideofficehours.blogspot.com > -- see my blog: http://analysis102.blogspot.com http://audiblethoughts.blogspot.com http://outsideofficehours.blogspot.com