Return-Path: X-Original-To: apmail-subversion-commits-archive@minotaur.apache.org Delivered-To: apmail-subversion-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 262B3D866 for ; Thu, 21 Jun 2012 03:34:31 +0000 (UTC) Received: (qmail 28290 invoked by uid 500); 21 Jun 2012 03:34:31 -0000 Delivered-To: apmail-subversion-commits-archive@subversion.apache.org Received: (qmail 28233 invoked by uid 500); 21 Jun 2012 03:34:29 -0000 Mailing-List: contact commits-help@subversion.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@subversion.apache.org Delivered-To: mailing list commits@subversion.apache.org Received: (qmail 28188 invoked by uid 99); 21 Jun 2012 03:34:27 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 21 Jun 2012 03:34:27 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 21 Jun 2012 03:34:25 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id CC09123889BF; Thu, 21 Jun 2012 03:34:05 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1352400 - in /subversion/branches/javahl-ra/subversion/bindings/javahl: native/SVNBase.cpp native/SVNBase.h src/org/apache/subversion/javahl/JNIObject.java Date: Thu, 21 Jun 2012 03:34:05 -0000 To: commits@subversion.apache.org From: vmpn@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120621033405.CC09123889BF@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: vmpn Date: Thu Jun 21 03:34:05 2012 New Revision: 1352400 URL: http://svn.apache.org/viewvc?rev=1352400&view=rev Log: On the javahl-ra branch: 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 Added: subversion/branches/javahl-ra/subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIObject.java Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNBase.cpp subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNBase.h Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNBase.cpp URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNBase.cpp?rev=1352400&r1=1352399&r2=1352400&view=diff ============================================================================== --- subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNBase.cpp (original) +++ subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNBase.cpp Thu Jun 21 03:34:05 2012 @@ -97,3 +97,29 @@ inline void SVNBase::findCppAddrFieldID( } } } + +jobject SVNBase::createCppBoundObject(const char *clazzName) +{ + JNIEnv *env = JNIUtil::getEnv(); + + // Create java session object + jclass clazz = env->FindClass(clazzName); + if (JNIUtil::isJavaExceptionThrown()) + return NULL; + + static jmethodID ctor = 0; + if (ctor == 0) + { + ctor = env->GetMethodID(clazz, "", "(J)V"); + if (JNIUtil::isJavaExceptionThrown()) + return NULL; + } + + jlong cppAddr = this->getCppAddr(); + + jobject jself = env->NewObject(clazz, ctor, cppAddr); + if (JNIUtil::isJavaExceptionThrown()) + return NULL; + + return jself; +} Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNBase.h URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNBase.h?rev=1352400&r1=1352399&r2=1352400&view=diff ============================================================================== --- subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNBase.h (original) +++ subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNBase.h Thu Jun 21 03:34:05 2012 @@ -82,6 +82,11 @@ class SVNBase */ void dispose(jobject jthis, jfieldID *fid, const char *className); + /** + * Instantiates java object attached to this base object + */ + jobject createCppBoundObject(const char *clazzName); + private: /** * If the value pointed to by @a fid is zero, find the @c jfieldID Added: subversion/branches/javahl-ra/subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIObject.java URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIObject.java?rev=1352400&view=auto ============================================================================== --- subversion/branches/javahl-ra/subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIObject.java (added) +++ subversion/branches/javahl-ra/subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIObject.java Thu Jun 21 03:34:05 2012 @@ -0,0 +1,43 @@ +/** + * @copyright + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * ==================================================================== + * @endcopyright + */ + +package org.apache.subversion.javahl; + +/** + * This class is used internally by the JavaHL implementation and not + * considered part part of the public API. + */ +public abstract class JNIObject +{ + /** + * slot for the address of the native peer. + * The JNI code controls this field. If it is set to 0 then + * underlying JNI object has been freed + */ + protected long cppAddr; + + protected JNIObject(long cppAddr) + { + this.cppAddr = cppAddr; + } +}