Return-Path: Delivered-To: apmail-db-jdo-dev-archive@www.apache.org Received: (qmail 26489 invoked from network); 18 Oct 2007 05:47:11 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 18 Oct 2007 05:47:11 -0000 Received: (qmail 56387 invoked by uid 500); 18 Oct 2007 05:46:59 -0000 Mailing-List: contact jdo-dev-help@db.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: jdo-dev@db.apache.org Delivered-To: mailing list jdo-dev@db.apache.org Received: (qmail 56376 invoked by uid 99); 18 Oct 2007 05:46:59 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 17 Oct 2007 22:46:59 -0700 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO brutus.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 18 Oct 2007 05:47:11 +0000 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id 03DB671422B for ; Wed, 17 Oct 2007 22:46:51 -0700 (PDT) Message-ID: <30137345.1192686411013.JavaMail.jira@brutus> Date: Wed, 17 Oct 2007 22:46:51 -0700 (PDT) From: "Chris Beams (JIRA)" To: jdo-dev@db.apache.org Subject: [jira] Commented: (JDO-538) Make more JDO APIs generic In-Reply-To: <29253486.1191439190783.JavaMail.jira@brutus> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/JDO-538?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12535839 ] Chris Beams commented on JDO-538: --------------------------------- +1 for the patch, with a couple comments / questions: 1) @deprecated - if this were Java5 only, I'd use the @Deprecated annotation vs the @deprecated javadoc tag. That said, the javadoc route does work across all versions, so makes sense to use here. 2) in the jdo-signatures text file there are lines like the following: - public Object executeWithArray(Object[] parameters); + public varargs Object executeWithArray(Object[] parameters); Would you explain this? I'm not sure what the purpose of the signatures file is, but there's no keyword 'varargs' in Java, so I must be missing something. Thanks. > Make more JDO APIs generic > -------------------------- > > Key: JDO-538 > URL: https://issues.apache.org/jira/browse/JDO-538 > Project: JDO > Issue Type: Improvement > Components: api2 > Affects Versions: JDO 2 final > Reporter: Chris Beams > Assignee: Craig Russell > Fix For: JDO 2 maintenance release 1 > > Attachments: jdo-538.patch > > > Several suggestions relating to evolving the API in support of Java5 features: > 11.6, "Optional Feature Support": > The current draft specifies the signature > Collection supportedOptions(); > then continues to read > "This method returns a Collection of String [...]" > This suggests that the signature should be > Collection supportedOptions(); > 14.6.1, "Query Execution" > I suggest we eliminate > Object execute(Object p1); > Object execute(Object p1, Object p2); > Object execute(Object p1, Object p2, Object p3); > and deprecate > Object executeWithArray(Object[] parameters); > in favor of a newly added > Object execute(Object... parameters); > This new method would seamlessly support any existing calls to the three eliminated methods, and is a proper replacement for executeWithArray(). > This would would leave us with three (non-deprecated) execution methods off the Query interface: > Object execute(); > Object execute(Object... parameters); > Object executeWithMap(Map parameters); > A slightly more radical approach to this evolution would have us also eliminate > Object execute(); > because the new varargs method can by definition support calls without arguments, > and deprecate > Object executeWithMap(Map params); > in favor of a new > Object execute(Map params); > because Java can disambiguate between calls to execute(Object... params) and execute(Map params) just fine. This is predecated by the assumption that it would never be valid to pass a Map instance as a first-class query parameter. That might be a faulty assumption, it might also just be confusing. > If all these changes were made, we'd be left with an execution API consisting of just two methods: > Object execute(Object... params); > Object execute(Map params); > This is, I believe, technically favorable and cleaner, but technical considerations are not the only valid ones. Leaving the no-arg execute() might be friendly to folks that don't understand varargs, etc. > 14.8, "Deletion by Query": > The rationale used above for paring down Query's execute methods could also be applied to Query's deletePersistentAll methods. It would be legal and Java5-ish to eliminate the no-arg deletePersistentAll method and reduce the API down to: > long deletePersistentAll(Object... params); > long deletePersistentAll(Map params); > ... > There's a number of other places in the spec changes like the ones mentioned here could be made, but I might be getting ahead of myself :-) I'll await comments before touching on anything else. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.