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, "<init>", "(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;
+ }
+}