[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: [PATCH] JavaHL: New method for creating java objects linked to their C++ counterpart

From: Hyrum K Wright <hyrum.wright_at_wandisco.com>
Date: Thu, 14 Jun 2012 10:37:10 +0200

On Thu, Jun 14, 2012 at 10:16 AM, Mat Booth <mat.booth_at_wandisco.com> wrote:
> On 12 June 2012 03:11, Vladimir Berezniker <vmpn_at_hitechman.com> wrote:
>>
>>
>> On Mon, Jun 11, 2012 at 8:39 AM, Vladimir Berezniker <vmpn_at_hitechman.com>
>> wrote:
>>>
>>>
>>>
>>> On Mon, Jun 11, 2012 at 6:20 AM, Hyrum K Wright
>>> <hyrum.wright_at_wandisco.com> wrote:
>>>>
>>>> On Thu, Jun 7, 2012 at 4:03 AM, Vladimir Berezniker <vmpn_at_hitechman.com>
>>>> wrote:
>>>> > Hi All,
>>>> >
>>>> > The intention if this patch is to introduce reusable logic for creating
>>>> > java
>>>> > objects from within C++.  This keeps object creation logic fully within
>>>> > C++
>>>> > while leaving to java the decision as to when they will be destroyed.
>>>> > It
>>>> > will be used by RA code to allocate container object for items like
>>>> > SVNRa,
>>>> > Editor, Directory and File.
>>>> >
>>>> > Thank you,
>>>> >
>>>> > Vladimir
>>>> >
>>>> > [[[
>>>> > JavaHL: New method for creating java objects linked to their C++
>>>> > counterpart
>>>> >
>>>> > [ in subversion/bindings/javahl/native ]
>>>> >
>>>> > * SVNBase.cpp, SVNBase.h
>>>> >   (createCppBoundObject): New method for creating java objects linked
>>>> > to
>>>> > their
>>>> >     C++ counterpart
>>>> >
>>>> > [ in subversion/bindings/javahl/src/org/tigris/subversion/javahl/ ]
>>>> >
>>>> > * JNIObject.java: Base class for JNI linked java objects
>>>> > ]]]
>>>>
>>>> Looks good.  Is there a way to mark the new Java class as private?
>>>
>>>
>>> The original plan is to put RA java classes in a ra/ sub package, so
>>> package visible
>>> would not work in such case.  It is an abstract class, even if someone
>>> instantiates
>>> it will be harmless, as it will not create any C++ instances.  Would
>>> putting a good
>>> javadoc explaining it is not part of the public API address your concerns?
>>>
>>>>
>>>>
>>>> How do you plan to use this functionality?
>>>
>>>
>>> As compared to what SVNClient class does, where caller creates the java
>>> object which
>>> in turn calls native method call to create a matching native object. With
>>> RA layer,
>>> consumer calls a factory method:
>>>
>>> /**
>>> * Crates RA session for a given url with provided context
>>> * @param url to connect to
>>> * @param uuid of the remote repository, can be null if uuid check is not
>>> desired
>>> * @param config configuration to use for the session.
>>> * @return RA session
>>> */
>>> public static native ISVNRa createRaSession(String url, String uuid,
>>> ISVNRaConfig config);
>>> }
>>>
>>> that method is responsible for instantiation of the related C++ and Java
>>> classes.
>>> I think it is cleaner because:
>>>
>>> It better encapsulates implementation class: User only sees factory
>>> and ISVNRa interface
>>> Instantiation logic resides in a single language
>>> It avoids chicken and the egg with not year having cppAddr when java
>>> object is constructed: Allows enforcement that parameter is supplied via
>>> constructor argument
>>>
>>>  Relatedly, do you have a
>>>>
>>>> high-level plan for this series of patches?
>>>
>>>
>>
>> More detailed plan, full version is in the BRANCH-README on javahl-ra
>> branch:
>>
>>    * Prepare existing code for merging of SVNRa editor       [IN PROGRESS]
>>
>>       01. JavaHL: Changed return value from the
>>           java svn_stream_t read function to be compatible
>>           with the txdelta_next_window function              [trunk_at_1342720]
>>
>>       02. JavaHL: Explicitly pass jobject jthis when
>>           processing dispose() call rather  than stashing a
>>           reference in the SVNBase class where it can be
>>           misused later                                      [trunk_at_1342810]
>>
>>       03. JavaHL: Add SVN_JNI_STRING macro to reduce amount
>>           of code necessary to declare JNIStringHolder and
>>           check for exceptions                               [IN REVIEW]
>>
>>       04. JavaHL: New method for creating java objects
>>           linked to their C++ counterpart                    [IN REVIEW]
>>
>>       05. JavaHL: Factored out common context for later use
>>           by SVNRa class                                     [IN REVIEW]
>>
>>       06. JavaHL: Minimal implementation of SVNRa            [TODO]
>>
>>       07. JavaHL: Merge existing SVNRepoAccess into SVNRA    [TODO]
>>
>>
>>    * Implement other ra functions not requiring addition code
>>      refactoring                                             [TODO]
>>
>>
>>    * Apply editor support patches                            [TODO]
>>       xx. JavaHL: Support returning non const, empty rather
>>           than NULL hash as required by
>>           (svn_ra_get_commit_editor3)
>>           apr_hash_t *revprop_table parameter                [br._at_1343456
>> TBR]
>>
>>       xx. JavaHL: Support keeping global reference to the
>>           callback java object as required by the RA API due
>>           to callback being used across method calls         [TODO]
>>
>>       xx. JavaHL: Added support for creating of svn_string_t
>>           from JNIByteArray                                  [TODO]
>>
>>       xx. JavaHL: Added SVN_JNI_BYTE_ARRAY macro to reduce
>>           amount of duplicate code dealing with jbyteArray
>>           wrapper and checking for exceptions                [TODO]
>>
>>       xx. JavaHL: Factor out common java string map
>>           processing into StringsTable class from
>>           svn_string_t specific processing in the
>>           RevpropTable class                                 [TODO]
>>
>>
>
> Hi Vladimir,
>
> When you start implementing JavaHL RA, what would be the best way for
> me to try it out? Will the work be on this branch first:
> http://svn.apache.org/repos/asf/subversion/branches/javahl-ra/ ?

I think that's the goal. We're encouraging him to put as much "common
functionality" type stuff on trunk, though.

-Hyrum

-- 
uberSVN: Apache Subversion Made Easy
http://www.uberSVN.com/
Received on 2012-06-14 10:37:44 CEST

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.