On Thu, Jun 14, 2012 at 4:37 AM, Hyrum K Wright
<hyrum.wri...@wandisco.com>wrote:

> On Thu, Jun 14, 2012 at 10:16 AM, Mat Booth <mat.bo...@wandisco.com>
> wrote:
> > On 12 June 2012 03:11, Vladimir Berezniker <v...@hitechman.com> wrote:
> >>
> >>
> >> On Mon, Jun 11, 2012 at 8:39 AM, Vladimir Berezniker <
> v...@hitechman.com>
> >> wrote:
> >>>
> >>>
> >>>
> >>> On Mon, Jun 11, 2012 at 6:20 AM, Hyrum K Wright
> >>> <hyrum.wri...@wandisco.com> wrote:
> >>>>
> >>>> On Thu, Jun 7, 2012 at 4:03 AM, Vladimir Berezniker <
> v...@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@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@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.@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/ ?
>
>
Are there any particular features of the RA JavaHL layer that you would
be interested in trying out?


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

Yep, that is the approach I am following.


To give more context to the way this has been progressing: I  submit
few (0 to ~3) patches to make it easier to review while developing few steps
ahead on my local PC so that if/when the patches are signed off I have the
next batch ready, without getting too much ahead; as I keep realizing better
ways to design the code due to the received feedback.

I try to keep the plan reflective of my local progress, so where you see
more
detail that means I have at least partial code locally, and where the plan
has less
detail that means the code to back that step is not there yet.

Regards,

Vladimir

Reply via email to