java_info.h
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:9k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1997-2002
  5.  * Sleepycat Software.  All rights reserved.
  6.  *
  7.  * $Id: java_info.h,v 11.35 2002/08/29 14:22:23 margo Exp $
  8.  */
  9. #ifndef _JAVA_INFO_H_
  10. #define _JAVA_INFO_H_
  11. /*
  12.  * "Info" classes for Java implementation of Berkeley DB API.
  13.  * These classes hold extra information for which there is
  14.  * no room or counterpart in the base classes used in the C API.
  15.  * In the case of a DBT, the DBT_javainfo class is stored in the
  16.  * 'private' variable of the java Dbt, and the DBT_javainfo is subclassed
  17.  * from a DBT.  In the case of DB and DB_ENV, the appropriate
  18.  * info objects are pointed to by the DB and DB_ENV objects.
  19.  * This is convenient to implement callbacks.
  20.  */
  21. /****************************************************************
  22.  *
  23.  * Declaration of class DBT_javainfo
  24.  *
  25.  * A DBT_javainfo is created whenever a Dbt (java) object is created,
  26.  * and a pointer to it is stored in its private info storage.
  27.  * It is subclassed from DBT, because we must retain some extra
  28.  * information in it while it is in use.  In particular, when
  29.  * a java array is associated with it, we need to keep a Globally
  30.  * Locked reference to it so it is not GC'd.  This reference is
  31.  * destroyed when the Dbt is GC'd.
  32.  */
  33. typedef struct _dbt_javainfo
  34. {
  35. DBT dbt;
  36. DB *db; /* associated DB */
  37. jobject dbtref; /* the java Dbt object */
  38. jbyteArray array; /* the java array object -
  39.    this is only valid during the API call */
  40. int offset; /* offset into the Java array */
  41. #define DBT_JAVAINFO_LOCKED 0x01 /* a LOCKED_DBT has been created */
  42. u_int32_t flags;
  43. }
  44. DBT_JAVAINFO; /* used with all 'dbtji' functions */
  45. /* create/initialize a DBT_JAVAINFO object */
  46. extern DBT_JAVAINFO *dbjit_construct();
  47. /* free this DBT_JAVAINFO, releasing anything allocated on its behalf */
  48. extern void dbjit_destroy(DBT_JAVAINFO *dbjit);
  49. /****************************************************************
  50.  *
  51.  * Declaration of class DB_ENV_JAVAINFO
  52.  *
  53.  * A DB_ENV_JAVAINFO is allocated and stuffed into the cj_internal
  54.  * and the db_errpfx for every DB_ENV created.  It holds a
  55.  * little extra info that is needed to support callbacks.
  56.  *
  57.  * There's a bit of trickery here, because we have built this
  58.  * above a layer that has a C function callback that gets
  59.  * invoked when an error occurs.  One of the C callback's arguments
  60.  * is the prefix from the DB_ENV, but since we stuffed a pointer
  61.  * to our own DB_ENV_JAVAINFO into the prefix, we get that object as an
  62.  * argument to the C callback.  Thus, the C callback can have
  63.  * access to much more than just the prefix, and it needs that
  64.  * to call back into the Java enviroment.
  65.  *
  66.  * The DB_ENV_JAVAINFO object holds a copy of the Java Virtual Machine,
  67.  * which is needed to attach to the current running thread
  68.  * whenever we need to make a callback.  (This is more reliable
  69.  * than our previous approach, which was to save the thread
  70.  * that created the DbEnv).  It also has the Java callback object,
  71.  * as well as a 'default' callback object that is used when the
  72.  * caller sets the callback to null.  It also has the original
  73.  * error prefix, since we overwrote the one in the DB_ENV.
  74.  * There are also fields that are unrelated to the handling
  75.  * of callbacks, but are convenient to attach to a DB_ENV.
  76.  *
  77.  * Note: We assume that the Java layer is the only one
  78.  * fiddling with the contents of db_errpfx, db_errcall, cj_internal
  79.  * for a DB_ENV that was created via Java.  Since the Java layer should
  80.  * have the only pointer to such a DB_ENV, this should be true.
  81.  */
  82. typedef struct _db_env_javainfo
  83. {
  84. JavaVM *javavm;
  85. int is_dbopen;
  86. char *errpfx;
  87. jobject jenvref; /* global reference */
  88. jobject default_errcall; /* global reference */
  89. jobject errcall; /* global reference */
  90. jobject feedback; /* global reference */
  91. jobject rep_transport; /* global reference */
  92. jobject app_dispatch; /* global reference */
  93. jobject recovery_init; /* global reference */
  94. u_char *conflict;
  95. size_t conflict_size;
  96. jint construct_flags;
  97. }
  98. DB_ENV_JAVAINFO; /* used with all 'dbjie' functions */
  99. /* create/initialize an object */
  100. extern DB_ENV_JAVAINFO *dbjie_construct(JNIEnv *jnienv,
  101.        jobject jenv,
  102.        jobject default_errcall,
  103.        int is_dbopen);
  104. /* release all objects held by this this one */
  105. extern void dbjie_dealloc(DB_ENV_JAVAINFO *, JNIEnv *jnienv);
  106. /* free this object, releasing anything allocated on its behalf */
  107. extern void dbjie_destroy(DB_ENV_JAVAINFO *, JNIEnv *jnienv);
  108. /* This gets the environment for the current thread */
  109. extern JNIEnv *dbjie_get_jnienv(DB_ENV_JAVAINFO *);
  110. extern void dbjie_set_errpfx(DB_ENV_JAVAINFO *, JNIEnv *jnienv,
  111.      jstring errpfx);
  112. extern jstring dbjie_get_errpfx(DB_ENV_JAVAINFO *, JNIEnv *jnienv);
  113. extern void dbjie_set_errcall(DB_ENV_JAVAINFO *, JNIEnv *jnienv,
  114.       jobject new_errcall);
  115. extern void dbjie_set_conflict(DB_ENV_JAVAINFO *, u_char *v, size_t sz);
  116. extern void dbjie_set_feedback_object(DB_ENV_JAVAINFO *, JNIEnv *jnienv,
  117.       DB_ENV *dbenv, jobject value);
  118. extern void dbjie_call_feedback(DB_ENV_JAVAINFO *, DB_ENV *dbenv, jobject jenv,
  119. int opcode, int percent);
  120. extern void dbjie_set_recovery_init_object(DB_ENV_JAVAINFO *, JNIEnv *jnienv,
  121.    DB_ENV *dbenv, jobject value);
  122. extern int dbjie_call_recovery_init(DB_ENV_JAVAINFO *, DB_ENV *dbenv,
  123.     jobject jenv);
  124. extern void dbjie_set_rep_transport_object(DB_ENV_JAVAINFO *, JNIEnv *jnienv,
  125.    DB_ENV *dbenv, int id, jobject obj);
  126. extern int dbjie_call_rep_transport(DB_ENV_JAVAINFO *, DB_ENV *dbenv,
  127.     jobject jenv, const DBT *control,
  128.     const DBT *rec, int envid, int flags);
  129. extern void dbjie_set_app_dispatch_object(DB_ENV_JAVAINFO *, JNIEnv *jnienv,
  130. DB_ENV *dbenv, jobject value);
  131. extern int dbjie_call_app_dispatch(DB_ENV_JAVAINFO *,
  132.  DB_ENV *dbenv, jobject jenv,
  133.  DBT *dbt, DB_LSN *lsn, int recops);
  134. extern jobject dbjie_get_errcall(DB_ENV_JAVAINFO *) ;
  135. extern jint dbjie_is_dbopen(DB_ENV_JAVAINFO *);
  136. /****************************************************************
  137.  *
  138.  * Declaration of class DB_JAVAINFO
  139.  *
  140.  * A DB_JAVAINFO is allocated and stuffed into the cj_internal field
  141.  * for every DB created.  It holds a little extra info that is needed
  142.  * to support callbacks.
  143.  *
  144.  * Note: We assume that the Java layer is the only one
  145.  * fiddling with the contents of cj_internal
  146.  * for a DB that was created via Java.  Since the Java layer should
  147.  * have the only pointer to such a DB, this should be true.
  148.  */
  149. typedef struct _db_javainfo
  150. {
  151. JavaVM *javavm;
  152. jobject jdbref; /* global reference */
  153. jobject append_recno; /* global reference */
  154. jobject assoc; /* global reference */
  155. jobject bt_compare; /* global reference */
  156. jobject bt_prefix; /* global reference */
  157. jobject dup_compare; /* global reference */
  158. jobject feedback; /* global reference */
  159. jobject h_hash; /* global reference */
  160. jmethodID append_recno_method_id;
  161. jmethodID assoc_method_id;
  162. jmethodID bt_compare_method_id;
  163. jmethodID bt_prefix_method_id;
  164. jmethodID dup_compare_method_id;
  165. jmethodID feedback_method_id;
  166. jmethodID h_hash_method_id;
  167. jint construct_flags;
  168. } DB_JAVAINFO;
  169. /* create/initialize an object */
  170. extern DB_JAVAINFO *dbji_construct(JNIEnv *jnienv, jobject jdb, jint flags);
  171. /* release all objects held by this this one */
  172. extern void dbji_dealloc(DB_JAVAINFO *, JNIEnv *jnienv);
  173. /* free this object, releasing anything allocated on its behalf */
  174. extern void dbji_destroy(DB_JAVAINFO *, JNIEnv *jnienv);
  175. /* This gets the environment for the current thread */
  176. extern JNIEnv *dbji_get_jnienv();
  177. extern jint dbji_get_flags();
  178. extern void dbji_set_feedback_object(DB_JAVAINFO *, JNIEnv *jnienv, DB *db, jobject value);
  179. extern void dbji_call_feedback(DB_JAVAINFO *, DB *db, jobject jdb,
  180.        int opcode, int percent);
  181. extern void dbji_set_append_recno_object(DB_JAVAINFO *, JNIEnv *jnienv, DB *db, jobject value);
  182. extern int dbji_call_append_recno(DB_JAVAINFO *, DB *db, jobject jdb,
  183.   DBT *dbt, jint recno);
  184. extern void dbji_set_assoc_object(DB_JAVAINFO *, JNIEnv *jnienv,
  185.   DB *db, DB_TXN *txn, DB *second,
  186.   jobject value, int flags);
  187. extern int dbji_call_assoc(DB_JAVAINFO *, DB *db, jobject jdb,
  188.    const DBT *key, const DBT* data, DBT *result);
  189. extern void dbji_set_bt_compare_object(DB_JAVAINFO *, JNIEnv *jnienv, DB *db, jobject value);
  190. extern int dbji_call_bt_compare(DB_JAVAINFO *, DB *db, jobject jdb,
  191. const DBT *dbt1, const DBT *dbt2);
  192. extern void dbji_set_bt_prefix_object(DB_JAVAINFO *, JNIEnv *jnienv, DB *db, jobject value);
  193. extern size_t dbji_call_bt_prefix(DB_JAVAINFO *, DB *db, jobject jdb,
  194.   const DBT *dbt1, const DBT *dbt2);
  195. extern void dbji_set_dup_compare_object(DB_JAVAINFO *, JNIEnv *jnienv, DB *db, jobject value);
  196. extern int dbji_call_dup_compare(DB_JAVAINFO *, DB *db, jobject jdb,
  197.  const DBT *dbt1, const DBT *dbt2);
  198. extern void dbji_set_h_hash_object(DB_JAVAINFO *, JNIEnv *jnienv, DB *db, jobject value);
  199. extern int dbji_call_h_hash(DB_JAVAINFO *, DB *db, jobject jdb,
  200.     const void *data, int len);
  201. #endif /* !_JAVA_INFO_H_ */