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

Reply via email to