Index: subversion/bindings/javahl/native/SVNBase.cpp =================================================================== --- subversion/bindings/javahl/native/SVNBase.cpp (revision 1347593) +++ subversion/bindings/javahl/native/SVNBase.cpp (working copy) @@ -97,3 +97,29 @@ } } } + +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; +} Index: subversion/bindings/javahl/native/SVNBase.h =================================================================== --- subversion/bindings/javahl/native/SVNBase.h (revision 1347593) +++ subversion/bindings/javahl/native/SVNBase.h (working copy) @@ -82,6 +82,11 @@ */ 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 Index: subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIObject.java =================================================================== --- subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIObject.java (revision 0) +++ subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIObject.java (working copy) @@ -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; + } +}