]> rtime.felk.cvut.cz Git - orte.git/commitdiff
JORTE: fix memory leak and add DomainEvents to DomainMgr
authorMartin Vajnar <martin.vajnar@gmail.com>
Tue, 23 Jul 2013 09:09:39 +0000 (11:09 +0200)
committerMartin Vajnar <martin.vajnar@gmail.com>
Tue, 23 Jul 2013 09:09:39 +0000 (11:09 +0200)
Memory leaks in jORTEDomainAppCreate() and jORTEDomainMgrCreate()
(domain events callback structure) are fixed. Domain events callbacks
are placed in a separate file. Their prototypes are placed in "jorte/
/jorte_protos_api.h". This way they could be used by DomainApp
and DomainMgr.

Native functions in both DomainApp.java and DomainMgr.java are now non-
static. This allows native domain destructor to free the memory allocated
to domain events callback structure.

It is now also possible to pass null for DomainEvents or DomainProp to
DomainApp and DomainMgr constructors.

The header file onLoad.h is removed and the findClass() prototype is placed
into "jorte/jorte_protos_api.h".

21 files changed:
orte/include/jorte/4all.h
orte/include/jorte/jorte_protos_api.h
orte/include/jorte/onLoad.h [deleted file]
orte/include/jorte/org_ocera_orte_DomainApp.h
orte/include/jorte/org_ocera_orte_DomainMgr.h
orte/java/src/org/ocera/orte/Domain.java
orte/java/src/org/ocera/orte/DomainApp.java
orte/java/src/org/ocera/orte/DomainMgr.java
orte/java/src/org/ocera/orte/Manager.java
orte/java/src/org/ocera/orte/examples/hello/MyManager.java [new file with mode: 0644]
orte/java/src/org/ocera/orte/types/DomainProp.java
orte/java/src/org/ocera/orte/types/ManagerEvents.java [new file with mode: 0644]
orte/libjorte/JORTEDomainAppCreate.c
orte/libjorte/JORTEDomainAppDestroy.c
orte/libjorte/JORTEDomainEvents.c [new file with mode: 0644]
orte/libjorte/JORTEDomainMgrCreate.c
orte/libjorte/JORTEDomainMgrDestroy.c
orte/libjorte/JORTEPublicationGetStatus.c
orte/libjorte/JORTESubscriptionDestroy.c
orte/libjorte/JORTESubscriptionGetStatus.c
orte/libjorte/Makefile.omk

index fc952b47abc017f70d06252ed3f14a39f3ebf527..e6360536bca008113e6f13b23e2948a495d62131 100644 (file)
@@ -14,7 +14,6 @@ typedef struct
 
 //#define TEST_STAGE
 
-#include "onLoad.h"
 #ifdef __ANDROID__
 
 #include <android/log.h>
index 3b65f5f387c7c312d0c1fec01599659d385464bd..bcd07d3c28e57589901594df9a91ae9bc5aa8cde 100644 (file)
@@ -23,3 +23,39 @@ createSubInfo(JNIEnv *env, const ORTESubInfo *sinfo);
 
 extern NtpTime
 getNtpTime(JNIEnv *env, jobject obj);
+
+extern Boolean
+onSubDelete(const struct ORTEAppInfo *appInfo,const struct ORTESubInfo *subInfo,void *param);
+
+extern Boolean
+onSubRemoteChanged(const struct ORTEAppInfo *appInfo,const struct ORTESubInfo *subInfo,void *param);
+
+extern Boolean
+onSubRemoteNew(const struct ORTEAppInfo *appInfo,const struct ORTESubInfo *subInfo,void *param);
+
+extern Boolean
+onPubDelete(const struct ORTEAppInfo *appInfo,const struct ORTEPubInfo *pubInfo,void *param);
+
+extern Boolean
+onPubRemoteChanged(const struct ORTEAppInfo *appInfo,const struct ORTEPubInfo *pubInfo,void *param);
+
+extern Boolean
+onPubRemoteNew(const struct ORTEAppInfo *appInfo,const struct ORTEPubInfo *pubInfo,void *param);
+
+extern Boolean
+onAppDelete(const struct ORTEAppInfo *appInfo,void *param);
+
+extern Boolean
+onAppRemoteNew(const struct ORTEAppInfo *appInfo,void *param);
+
+extern Boolean
+onMgrDelete(const struct ORTEAppInfo *appInfo,void *param);
+
+extern Boolean
+onMgrNew(const struct ORTEAppInfo *appInfo,void *param);
+
+extern Boolean
+onRegFail(void *param);
+
+extern jclass
+findClass(JNIEnv *env, const char* name);
diff --git a/orte/include/jorte/onLoad.h b/orte/include/jorte/onLoad.h
deleted file mode 100644 (file)
index 77524db..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <jni.h>
-
-#ifndef IncludedOnLoad
-#define IncludedOnLoad
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-jclass findClass(JNIEnv *env, const char* name);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
index 8e8c12485dffeb35e27d09aa76a8de6db603238f..9fbe1d43fd17e18babbf367cb93735e90f91e2d8 100644 (file)
@@ -13,7 +13,7 @@ extern "C" {
  * Signature: (IZ)J
  */
 JNIEXPORT jlong JNICALL Java_org_ocera_orte_DomainApp_jORTEDomainDefaultAppCreate
-  (JNIEnv *, jclass, jint, jboolean);
+  (JNIEnv *, jobject, jint, jboolean);
 
 /*
  * Class:     org_ocera_orte_DomainApp
@@ -21,7 +21,7 @@ JNIEXPORT jlong JNICALL Java_org_ocera_orte_DomainApp_jORTEDomainDefaultAppCreat
  * Signature: (IJJLorg/ocera/orte/types/DomainEvents;Z)J
  */
 JNIEXPORT jlong JNICALL Java_org_ocera_orte_DomainApp_jORTEDomainAppCreate
-  (JNIEnv *, jclass, jint, jlong, jlong, jobject, jboolean);
+  (JNIEnv *, jobject, jint, jlong, jlong, jobject, jboolean);
 
 /*
  * Class:     org_ocera_orte_DomainApp
@@ -29,7 +29,7 @@ JNIEXPORT jlong JNICALL Java_org_ocera_orte_DomainApp_jORTEDomainAppCreate
  * Signature: (J)Z
  */
 JNIEXPORT jboolean JNICALL Java_org_ocera_orte_DomainApp_jORTEDomainAppDestroy
-  (JNIEnv *, jclass, jlong);
+  (JNIEnv *, jobject, jlong);
 
 /*
  * Class:     org_ocera_orte_DomainApp
@@ -37,7 +37,7 @@ JNIEXPORT jboolean JNICALL Java_org_ocera_orte_DomainApp_jORTEDomainAppDestroy
  * Signature: (JLjava/lang/String;J)I
  */
 JNIEXPORT jint JNICALL Java_org_ocera_orte_DomainApp_jORTETypeRegisterAdd
-  (JNIEnv *, jclass, jlong, jstring, jlong);
+  (JNIEnv *, jobject, jlong, jstring, jlong);
 
 /*
  * Class:     org_ocera_orte_DomainApp
@@ -45,7 +45,7 @@ JNIEXPORT jint JNICALL Java_org_ocera_orte_DomainApp_jORTETypeRegisterAdd
  * Signature: (J)Z
  */
 JNIEXPORT jboolean JNICALL Java_org_ocera_orte_DomainApp_jORTETypeRegisterDestroyAll
-  (JNIEnv *, jclass, jlong);
+  (JNIEnv *, jobject, jlong);
 
 #ifdef __cplusplus
 }
index 38ec5be7ccbeebef5609b74733efcdf82010461e..bc9e0c1f181f7a5ec0a153b83919ab20392e1a8f 100644 (file)
@@ -13,7 +13,7 @@ extern "C" {
  * Signature: (IZ)J
  */
 JNIEXPORT jlong JNICALL Java_org_ocera_orte_DomainMgr_jORTEDomainDefaultMgrCreate
-  (JNIEnv *, jclass, jint, jboolean);
+  (JNIEnv *, jobject, jint, jboolean);
 
 /*
  * Class:     org_ocera_orte_DomainMgr
@@ -21,7 +21,7 @@ JNIEXPORT jlong JNICALL Java_org_ocera_orte_DomainMgr_jORTEDomainDefaultMgrCreat
  * Signature: (IJJZ)J
  */
 JNIEXPORT jlong JNICALL Java_org_ocera_orte_DomainMgr_jORTEDomainMgrCreate
-  (JNIEnv *, jclass, jint, jlong, jlong, jboolean);
+  (JNIEnv *, jobject, jint, jlong, jlong, jobject obj_de, jboolean);
 
 /*
  * Class:     org_ocera_orte_DomainMgr
@@ -29,7 +29,7 @@ JNIEXPORT jlong JNICALL Java_org_ocera_orte_DomainMgr_jORTEDomainMgrCreate
  * Signature: (J)Z
  */
 JNIEXPORT jboolean JNICALL Java_org_ocera_orte_DomainMgr_jORTEDomainMgrDestroy
-  (JNIEnv *, jclass, jlong);
+  (JNIEnv *, jobject, jlong);
 
 #ifdef __cplusplus
 }
index 19d65693d0e6b8611d45e677168b32599df245e7..8ed7b5f870c041f11f1e79f127112a42127338c3 100644 (file)
@@ -25,7 +25,7 @@ package org.ocera.orte;
 import  org.ocera.orte.types.*;
 
 
-public class Domain {
+public abstract class Domain {
 
    /** load native library 'libjorte.so' */
    static {
@@ -33,9 +33,10 @@ public class Domain {
    }
 
    /* domain fields */
-   protected long              handle;
-   public DomainProp           props;
-   public DomainEvents         events;
+   protected long                      handle;
+   protected long                      domainEventsContextHandle = 0;
+   protected DomainProp                        props;
+   protected DomainEvents              events;
 
 
    /* constructor */
@@ -48,8 +49,8 @@ public class Domain {
 
 
   /**
-   * Get handle of the Application Domain.   
-   * @return Handle of the Application Domain. 
+   * Get handle of the Domain.
+   * @return Handle of the Domain.
    */
    public long getHandle()
    {
@@ -57,11 +58,8 @@ public class Domain {
    }
 
    /**
-    * Get handle of the Application Domain.   
-    * @return Handle of the Application Domain. 
+    * Destroy domain.
+    * @return Handle of the Domain.
     */
-    public boolean destroy() 
-    {
-       return false;
-    }
+    public abstract boolean destroy();
 }
index 09efabff9506b14e857aa57ec9acd91087048614..eccd2aff3831158150260855b45d6445149da0fc 100644 (file)
@@ -48,21 +48,14 @@ public class DomainApp extends Domain
    /** TODO dodelat objekty 'props', 'events' */
    public DomainApp(int domain, DomainProp ps, DomainEvents ev, boolean suspend)
    {
-     super();   // set Default Domain Properties
-     if(ps == null) {
-         this.props = DomainProp.defaultPropsCreate();
-     }
-     else {
-         this.props = ps;
-     }
-     // init Domain Events
-     if(ev == null) {
-         this.events.init();
-     }
-     else {
-         this.events = ev;
-     }
-     this.handle = jORTEDomainAppCreate(domain,ps.handle,ev.getHandle(),ev,suspend);
+     super();
+     this.props = ps;
+     this.events = ev;
+     this.handle = jORTEDomainAppCreate(domain,
+                                       ps==null ? 0 : this.props.getHandle(),
+                                       ev==null ? 0 : this.events.getHandle(),
+                                       this.events,
+                                       suspend);
      /* TODO osetrit neuspesne vytvoreni domeny */ 
      if(this.handle == 0) System.out.println(":j!: zero domain handle! ..");
       else System.out.println(":j: application domain created..");
@@ -71,15 +64,12 @@ public class DomainApp extends Domain
    /**
     * Destroy the Application Domain.  
     */
+   @Override
    public boolean destroy()
    {
-     if(!destroyAllRegTypes()) System.out.println(":j!: destroyAllRegTypes fault!");
-     if(!jORTEDomainAppDestroy(this.handle) || !this.props.destroy()) {
-       System.out.println(":j!: ORTEDomainADestroy fault!");
-       return false;
-     }
-     return true;
-       
+     if(destroyAllRegTypes() && jORTEDomainAppDestroy(this.handle) && (this.props == null || this.props.destroy())) return true;
+     System.out.println(":j!: ORTEDomainAppDestroy() fault..");
+     return false;
    }
 
      
@@ -178,7 +168,7 @@ public class DomainApp extends Domain
  * @param domain given domain
  * @return addres value (from C environment) of the created domain
  */
- private static native long jORTEDomainDefaultAppCreate(int domain,boolean suspend);
+ private native long jORTEDomainDefaultAppCreate(int domain,boolean suspend);
 
 
 /**
@@ -194,7 +184,7 @@ public class DomainApp extends Domain
  * @return addres value (from C environment) of the created domain
  */
 
- private static native
+ private native
  long jORTEDomainAppCreate(int  domain,
                            long propHandle,
                            long eventsHandle,
@@ -210,7 +200,7 @@ public class DomainApp extends Domain
  * @param jp_domhandle handler to domain
  * @return boolean value, False when some error occures, otherwise True
  */
- private static native
+ private native
  boolean jORTEDomainAppDestroy(long dhandle);
 
  
@@ -224,7 +214,7 @@ public class DomainApp extends Domain
   * @param
   * @return
   */
-  private static native
+  private native
   int jORTETypeRegisterAdd(long dhandle,
                             String typeName,
                             long maxlenght);
@@ -237,7 +227,7 @@ public class DomainApp extends Domain
   * @param dhandle handler to domain
   * @return boolean value, False when some error occures, otherwise True
   */
-  private static native
+  private native
   boolean jORTETypeRegisterDestroyAll(long dhandle);
 
-}
\ No newline at end of file
+}
index c9070e89d62dc795abc8bc7a4254b617f004168f..13f01facffaa33b1bbae1511a7915a7ffdf7d888 100644 (file)
@@ -55,33 +55,25 @@ public class DomainMgr extends Domain
                         DomainEvents events,
                         boolean suspend)
     {
-     super();   // set Default Domain Properties
-     if(props == null) {
-         this.props = DomainProp.defaultPropsCreate();
-     }
-     else {
-         this.props = props;
-     }
-
-          handle = jORTEDomainMgrCreate(domain,
-                                        props.handle,
-                                            events==null ? 0 : events.getHandle(),
-                                                                suspend);
+     super();
+     this.props = props;
+     this.events = events;
+     this.handle = jORTEDomainMgrCreate(domain,
+                                       props==null ? 0 : this.props.getHandle(),
+                                       events==null ? 0 : this.events.getHandle(),
+                                       this.events,
+                                       suspend);
     }
-
-        /*
-     public void create()
-     {}
-        */
      
         /**
          * destroy - destroy manager object
          * @return boolean: False if bad publication handle, True if  succesful
          */
+      @Override
          public
          boolean destroy()
          {
-           if(jORTEDomainMgrDestroy(this.handle) && this.props.destroy()) return true;
+           if(jORTEDomainMgrDestroy(this.handle) && (this.props == null || this.props.destroy())) return true;
            System.out.println(":j!: ORTEDomainMgrDestroy() fault..");
            return false;
          }
@@ -97,7 +89,7 @@ public class DomainMgr extends Domain
    * @param handle of the domain
    * @return handle of the Manager
    **/
-   private static native
+   private native
    long jORTEDomainDefaultMgrCreate(int dhandle,boolean suspend);
 
 
@@ -108,10 +100,11 @@ public class DomainMgr extends Domain
    * @param handle of the domain events
    * @return handle of the Manager
    **/
-   private static native
+   private native
    long jORTEDomainMgrCreate(int dhandle,
                              long propsHandle,
                              long eventsHandle,
+                             DomainEvents ev,
                              boolean suspend);
 
   /**
@@ -119,7 +112,7 @@ public class DomainMgr extends Domain
    * @param hadle of the domain
    * @return if some error occures return False, otherwise True
    **/
-   private static native
+   private native
    boolean jORTEDomainMgrDestroy(long dhandle);  
        
 }
index 5fc77d07f542a7eb88d817fea829147535beb55a..ad99bbd42a1d789ea6bcd56759718f2a60635f82 100644 (file)
@@ -1,10 +1,18 @@
 package org.ocera.orte;
 
-import org.ocera.orte.types.*;;
+import org.ocera.orte.types.*;
 
 public class Manager {
        
        private DomainMgr dmgr;
+        private ManagerEvents events = new ManagerEvents();
+
+        public Manager() {
+                dmgr = new DomainMgr(ORTEConstant.ORTE_DEFAULT_DOMAIN,
+                                                         null,
+                                                         events,
+                                                         false);
+        }
        
        public Manager(String[] mgrs) {
                DomainProp dprops = DomainProp.defaultPropsCreate();
@@ -12,7 +20,7 @@ public class Manager {
                
                dmgr = new DomainMgr(ORTEConstant.ORTE_DEFAULT_DOMAIN,
                                                         dprops,
-                                                        null,
+                                                        events,
                                                         false);
        }
 
diff --git a/orte/java/src/org/ocera/orte/examples/hello/MyManager.java b/orte/java/src/org/ocera/orte/examples/hello/MyManager.java
new file mode 100644 (file)
index 0000000..10ffecd
--- /dev/null
@@ -0,0 +1,23 @@
+import org.ocera.orte.*;
+import org.ocera.orte.types.*;
+
+public class MyManager {
+
+  static {
+    System.loadLibrary("jorte");
+  }
+
+  public static void main(String[] args) {
+    Manager manager = new Manager();
+
+    while(true) {
+      try {
+        Thread.sleep(1000);
+      }
+      catch(Exception e) {
+        e.printStackTrace();
+      }
+    }
+  }
+
+}
index ff46cbe70251b13293ceea5c9f317e977926bb25..6db534092ee50e2aa013dc28dcd6710a0da62701 100644 (file)
@@ -33,8 +33,12 @@ public class DomainProp {
 
 
  /* handler to C struct with default domain properties  */
-  public long handle = 0;
+  private long handle = 0;
   private String mgrs = null;
+  
+  public long getHandle() {
+         return this.handle;
+  }
 
  /**
   *  setProps - sets DomainProp
diff --git a/orte/java/src/org/ocera/orte/types/ManagerEvents.java b/orte/java/src/org/ocera/orte/types/ManagerEvents.java
new file mode 100644 (file)
index 0000000..c5135ca
--- /dev/null
@@ -0,0 +1,57 @@
+package org.ocera.orte.types;
+
+public class ManagerEvents extends DomainEvents {
+
+  public ManagerEvents()
+  {
+    super();
+  }
+
+  public void onRegFail() {}
+
+  public void onMgrNew(AppInfo appInfo)
+  {
+       System.out.println(":j: *************************************************");
+       System.out.println(":j: * call method 'MyEvents.onMgrNew()'..           *");
+       System.out.println(":j: *************************************************");
+        appInfo.printWithLegend();
+  }
+
+  public void onMgrDelete(AppInfo appInfo)
+  {
+       System.out.println(":j: *************************************************");
+       System.out.println(":j: * call method 'MyEvents.onMgrDelete()'..        *");
+       System.out.println(":j: *************************************************");
+        appInfo.printWithLegend();
+  }
+
+  public void onAppRemoteNew(AppInfo appInfo)
+  {
+       System.out.println(":j: *************************************************");
+       System.out.println(":j: * call method 'MyEvents.onAppRemoteNew()'..     *");
+       System.out.println(":j: *************************************************");
+       appInfo.printWithLegend();
+  }
+
+  public void onAppDelete(AppInfo appInfo)
+  {
+       System.out.println(":j: *************************************************");
+       System.out.println(":j: * call method 'MyEvents.onAppDelete()'..        *");
+       System.out.println(":j: *************************************************");
+        appInfo.printWithLegend();
+  }
+
+  public void onPubRemoteNew(AppInfo appInfo, PubInfo pubInfo) {}
+
+  public void onPubRemoteChanged(AppInfo appInfo, PubInfo pubInfo) {}
+
+  public void onPubDelete(AppInfo appInfo, PubInfo pubInfo) {}
+
+  public void onSubRemoteNew(AppInfo appInfo, SubInfo subInfo) {}
+
+  public void onSubRemoteChanged(AppInfo appInfo, SubInfo subInfo) {}
+
+  public void onSubDelete(AppInfo appInfo, SubInfo subInfo) {}
+
+}
+
index 54e8ae6ec33cc64a7bb0435f0ebdf59b52e77a84..93be29d9197686e66089ea056ca89607990c331d 100644 (file)
 #include "jorte/jorte_protos_api.h"
 #include <inttypes.h>
 
-// /////////////////////////////////////////////////////////////////////
-//  public void onRegFail()
-// /////////////////////////////////////////////////////////////////////
-Boolean
-onRegFail(void *param)
-{
-// ///////////////////////////////// SPOLECNA CAST //
-  JavaVM          *jvm = NULL;
-  JNIEnv          *env = NULL; // local reference
-  jclass           cls;
-  jmethodID        mid;
-  //
-  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
-  int flag_ok = 0;
-
-  #ifdef TEST_STAGE
-      printf(":c: event func. 'onRegFail()' called.. \n");
-  #endif
-
-  do
-  {
-// ///////////////////////////////// SPOLECNA CAST //
-    if(domain_events_cont->jvm == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: jvm = NULL! \n");
-     #endif
-     break;
-    }
-    jvm = domain_events_cont->jvm;
-    // get env
-    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
-    if(env == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: env = NULL! \n");
-     #endif
-     break;
-    }
-    // find class
-    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
-    if(cls == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: cls = NULL! \n");
-     #endif
-     break;
-    }
-// ///////////////////////////////// SPOLECNA CAST //
-    // get method ID
-    mid = (*env)->GetMethodID(env,
-                              cls,
-                              "onRegFail",
-                              "()V");
-    if(mid == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: mid = NULL! \n");
-     #endif
-     break;
-    }
-    // call method
-    (*env)->CallVoidMethod(env,
-                           domain_events_cont->obj_de,
-                           mid);
-    flag_ok = 1;
-  } while(0);
-  // while broken
-  if(flag_ok)
-  {
-    if((*jvm)->DetachCurrentThread(jvm) != 0)
-    {
-      printf(":c!: DetachCurrentThread fault! \n");
-      return  ORTE_FALSE;
-    }
-  }
-
-  return ORTE_TRUE;
-}
-
-
-// /////////////////////////////////////////////////////////////////////
-//  Event - public void onMgrNew()
-// /////////////////////////////////////////////////////////////////////
-Boolean
-onMgrNew(const struct ORTEAppInfo *appInfo, void *param)
-{
-// ///////////////////////////////// SPOLECNA CAST //
-  JavaVM          *jvm = NULL;
-  JNIEnv          *env = NULL; // local reference
-  jclass           cls;
-  jobject          obj_ainfo;
-  jmethodID        mid;
-  //
-  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
-  int flag_ok = 0;
-
-  #ifdef TEST_STAGE
-      printf(":c: event func. 'onMgrNew()' called.. \n");
-  #endif
-
-  do
-  {
-// ///////////////////////////////// SPOLECNA CAST //
-    if(domain_events_cont->jvm == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: jvm = NULL! \n");
-     #endif
-     break;
-    }
-    jvm = domain_events_cont->jvm;
-    // get env
-    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
-    if(env == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: env = NULL! \n");
-     #endif
-     break;
-    }
-    // find class
-    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
-    if(cls == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: cls = NULL! \n");
-     #endif
-     break;
-    }
-    // create AppInfo instance
-    obj_ainfo = createAppInfo(env, appInfo);
-    if(obj_ainfo == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: obj_ainfo = NULL! \n");
-     #endif
-     break;
-    }
-// ///////////////////////////////// SPOLECNA CAST //
-    // get method ID
-    mid = (*env)->GetMethodID(env,
-                              cls,
-                              "onMgrNew",
-                              "(Lorg/ocera/orte/types/AppInfo;)V");
-    if(mid == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: mid = NULL! \n");
-     #endif
-     break;
-    }
-    // call method
-    (*env)->CallVoidMethod(env,
-                           domain_events_cont->obj_de,
-                           mid,
-                           obj_ainfo);
-    flag_ok = 1;
-  } while(0);
-  // while broken
-  if(flag_ok)
-  {
-    if((*jvm)->DetachCurrentThread(jvm) != 0)
-    {
-      printf(":c!: DetachCurrentThread fault! \n");
-      return  ORTE_FALSE;
-    }
-  }
-
-  return ORTE_TRUE;
-}
-
-
-// /////////////////////////////////////////////////////////////////////
-//  Event - public void onMgrDelete()
-// /////////////////////////////////////////////////////////////////////
-Boolean
-onMgrDelete(const struct ORTEAppInfo *appInfo, void *param)
-{
-// ///////////////////////////////// SPOLECNA CAST //
-  JavaVM          *jvm = NULL;
-  JNIEnv          *env = NULL; // local reference
-  jclass           cls;
-  jobject          obj_ainfo;
-  jmethodID        mid;
-  //
-  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
-  int flag_ok = 0;
-
-  #ifdef TEST_STAGE
-      printf(":c: event func. 'onMgrDelete()' called.. \n");
-  #endif
-
-  do
-  {
-// ///////////////////////////////// SPOLECNA CAST //
-    if(domain_events_cont->jvm == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: jvm = NULL! \n");
-     #endif
-     break;
-    }
-    jvm = domain_events_cont->jvm;
-    // get env
-    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
-    if(env == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: env = NULL! \n");
-     #endif
-     break;
-    }
-    // find class
-    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
-    if(cls == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: cls = NULL! \n");
-     #endif
-     break;
-    }
-    // create AppInfo instance
-    obj_ainfo = createAppInfo(env, appInfo);
-    if(obj_ainfo == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: obj_ainfo = NULL! \n");
-     #endif
-     break;
-    }
-// ///////////////////////////////// SPOLECNA CAST //
-    // get method ID
-    mid = (*env)->GetMethodID(env,
-                              cls,
-                              "onMgrDelete",
-                              "(Lorg/ocera/orte/types/AppInfo;)V");
-    if(mid == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: mid = NULL! \n");
-     #endif
-     break;
-    }
-    // call method
-    (*env)->CallVoidMethod(env,
-                           domain_events_cont->obj_de,
-                           mid,
-                           obj_ainfo);
-    flag_ok = 1;
-  } while(0);
-  // while broken
-  if(flag_ok)
-  {
-    if((*jvm)->DetachCurrentThread(jvm) != 0)
-    {
-      printf(":c!: DetachCurrentThread fault! \n");
-      return  ORTE_FALSE;
-    }
-  }
-
-  return ORTE_TRUE;
-}
-
-
-
-// /////////////////////////////////////////////////////////////////////
-//  Event - onAppRemoteNew
-// /////////////////////////////////////////////////////////////////////
-Boolean
-onAppRemoteNew(const struct ORTEAppInfo *appInfo, void *param)
-{
-// ///////////////////////////////// SPOLECNA CAST //
-  JavaVM          *jvm = NULL;
-  JNIEnv          *env = NULL; // local reference
-  jclass           cls;
-  jobject          obj_ainfo;
-  jmethodID        mid;
-  //
-  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
-  int flag_ok = 0;
-
-  #ifdef TEST_STAGE
-      printf(":c: event func. 'onAppRemoteNew()' called.. \n");
-  #endif
-
-  do
-  {
-// ///////////////////////////////// SPOLECNA CAST //
-    if(domain_events_cont->jvm == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: jvm = NULL! \n");
-     #endif
-     break;
-    }
-    jvm = domain_events_cont->jvm;
-    // get env
-    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
-    if(env == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: env = NULL! \n");
-     #endif
-     break;
-    }
-    // find class
-    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
-    if(cls == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: cls = NULL! \n");
-     #endif
-     break;
-    }
-    // create AppInfo instance
-    obj_ainfo = createAppInfo(env, appInfo);
-    if(obj_ainfo == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: obj_ainfo = NULL! \n");
-     #endif
-     break;
-    }
-// ///////////////////////////////// SPOLECNA CAST //
-
-    // get method ID
-    mid = (*env)->GetMethodID(env,
-                              cls,
-                              "onAppRemoteNew",
-                              "(Lorg/ocera/orte/types/AppInfo;)V");
-    if(mid == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: mid = NULL! \n");
-     #endif
-     break;
-    }
-    // call method
-    (*env)->CallVoidMethod(env,
-                           domain_events_cont->obj_de,
-                           mid,
-                           obj_ainfo);
-    flag_ok = 1;
-  } while(0);
-  // while broken
-  if(flag_ok)
-  {
-    if((*jvm)->DetachCurrentThread(jvm) != 0)
-    {
-      printf(":c!: DetachCurrentThread fault! \n");
-      return  ORTE_FALSE;
-    }
-  }
-
-  return ORTE_TRUE;
-}
-
-
-// /////////////////////////////////////////////////////////////////////
-//  public void onAppDelete() { }
-// /////////////////////////////////////////////////////////////////////
-Boolean
-onAppDelete(const struct ORTEAppInfo *appInfo, void *param)
-{
-// ///////////////////////////////// SPOLECNA CAST //
-  JavaVM          *jvm = NULL;
-  JNIEnv          *env = NULL; // local reference
-  jclass           cls;
-  jobject          obj_ainfo;
-  jmethodID        mid;
-  //
-  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
-  int flag_ok = 0;
-
-  #ifdef TEST_STAGE
-      printf(":c: event func. 'onAppDelete()' called.. \n");
-  #endif
-
-  do
-  {
-// ///////////////////////////////// SPOLECNA CAST //
-    if(domain_events_cont->jvm == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: jvm = NULL! \n");
-     #endif
-     break;
-    }
-    jvm = domain_events_cont->jvm;
-    // get env
-    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
-    if(env == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: env = NULL! \n");
-     #endif
-     break;
-    }
-    // find class
-    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
-    if(cls == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: cls = NULL! \n");
-     #endif
-     break;
-    }
-    // create AppInfo instance
-    obj_ainfo = createAppInfo(env, appInfo);
-    if(obj_ainfo == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: obj_ainfo = NULL! \n");
-     #endif
-     break;
-    }
-// ///////////////////////////////// SPOLECNA CAST //
-    // get method ID
-    mid = (*env)->GetMethodID(env,
-                              cls,
-                              "onAppDelete",
-                              "(Lorg/ocera/orte/types/AppInfo;)V");
-    if(mid == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: mid = NULL! \n");
-     #endif
-     break;
-    }
-    // call method
-    (*env)->CallVoidMethod(env,
-                           domain_events_cont->obj_de,
-                           mid,
-                           obj_ainfo);
-    flag_ok = 1;
-  } while(0);
-  // while broken
-  if(flag_ok)
-  {
-    if((*jvm)->DetachCurrentThread(jvm) != 0)
-    {
-      printf(":c!: DetachCurrentThread fault! \n");
-      return  ORTE_FALSE;
-    }
-  }
-
-  return ORTE_TRUE;
-}
-
-
-// /////////////////////////////////////////////////////////////////////
-//  public void onPubRemoteNew()
-// /////////////////////////////////////////////////////////////////////
-Boolean
-onPubRemoteNew(const struct ORTEAppInfo *appInfo,
-               const struct ORTEPubInfo *pubInfo,
-               void *param)
-{
-// ///////////////////////////////// SPOLECNA CAST //
-  JavaVM          *jvm = NULL;
-  JNIEnv          *env = NULL; // local reference
-  jclass           cls;
-  jobject          obj_ainfo;
-  jobject          obj_pinfo;
-  jmethodID        mid;
-  //
-  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
-  int flag_ok = 0;
-
-  #ifdef TEST_STAGE
-      printf(":c: event func. 'onPubRemoteNew()' called.. \n");
-  #endif
-
-  do
-  {
-// ///////////////////////////////// SPOLECNA CAST //
-    if(domain_events_cont->jvm == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: jvm = NULL! \n");
-     #endif
-     break;
-    }
-    jvm = domain_events_cont->jvm;
-    // get env
-    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
-    if(env == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: env = NULL! \n");
-     #endif
-     break;
-    }
-    // find class
-    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
-    if(cls == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: cls = NULL! \n");
-     #endif
-     break;
-    }
-    // create AppInfo instance
-    obj_ainfo = createAppInfo(env, appInfo);
-    if(obj_ainfo == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: obj_ainfo = NULL! \n");
-     #endif
-     break;
-    }
-    // create PubInfo instance
-    obj_pinfo = createPubInfo(env, pubInfo);
-    if(obj_pinfo == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: obj_pinfo = NULL! \n");
-     #endif
-     break;
-    }
-// ///////////////////////////////// SPOLECNA CAST //
-    // get method ID
-    mid = (*env)->GetMethodID(env,
-                              cls,
-                              "onPubRemoteNew",
-                              "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/PubInfo;)V");
-    if(mid == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: mid = NULL! \n");
-     #endif
-     break;
-    }
-    // call method
-    (*env)->CallVoidMethod(env,
-                           domain_events_cont->obj_de,
-                           mid,
-                           obj_ainfo,
-                           obj_pinfo);
-    flag_ok = 1;
-  } while(0);
-  // while broken
-  if(flag_ok)
-  {
-    if((*jvm)->DetachCurrentThread(jvm) != 0)
-    {
-      printf(":c!: DetachCurrentThread fault! \n");
-      return  ORTE_FALSE;
-    }
-  }
-
-  return ORTE_TRUE;
-}
-
-
-// /////////////////////////////////////////////////////////////////////
-//public void onPubRemoteChanged()
-// /////////////////////////////////////////////////////////////////////
-Boolean
-onPubRemoteChanged(const struct ORTEAppInfo *appInfo,
-                   const struct ORTEPubInfo *pubInfo,
-                   void *param)
-{
-// ///////////////////////////////// SPOLECNA CAST //
-  JavaVM          *jvm = NULL;
-  JNIEnv          *env = NULL; // local reference
-  jclass           cls;
-  jobject          obj_ainfo;
-  jobject          obj_pinfo;
-  jmethodID        mid;
-  //
-  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
-  int flag_ok = 0;
-
-  #ifdef TEST_STAGE
-      printf(":c: event func. 'onPubRemoteChanged()' called.. \n");
-  #endif
-
-  do
-  {
-// ///////////////////////////////// SPOLECNA CAST //
-    if(domain_events_cont->jvm == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: jvm = NULL! \n");
-     #endif
-     break;
-    }
-    jvm = domain_events_cont->jvm;
-    // get env
-    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
-    if(env == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: env = NULL! \n");
-     #endif
-     break;
-    }
-    // find class
-    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
-    if(cls == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: cls = NULL! \n");
-     #endif
-     break;
-    }
-    // create AppInfo instance
-    obj_ainfo = createAppInfo(env, appInfo);
-    if(obj_ainfo == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: obj_ainfo = NULL! \n");
-     #endif
-     break;
-    }
-    // create PubInfo instance
-    obj_pinfo = createPubInfo(env, pubInfo);
-    if(obj_pinfo == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: obj_pinfo = NULL! \n");
-     #endif
-     break;
-    }
-// ///////////////////////////////// SPOLECNA CAST //
-    // get method ID
-    mid = (*env)->GetMethodID(env,
-                              cls,
-                              "onPubRemoteChanged",
-                              "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/PubInfo;)V");
-    if(mid == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: mid = NULL! \n");
-     #endif
-     break;
-    }
-    // call method
-    (*env)->CallVoidMethod(env,
-                           domain_events_cont->obj_de,
-                           mid,
-                           obj_ainfo,
-                           obj_pinfo);
-    flag_ok = 1;
-  } while(0);
-  // while broken
-  if(flag_ok)
-  {
-    if((*jvm)->DetachCurrentThread(jvm) != 0)
-    {
-      printf(":c!: DetachCurrentThread fault! \n");
-      return  ORTE_FALSE;
-    }
-  }
-
-  return ORTE_TRUE;
-}
-
-
-
-
-// /////////////////////////////////////////////////////////////////////
-//  public void onPubDelete()
-// /////////////////////////////////////////////////////////////////////
-Boolean
-onPubDelete(const struct ORTEAppInfo *appInfo,
-            const struct ORTEPubInfo *pubInfo,
-            void *param)
-{
-// ///////////////////////////////// SPOLECNA CAST //
-  JavaVM          *jvm = NULL;
-  JNIEnv          *env = NULL; // local reference
-  jclass           cls;
-  jobject          obj_ainfo;
-  jobject          obj_pinfo;
-  jmethodID        mid;
-  //
-  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
-  int flag_ok = 0;
-
-  #ifdef TEST_STAGE
-      printf(":c: event func. 'onPubDelete()' called.. \n");
-  #endif
-
-  do
-  {
-// ///////////////////////////////// SPOLECNA CAST //
-    if(domain_events_cont->jvm == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: jvm = NULL! \n");
-     #endif
-     break;
-    }
-    jvm = domain_events_cont->jvm;
-    // get env
-    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
-    if(env == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: env = NULL! \n");
-     #endif
-     break;
-    }
-    // find class
-    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
-    if(cls == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: cls = NULL! \n");
-     #endif
-     break;
-    }
-    // create AppInfo instance
-    obj_ainfo = createAppInfo(env, appInfo);
-    if(obj_ainfo == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: obj_ainfo = NULL! \n");
-     #endif
-     break;
-    }
-    // create PubInfo instance
-    obj_pinfo = createPubInfo(env, pubInfo);
-    if(obj_pinfo == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: obj_pinfo = NULL! \n");
-     #endif
-     break;
-    }
-// ///////////////////////////////// SPOLECNA CAST //
-    // get method ID
-    mid = (*env)->GetMethodID(env,
-                              cls,
-                              "onPubDelete",
-                              "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/PubInfo;)V");
-    if(mid == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: mid = NULL! \n");
-     #endif
-     break;
-    }
-    // call method
-    (*env)->CallVoidMethod(env,
-                           domain_events_cont->obj_de,
-                           mid,
-                           obj_ainfo,
-                           obj_pinfo);
-    flag_ok = 1;
-  } while(0);
-  // while broken
-  if(flag_ok)
-  {
-    if((*jvm)->DetachCurrentThread(jvm) != 0)
-    {
-      printf(":c!: DetachCurrentThread fault! \n");
-      return  ORTE_FALSE;
-    }
-  }
-
-  return ORTE_TRUE;
-}
-
-
-// /////////////////////////////////////////////////////////////////////
-//  Event - onSubRemoteNew
-// /////////////////////////////////////////////////////////////////////
-Boolean
-onSubRemoteNew(const struct ORTEAppInfo *appInfo,
-               const struct ORTESubInfo *subInfo,
-               void *param)
-{
-// ///////////////////////////////// SPOLECNA CAST //
-  JavaVM          *jvm = NULL;
-  JNIEnv          *env = NULL; // local reference
-  jobject          obj_ainfo;
-  jobject          obj_sinfo;
-  jclass           cls;
-  jmethodID        mid;
-  //
-  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
-  int flag_ok = 0;
-
-  #ifdef TEST_STAGE
-      printf(":c: event func. 'onSubRemoteNew()' called.. \n");
-  #endif
-
-  do
-  {
-// ///////////////////////////////// SPOLECNA CAST //
-    if(domain_events_cont->jvm == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: jvm = NULL! \n");
-     #endif
-     break;
-    }
-    jvm = domain_events_cont->jvm;
-    // get env
-    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
-    if(env == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: env = NULL! \n");
-     #endif
-     break;
-    }
-    // find class
-    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
-    if(cls == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: cls = NULL! \n");
-     #endif
-     break;
-    }
-    // create AppInfo instance
-    obj_ainfo = createAppInfo(env, appInfo);
-    if(obj_ainfo == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: obj_ainfo = NULL! \n");
-     #endif
-     break;
-    }
-    // create SubInfo instance
-    obj_sinfo = createSubInfo(env, subInfo);
-    if(obj_sinfo == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: obj_sinfo = NULL! \n");
-     #endif
-     break;
-    }
-// ///////////////////////////////// SPOLECNA CAST //
-    // get method ID
-    mid = (*env)->GetMethodID(env,
-                              cls,
-                              "onSubRemoteNew",
-                              "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/SubInfo;)V");
-    if(mid == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: mid = NULL! \n");
-     #endif
-     break;
-    }
-    // call method
-    (*env)->CallVoidMethod(env,
-                           domain_events_cont->obj_de,
-                           mid,
-                           obj_ainfo,
-                           obj_sinfo);
-    flag_ok = 1;
-  } while(0);
-  // while broken
-  if(flag_ok)
-  {
-    if((*jvm)->DetachCurrentThread(jvm) != 0)
-    {
-      printf(":c!: DetachCurrentThread fault! \n");
-      return  ORTE_FALSE;
-    }
-  }
-
-  return ORTE_TRUE;
-}
-
-
-// /////////////////////////////////////////////////////////////////////
-//  public void onSubRemoteChanged() { }
-// /////////////////////////////////////////////////////////////////////
-Boolean
-onSubRemoteChanged(const struct ORTEAppInfo *appInfo,
-                   const struct ORTESubInfo *subInfo,
-                   void *param)
-{
-// ///////////////////////////////// SPOLECNA CAST //
-  JavaVM          *jvm = NULL;
-  JNIEnv          *env = NULL; // local reference
-  jclass           cls;
-  jobject          obj_ainfo;
-  jobject          obj_sinfo;
-  jmethodID        mid;
-  //
-  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
-  int flag_ok = 0;
-
-  #ifdef TEST_STAGE
-      printf(":c: event func. 'onSubRemoteChanged()' called.. \n");
-  #endif
-
-  do
-  {
-// ///////////////////////////////// SPOLECNA CAST //
-    if(domain_events_cont->jvm == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: jvm = NULL! \n");
-     #endif
-     break;
-    }
-    jvm = domain_events_cont->jvm;
-    // get env
-    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
-    if(env == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: env = NULL! \n");
-     #endif
-     break;
-    }
-    // find class
-    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
-    if(cls == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: cls = NULL! \n");
-     #endif
-     break;
-    }
-    // create AppInfo instance
-    obj_ainfo = createAppInfo(env, appInfo);
-    if(obj_ainfo == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: obj_ainfo = NULL! \n");
-     #endif
-     break;
-    }
-    // create SubInfo instance
-    obj_sinfo = createSubInfo(env, subInfo);
-    if(obj_sinfo == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: obj_sinfo = NULL! \n");
-     #endif
-     break;
-    }
-// ///////////////////////////////// SPOLECNA CAST //
-    // get method ID
-    mid = (*env)->GetMethodID(env,
-                              cls,
-                              "onSubRemoteChanged",
-                              "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/SubInfo;)V");
-    if(mid == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: mid = NULL! \n");
-     #endif
-     break;
-    }
-    // call method
-    (*env)->CallVoidMethod(env,
-                           domain_events_cont->obj_de,
-                           mid,
-                           obj_ainfo,
-                           obj_sinfo);
-    flag_ok = 1;
-  } while(0);
-  // while broken
-  if(flag_ok)
-  {
-    if((*jvm)->DetachCurrentThread(jvm) != 0)
-    {
-      printf(":c!: DetachCurrentThread fault! \n");
-      return  ORTE_FALSE;
-    }
-  }
-
-  return ORTE_TRUE;
-}
-
-
-// /////////////////////////////////////////////////////////////////////
-//  public void onSubDelete() { }
-// /////////////////////////////////////////////////////////////////////
-Boolean
-onSubDelete(const struct ORTEAppInfo *appInfo,
-            const struct ORTESubInfo *subInfo,
-            void *param)
-{
-// ///////////////////////////////// SPOLECNA CAST //
-  JavaVM          *jvm = NULL;
-  JNIEnv          *env = NULL; // local reference
-  jclass           cls;
-  jobject          obj_ainfo;
-  jobject          obj_sinfo;
-  jmethodID        mid;
-  //
-  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
-  int flag_ok = 0;
-
-  #ifdef TEST_STAGE
-      printf(":c: event func. 'onSubDelete()' called.. \n");
-  #endif
-
-  do
-  {
-// ///////////////////////////////// SPOLECNA CAST //
-    if(domain_events_cont->jvm == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: jvm = NULL! \n");
-     #endif
-     break;
-    }
-    jvm = domain_events_cont->jvm;
-    // get env
-    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
-    if(env == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: env = NULL! \n");
-     #endif
-     break;
-    }
-    // find class
-    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
-    if(cls == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: cls = NULL! \n");
-     #endif
-     break;
-    }
-    // create AppInfo instance
-    obj_ainfo = createAppInfo(env, appInfo);
-    if(obj_ainfo == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: obj_ainfo = NULL! \n");
-     #endif
-     break;
-    }
-    // create SubInfo instance
-    obj_sinfo = createSubInfo(env, subInfo);
-    if(obj_sinfo == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: obj_sinfo = NULL! \n");
-     #endif
-     break;
-    }
-// ///////////////////////////////// SPOLECNA CAST //
-    // get method ID
-    mid = (*env)->GetMethodID(env,
-                              cls,
-                              "onSubDelete",
-                              "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/SubInfo;)V");
-    if(mid == 0)
-    {
-     #ifdef TEST_STAGE
-       printf(":!c: mid = NULL! \n");
-     #endif
-     break;
-    }
-    // call method
-    (*env)->CallVoidMethod(env,
-                           domain_events_cont->obj_de,
-                           mid,
-                           obj_ainfo,
-                           obj_sinfo);
-    flag_ok = 1;
-  } while(0);
-  // while broken
-  if(flag_ok)
-  {
-    if((*jvm)->DetachCurrentThread(jvm) != 0)
-    {
-      printf(":c!: DetachCurrentThread fault! \n");
-      return  ORTE_FALSE;
-    }
-  }
-
-  return ORTE_TRUE;
-}
-
 
 // /////////////////////////////////////////////////////////////////////
 // create default application domain
 // /////////////////////////////////////////////////////////////////////
 JNIEXPORT jlong JNICALL
 Java_org_ocera_orte_DomainApp_jORTEDomainDefaultAppCreate
-(JNIEnv *env, jclass class, jint jdomain, jboolean jsusp)
+(JNIEnv *env, jobject obj, jint jdomain, jboolean jsusp)
 {
   jlong     d;
 
@@ -1152,7 +70,7 @@ Java_org_ocera_orte_DomainApp_jORTEDomainDefaultAppCreate
 // //////////////////////////////////////////////////////////////////////
 JNIEXPORT jlong JNICALL
 Java_org_ocera_orte_DomainApp_jORTEDomainAppCreate
-(JNIEnv *env, jclass cls,
+(JNIEnv *env, jobject obj,
  jint jdomain,
  jlong propHandle,
  jlong eventsHandle,
@@ -1161,6 +79,8 @@ Java_org_ocera_orte_DomainApp_jORTEDomainAppCreate
 {
   // jni varibles
   JavaVM                 *jvm;
+  jclass                  cls;
+  jfieldID                fid;
   jlong                   d;
   //
   ORTEDomainAppEvents    *dom_events;
@@ -1169,58 +89,84 @@ Java_org_ocera_orte_DomainApp_jORTEDomainAppCreate
   #ifdef TEST_STAGE
     printf(":c: ORTEDomainAppCreate() called.. \n");
   #endif
-  // memory alocation
-  // don't forget free memory - free()!!
-  domain_events_cont = (JORTEDomainEventsContext_t *) malloc(sizeof(JORTEDomainEventsContext_t));
-  // get jvm
-  jint b = (*env)->GetJavaVM(env,&jvm);
-  if (b < 0)
-  {
-    printf(":!c: getJavaVM() failed! \n");
-    return 0;
+  //assign domain events only if not null
+  if(obj_de != NULL) {
+    // memory alocation
+    domain_events_cont = (JORTEDomainEventsContext_t *) malloc(sizeof(JORTEDomainEventsContext_t));
+    // get jvm
+    jint b = (*env)->GetJavaVM(env,&jvm);
+    if (b < 0)
+    {
+      printf(":!c: getJavaVM() failed! \n");
+      return 0;
+    }
+    // create global references
+    domain_events_cont->jvm = jvm;
+    // domain events
+    domain_events_cont->obj_de = (*env)->NewGlobalRef(env, obj_de);
+    // get new events
+    dom_events = (ORTEDomainAppEvents *) eventsHandle;
+    ////////////////////////////////////////////////
+    // set new events & their prarameters
+    // onRegFail
+    dom_events->onRegFail = (ORTEOnRegFail) onRegFail;
+    dom_events->onRegFailParam = (void *) domain_events_cont;
+    // onMgrNew
+    dom_events->onMgrNew = (ORTEOnMgrNew) onMgrNew;
+    dom_events->onMgrNewParam = (void *) domain_events_cont;
+    // onMgrDelete
+    dom_events->onMgrDelete = (ORTEOnMgrDelete) onMgrDelete;
+    dom_events->onMgrDeleteParam = (void *) domain_events_cont;
+    // onAppRemoteNew
+    dom_events->onAppRemoteNew = (ORTEOnAppRemoteNew) onAppRemoteNew;
+    dom_events->onAppRemoteNewParam = (void *) domain_events_cont;
+    // onAppDelete
+    dom_events->onAppDelete = (ORTEOnAppDelete) onAppDelete;
+    dom_events->onAppDeleteParam = (void *) domain_events_cont;
+    // onPubRemoteNew
+    dom_events->onPubRemoteNew = (ORTEOnPubRemote) onPubRemoteNew;
+    dom_events->onPubRemoteNewParam = (void *) domain_events_cont;
+    // onPubRemoteChanged
+    dom_events->onPubRemoteChanged = (ORTEOnPubRemote) onPubRemoteChanged;
+    dom_events->onPubRemoteChangedParam = (void *) domain_events_cont;
+    // onPubDelete
+    dom_events->onPubDelete = (ORTEOnPubDelete) onPubDelete;
+    dom_events->onPubDeleteParam = (void *) domain_events_cont;
+    // onSubRemoteNew
+    dom_events->onSubRemoteNew = (ORTEOnSubRemote) onSubRemoteNew;
+    dom_events->onSubRemoteNewParam = (void *) domain_events_cont;
+    // onSubRemoteChanged
+    dom_events->onSubRemoteChanged = (ORTEOnSubRemote) onSubRemoteChanged;
+    dom_events->onSubRemoteChangedParam = (void *) domain_events_cont;
+    // onSubDelete
+    dom_events->onSubDelete = (ORTEOnSubDelete) onSubDelete;
+    dom_events->onSubDeleteParam = (void *) domain_events_cont;
+    ////////////////////////////////////////////////
+    cls = (*env)->GetObjectClass(env, obj);
+    if(cls == 0)
+    {
+      #ifdef TEST_STAGE
+        printf(":!c: cls = NULL \n");
+      #endif
+      return 0;
+    }
+    // fieldID - domainEventsContextHandle
+    fid = (*env)->GetFieldID(env,
+                             cls,
+                             "domainEventsContextHandle",
+                             "J");
+    if(fid == 0)
+    {
+      #ifdef TEST_STAGE
+        printf(":!c: fid = NULL \n");
+      #endif
+      return 0;
+    }
+    (*env)->SetLongField(env,
+                        obj,
+                        fid,
+                        (jlong) domain_events_cont);
   }
-  // create global references
-  domain_events_cont->jvm = jvm;
-  // domain events
-  domain_events_cont->obj_de = (*env)->NewGlobalRef(env, obj_de);
-  // get new events
-  dom_events = (ORTEDomainAppEvents *) eventsHandle;
-  ////////////////////////////////////////////////
-  // set new events & their prarameters
-  // onRegFail
-  dom_events->onRegFail = (ORTEOnRegFail) onRegFail;
-  dom_events->onRegFailParam = (void *) domain_events_cont;
-  // onMgrNew
-  dom_events->onMgrNew = (ORTEOnMgrNew) onMgrNew;
-  dom_events->onMgrNewParam = (void *) domain_events_cont;
-  // onMgrDelete
-  dom_events->onMgrDelete = (ORTEOnMgrDelete) onMgrDelete;
-  dom_events->onMgrDeleteParam = (void *) domain_events_cont;
-  // onAppRemoteNew
-  dom_events->onAppRemoteNew = (ORTEOnAppRemoteNew) onAppRemoteNew;
-  dom_events->onAppRemoteNewParam = (void *) domain_events_cont;
-  // onAppDelete
-  dom_events->onAppDelete = (ORTEOnAppDelete) onAppDelete;
-  dom_events->onAppDeleteParam = (void *) domain_events_cont;
-  // onPubRemoteNew
-  dom_events->onPubRemoteNew = (ORTEOnPubRemote) onPubRemoteNew;
-  dom_events->onPubRemoteNewParam = (void *) domain_events_cont;
-  // onPubRemoteChanged
-  dom_events->onPubRemoteChanged = (ORTEOnPubRemote) onPubRemoteChanged;
-  dom_events->onPubRemoteChangedParam = (void *) domain_events_cont;
-  // onPubDelete
-  dom_events->onPubDelete = (ORTEOnPubDelete) onPubDelete;
-  dom_events->onPubDeleteParam = (void *) domain_events_cont;
-  // onSubRemoteNew
-  dom_events->onSubRemoteNew = (ORTEOnSubRemote) onSubRemoteNew;
-  dom_events->onSubRemoteNewParam = (void *) domain_events_cont;
-  // onSubRemoteChanged
-  dom_events->onSubRemoteChanged = (ORTEOnSubRemote) onSubRemoteChanged;
-  dom_events->onSubRemoteChangedParam = (void *) domain_events_cont;
-  // onSubDelete
-  dom_events->onSubDelete = (ORTEOnSubDelete) onSubDelete;
-  dom_events->onSubDeleteParam = (void *) domain_events_cont;
-  ////////////////////////////////////////////////
   // call ORTE function
   d = (jlong) ORTEDomainAppCreate((int)jdomain,
                                  (ORTEDomainProp *) propHandle,
index 570baefbf65e9665cbfc9a0ae61ba7acb8fd32b4..460682b34863f9d2400df29c9283dba3c6328f1e 100644 (file)
   *
   */
 
+#include <stdlib.h>
 // origin orte headers
 #include "orte.h"
 // pregenerated header
 #include "jorte/org_ocera_orte_DomainApp.h"
 #include "jorte/4all.h"
+#include "jorte/jorte_typedefs_defines.h"
 
 JNIEXPORT jboolean JNICALL
 Java_org_ocera_orte_DomainApp_jORTEDomainAppDestroy
-(JNIEnv *env, jclass cls, jlong dhandle)
+(JNIEnv *env, jobject obj, jlong dhandle)
 {
-  // check domain handle
-  if (dhandle == 0)
+  jlong       h;
+  jclass      cls;
+  jfieldID    fid;
+  int         flag_ok = 0;
+
+  do {
+    // check domain handle
+    if (dhandle == 0)
+    {
+      printf(":!c: ORTEDomainAppDestroy failed! [bad handle] \n");
+      break;
+    }
+    // call ORTE function
+    if (!ORTEDomainAppDestroy((ORTEDomain *) dhandle))
+    {
+      #ifdef TEST_STAGE
+         printf(":c: ORTEDomainAppDestroy failed.. \n");
+      #endif
+      break;
+    }
+
+    // free domainEvents object
+    // find cls
+    cls = (*env)->GetObjectClass(env, obj);
+    if(cls == 0)
+    {
+      #ifdef TEST_STAGE
+        printf(":!c: cls = NULL! \n");
+      #endif
+      break;
+    }
+    // fieldID
+    fid = (*env)->GetFieldID(env,
+                             cls,
+                             "domainEventsContextHandle",
+                             "J");
+    if(fid == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: fid = NULL! \n");
+     #endif
+     break;
+    }
+    // get value
+    h = (*env)->GetLongField(env, obj, fid);
+    if(h)
+    {
+      JORTEDomainEventsContext_t *ctx = (JORTEDomainEventsContext_t*)h;
+      if(ctx->obj_de)
+      {
+        #ifdef TEST_STAGE
+          printf(":c: deleting ctx->obj_de \n");
+        #endif
+        (*env)->DeleteGlobalRef(env, ctx->obj_de);
+      }
+      //
+      free((void*)h);
+    }
+    flag_ok = 1;
+  } while(0);
+
+  if(flag_ok == 0)
   {
-    printf(":!c: ORTEDomainAppDestroy failed! [bad handle] \n");
+    printf(":!c: ORTEDomainAppDestroy failed!  \n");
     return 0;
   }
-  // call ORTE function
-  if (ORTEDomainAppDestroy((ORTEDomain *) dhandle))
-  {
-    #ifdef TEST_STAGE
-       printf(":c: ORTEDomainAppDestroy successfull.. \n");
-    #endif
-    return 1;
-  }
-  printf(":!c: ORTEDomainAppDestroy failed!  \n");
-  return 0;
+
+  return 1;
 }
diff --git a/orte/libjorte/JORTEDomainEvents.c b/orte/libjorte/JORTEDomainEvents.c
new file mode 100644 (file)
index 0000000..1a75046
--- /dev/null
@@ -0,0 +1,1089 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <jni.h>
+#include "orte.h"
+#include "jorte/4all.h"
+#include "jorte/jorte_typedefs_defines.h"
+#include "jorte/jorte_protos_api.h"
+
+// /////////////////////////////////////////////////////////////////////
+//  public void onRegFail()
+// /////////////////////////////////////////////////////////////////////
+Boolean
+onRegFail(void *param)
+{
+// ///////////////////////////////// SPOLECNA CAST //
+  JavaVM          *jvm = NULL;
+  JNIEnv          *env = NULL; // local reference
+  jclass           cls;
+  jmethodID        mid;
+  //
+  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
+  int flag_ok = 0;
+
+  #ifdef TEST_STAGE
+      printf(":c: event func. 'onRegFail()' called.. \n");
+  #endif
+
+  do
+  {
+// ///////////////////////////////// SPOLECNA CAST //
+    if(domain_events_cont->jvm == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: jvm = NULL! \n");
+     #endif
+     break;
+    }
+    jvm = domain_events_cont->jvm;
+    // get env
+    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
+    if(env == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: env = NULL! \n");
+     #endif
+     break;
+    }
+    // find class
+    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
+    if(cls == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: cls = NULL! \n");
+     #endif
+     break;
+    }
+// ///////////////////////////////// SPOLECNA CAST //
+    // get method ID
+    mid = (*env)->GetMethodID(env,
+                              cls,
+                              "onRegFail",
+                              "()V");
+    if(mid == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: mid = NULL! \n");
+     #endif
+     break;
+    }
+    // call method
+    (*env)->CallVoidMethod(env,
+                           domain_events_cont->obj_de,
+                           mid);
+    flag_ok = 1;
+  } while(0);
+  // while broken
+  if(flag_ok)
+  {
+    if((*jvm)->DetachCurrentThread(jvm) != 0)
+    {
+      printf(":c!: DetachCurrentThread fault! \n");
+      return  ORTE_FALSE;
+    }
+  }
+
+  return ORTE_TRUE;
+}
+
+
+// /////////////////////////////////////////////////////////////////////
+//  Event - public void onMgrNew()
+// /////////////////////////////////////////////////////////////////////
+Boolean
+onMgrNew(const struct ORTEAppInfo *appInfo, void *param)
+{
+// ///////////////////////////////// SPOLECNA CAST //
+  JavaVM          *jvm = NULL;
+  JNIEnv          *env = NULL; // local reference
+  jclass           cls;
+  jobject          obj_ainfo;
+  jmethodID        mid;
+  //
+  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
+  int flag_ok = 0;
+
+  #ifdef TEST_STAGE
+      printf(":c: event func. 'onMgrNew()' called.. \n");
+  #endif
+
+  do
+  {
+// ///////////////////////////////// SPOLECNA CAST //
+    if(domain_events_cont->jvm == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: jvm = NULL! \n");
+     #endif
+     break;
+    }
+    jvm = domain_events_cont->jvm;
+    // get env
+    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
+    if(env == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: env = NULL! \n");
+     #endif
+     break;
+    }
+    // find class
+    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
+    if(cls == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: cls = NULL! \n");
+     #endif
+     break;
+    }
+    // create AppInfo instance
+    obj_ainfo = createAppInfo(env, appInfo);
+    if(obj_ainfo == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: obj_ainfo = NULL! \n");
+     #endif
+     break;
+    }
+// ///////////////////////////////// SPOLECNA CAST //
+    // get method ID
+    mid = (*env)->GetMethodID(env,
+                              cls,
+                              "onMgrNew",
+                              "(Lorg/ocera/orte/types/AppInfo;)V");
+    if(mid == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: mid = NULL! \n");
+     #endif
+     break;
+    }
+    // call method
+    (*env)->CallVoidMethod(env,
+                           domain_events_cont->obj_de,
+                           mid,
+                           obj_ainfo);
+    flag_ok = 1;
+  } while(0);
+  // while broken
+  if(flag_ok)
+  {
+    if((*jvm)->DetachCurrentThread(jvm) != 0)
+    {
+      printf(":c!: DetachCurrentThread fault! \n");
+      return  ORTE_FALSE;
+    }
+  }
+
+  return ORTE_TRUE;
+}
+
+
+// /////////////////////////////////////////////////////////////////////
+//  Event - public void onMgrDelete()
+// /////////////////////////////////////////////////////////////////////
+Boolean
+onMgrDelete(const struct ORTEAppInfo *appInfo, void *param)
+{
+// ///////////////////////////////// SPOLECNA CAST //
+  JavaVM          *jvm = NULL;
+  JNIEnv          *env = NULL; // local reference
+  jclass           cls;
+  jobject          obj_ainfo;
+  jmethodID        mid;
+  //
+  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
+  int flag_ok = 0;
+
+  #ifdef TEST_STAGE
+      printf(":c: event func. 'onMgrDelete()' called.. \n");
+  #endif
+
+  do
+  {
+// ///////////////////////////////// SPOLECNA CAST //
+    if(domain_events_cont->jvm == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: jvm = NULL! \n");
+     #endif
+     break;
+    }
+    jvm = domain_events_cont->jvm;
+    // get env
+    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
+    if(env == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: env = NULL! \n");
+     #endif
+     break;
+    }
+    // find class
+    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
+    if(cls == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: cls = NULL! \n");
+     #endif
+     break;
+    }
+    // create AppInfo instance
+    obj_ainfo = createAppInfo(env, appInfo);
+    if(obj_ainfo == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: obj_ainfo = NULL! \n");
+     #endif
+     break;
+    }
+// ///////////////////////////////// SPOLECNA CAST //
+    // get method ID
+    mid = (*env)->GetMethodID(env,
+                              cls,
+                              "onMgrDelete",
+                              "(Lorg/ocera/orte/types/AppInfo;)V");
+    if(mid == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: mid = NULL! \n");
+     #endif
+     break;
+    }
+    // call method
+    (*env)->CallVoidMethod(env,
+                           domain_events_cont->obj_de,
+                           mid,
+                           obj_ainfo);
+    flag_ok = 1;
+  } while(0);
+  // while broken
+  if(flag_ok)
+  {
+    if((*jvm)->DetachCurrentThread(jvm) != 0)
+    {
+      printf(":c!: DetachCurrentThread fault! \n");
+      return  ORTE_FALSE;
+    }
+  }
+
+  return ORTE_TRUE;
+}
+
+
+
+// /////////////////////////////////////////////////////////////////////
+//  Event - onAppRemoteNew
+// /////////////////////////////////////////////////////////////////////
+Boolean
+onAppRemoteNew(const struct ORTEAppInfo *appInfo, void *param)
+{
+// ///////////////////////////////// SPOLECNA CAST //
+  JavaVM          *jvm = NULL;
+  JNIEnv          *env = NULL; // local reference
+  jclass           cls;
+  jobject          obj_ainfo;
+  jmethodID        mid;
+  //
+  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
+  int flag_ok = 0;
+
+  #ifdef TEST_STAGE
+      printf(":c: event func. 'onAppRemoteNew()' called.. \n");
+  #endif
+
+  do
+  {
+// ///////////////////////////////// SPOLECNA CAST //
+    if(domain_events_cont->jvm == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: jvm = NULL! \n");
+     #endif
+     break;
+    }
+    jvm = domain_events_cont->jvm;
+    // get env
+    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
+    if(env == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: env = NULL! \n");
+     #endif
+     break;
+    }
+    // find class
+    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
+    if(cls == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: cls = NULL! \n");
+     #endif
+     break;
+    }
+    // create AppInfo instance
+    obj_ainfo = createAppInfo(env, appInfo);
+    if(obj_ainfo == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: obj_ainfo = NULL! \n");
+     #endif
+     break;
+    }
+// ///////////////////////////////// SPOLECNA CAST //
+
+    // get method ID
+    mid = (*env)->GetMethodID(env,
+                              cls,
+                              "onAppRemoteNew",
+                              "(Lorg/ocera/orte/types/AppInfo;)V");
+    if(mid == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: mid = NULL! \n");
+     #endif
+     break;
+    }
+    // call method
+    (*env)->CallVoidMethod(env,
+                           domain_events_cont->obj_de,
+                           mid,
+                           obj_ainfo);
+    flag_ok = 1;
+  } while(0);
+  // while broken
+  if(flag_ok)
+  {
+    if((*jvm)->DetachCurrentThread(jvm) != 0)
+    {
+      printf(":c!: DetachCurrentThread fault! \n");
+      return  ORTE_FALSE;
+    }
+  }
+
+  return ORTE_TRUE;
+}
+
+
+// /////////////////////////////////////////////////////////////////////
+//  public void onAppDelete() { }
+// /////////////////////////////////////////////////////////////////////
+Boolean
+onAppDelete(const struct ORTEAppInfo *appInfo, void *param)
+{
+// ///////////////////////////////// SPOLECNA CAST //
+  JavaVM          *jvm = NULL;
+  JNIEnv          *env = NULL; // local reference
+  jclass           cls;
+  jobject          obj_ainfo;
+  jmethodID        mid;
+  //
+  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
+  int flag_ok = 0;
+
+  #ifdef TEST_STAGE
+      printf(":c: event func. 'onAppDelete()' called.. \n");
+  #endif
+
+  do
+  {
+// ///////////////////////////////// SPOLECNA CAST //
+    if(domain_events_cont->jvm == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: jvm = NULL! \n");
+     #endif
+     break;
+    }
+    jvm = domain_events_cont->jvm;
+    // get env
+    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
+    if(env == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: env = NULL! \n");
+     #endif
+     break;
+    }
+    // find class
+    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
+    if(cls == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: cls = NULL! \n");
+     #endif
+     break;
+    }
+    // create AppInfo instance
+    obj_ainfo = createAppInfo(env, appInfo);
+    if(obj_ainfo == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: obj_ainfo = NULL! \n");
+     #endif
+     break;
+    }
+// ///////////////////////////////// SPOLECNA CAST //
+    // get method ID
+    mid = (*env)->GetMethodID(env,
+                              cls,
+                              "onAppDelete",
+                              "(Lorg/ocera/orte/types/AppInfo;)V");
+    if(mid == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: mid = NULL! \n");
+     #endif
+     break;
+    }
+    // call method
+    (*env)->CallVoidMethod(env,
+                           domain_events_cont->obj_de,
+                           mid,
+                           obj_ainfo);
+    flag_ok = 1;
+  } while(0);
+  // while broken
+  if(flag_ok)
+  {
+    if((*jvm)->DetachCurrentThread(jvm) != 0)
+    {
+      printf(":c!: DetachCurrentThread fault! \n");
+      return  ORTE_FALSE;
+    }
+  }
+
+  return ORTE_TRUE;
+}
+
+
+// /////////////////////////////////////////////////////////////////////
+//  public void onPubRemoteNew()
+// /////////////////////////////////////////////////////////////////////
+Boolean
+onPubRemoteNew(const struct ORTEAppInfo *appInfo,
+               const struct ORTEPubInfo *pubInfo,
+               void *param)
+{
+// ///////////////////////////////// SPOLECNA CAST //
+  JavaVM          *jvm = NULL;
+  JNIEnv          *env = NULL; // local reference
+  jclass           cls;
+  jobject          obj_ainfo;
+  jobject          obj_pinfo;
+  jmethodID        mid;
+  //
+  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
+  int flag_ok = 0;
+
+  #ifdef TEST_STAGE
+      printf(":c: event func. 'onPubRemoteNew()' called.. \n");
+  #endif
+
+  do
+  {
+// ///////////////////////////////// SPOLECNA CAST //
+    if(domain_events_cont->jvm == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: jvm = NULL! \n");
+     #endif
+     break;
+    }
+    jvm = domain_events_cont->jvm;
+    // get env
+    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
+    if(env == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: env = NULL! \n");
+     #endif
+     break;
+    }
+    // find class
+    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
+    if(cls == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: cls = NULL! \n");
+     #endif
+     break;
+    }
+    // create AppInfo instance
+    obj_ainfo = createAppInfo(env, appInfo);
+    if(obj_ainfo == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: obj_ainfo = NULL! \n");
+     #endif
+     break;
+    }
+    // create PubInfo instance
+    obj_pinfo = createPubInfo(env, pubInfo);
+    if(obj_pinfo == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: obj_pinfo = NULL! \n");
+     #endif
+     break;
+    }
+// ///////////////////////////////// SPOLECNA CAST //
+    // get method ID
+    mid = (*env)->GetMethodID(env,
+                              cls,
+                              "onPubRemoteNew",
+                              "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/PubInfo;)V");
+    if(mid == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: mid = NULL! \n");
+     #endif
+     break;
+    }
+    // call method
+    (*env)->CallVoidMethod(env,
+                           domain_events_cont->obj_de,
+                           mid,
+                           obj_ainfo,
+                           obj_pinfo);
+    flag_ok = 1;
+  } while(0);
+  // while broken
+  if(flag_ok)
+  {
+    if((*jvm)->DetachCurrentThread(jvm) != 0)
+    {
+      printf(":c!: DetachCurrentThread fault! \n");
+      return  ORTE_FALSE;
+    }
+  }
+
+  return ORTE_TRUE;
+}
+
+
+// /////////////////////////////////////////////////////////////////////
+//public void onPubRemoteChanged()
+// /////////////////////////////////////////////////////////////////////
+Boolean
+onPubRemoteChanged(const struct ORTEAppInfo *appInfo,
+                   const struct ORTEPubInfo *pubInfo,
+                   void *param)
+{
+// ///////////////////////////////// SPOLECNA CAST //
+  JavaVM          *jvm = NULL;
+  JNIEnv          *env = NULL; // local reference
+  jclass           cls;
+  jobject          obj_ainfo;
+  jobject          obj_pinfo;
+  jmethodID        mid;
+  //
+  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
+  int flag_ok = 0;
+
+  #ifdef TEST_STAGE
+      printf(":c: event func. 'onPubRemoteChanged()' called.. \n");
+  #endif
+
+  do
+  {
+// ///////////////////////////////// SPOLECNA CAST //
+    if(domain_events_cont->jvm == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: jvm = NULL! \n");
+     #endif
+     break;
+    }
+    jvm = domain_events_cont->jvm;
+    // get env
+    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
+    if(env == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: env = NULL! \n");
+     #endif
+     break;
+    }
+    // find class
+    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
+    if(cls == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: cls = NULL! \n");
+     #endif
+     break;
+    }
+    // create AppInfo instance
+    obj_ainfo = createAppInfo(env, appInfo);
+    if(obj_ainfo == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: obj_ainfo = NULL! \n");
+     #endif
+     break;
+    }
+    // create PubInfo instance
+    obj_pinfo = createPubInfo(env, pubInfo);
+    if(obj_pinfo == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: obj_pinfo = NULL! \n");
+     #endif
+     break;
+    }
+// ///////////////////////////////// SPOLECNA CAST //
+    // get method ID
+    mid = (*env)->GetMethodID(env,
+                              cls,
+                              "onPubRemoteChanged",
+                              "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/PubInfo;)V");
+    if(mid == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: mid = NULL! \n");
+     #endif
+     break;
+    }
+    // call method
+    (*env)->CallVoidMethod(env,
+                           domain_events_cont->obj_de,
+                           mid,
+                           obj_ainfo,
+                           obj_pinfo);
+    flag_ok = 1;
+  } while(0);
+  // while broken
+  if(flag_ok)
+  {
+    if((*jvm)->DetachCurrentThread(jvm) != 0)
+    {
+      printf(":c!: DetachCurrentThread fault! \n");
+      return  ORTE_FALSE;
+    }
+  }
+
+  return ORTE_TRUE;
+}
+
+
+
+
+// /////////////////////////////////////////////////////////////////////
+//  public void onPubDelete()
+// /////////////////////////////////////////////////////////////////////
+Boolean
+onPubDelete(const struct ORTEAppInfo *appInfo,
+            const struct ORTEPubInfo *pubInfo,
+            void *param)
+{
+// ///////////////////////////////// SPOLECNA CAST //
+  JavaVM          *jvm = NULL;
+  JNIEnv          *env = NULL; // local reference
+  jclass           cls;
+  jobject          obj_ainfo;
+  jobject          obj_pinfo;
+  jmethodID        mid;
+  //
+  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
+  int flag_ok = 0;
+
+  #ifdef TEST_STAGE
+      printf(":c: event func. 'onPubDelete()' called.. \n");
+  #endif
+
+  do
+  {
+// ///////////////////////////////// SPOLECNA CAST //
+    if(domain_events_cont->jvm == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: jvm = NULL! \n");
+     #endif
+     break;
+    }
+    jvm = domain_events_cont->jvm;
+    // get env
+    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
+    if(env == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: env = NULL! \n");
+     #endif
+     break;
+    }
+    // find class
+    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
+    if(cls == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: cls = NULL! \n");
+     #endif
+     break;
+    }
+    // create AppInfo instance
+    obj_ainfo = createAppInfo(env, appInfo);
+    if(obj_ainfo == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: obj_ainfo = NULL! \n");
+     #endif
+     break;
+    }
+    // create PubInfo instance
+    obj_pinfo = createPubInfo(env, pubInfo);
+    if(obj_pinfo == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: obj_pinfo = NULL! \n");
+     #endif
+     break;
+    }
+// ///////////////////////////////// SPOLECNA CAST //
+    // get method ID
+    mid = (*env)->GetMethodID(env,
+                              cls,
+                              "onPubDelete",
+                              "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/PubInfo;)V");
+    if(mid == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: mid = NULL! \n");
+     #endif
+     break;
+    }
+    // call method
+    (*env)->CallVoidMethod(env,
+                           domain_events_cont->obj_de,
+                           mid,
+                           obj_ainfo,
+                           obj_pinfo);
+    flag_ok = 1;
+  } while(0);
+  // while broken
+  if(flag_ok)
+  {
+    if((*jvm)->DetachCurrentThread(jvm) != 0)
+    {
+      printf(":c!: DetachCurrentThread fault! \n");
+      return  ORTE_FALSE;
+    }
+  }
+
+  return ORTE_TRUE;
+}
+
+
+// /////////////////////////////////////////////////////////////////////
+//  Event - onSubRemoteNew
+// /////////////////////////////////////////////////////////////////////
+Boolean
+onSubRemoteNew(const struct ORTEAppInfo *appInfo,
+               const struct ORTESubInfo *subInfo,
+               void *param)
+{
+// ///////////////////////////////// SPOLECNA CAST //
+  JavaVM          *jvm = NULL;
+  JNIEnv          *env = NULL; // local reference
+  jobject          obj_ainfo;
+  jobject          obj_sinfo;
+  jclass           cls;
+  jmethodID        mid;
+  //
+  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
+  int flag_ok = 0;
+
+  #ifdef TEST_STAGE
+      printf(":c: event func. 'onSubRemoteNew()' called.. \n");
+  #endif
+
+  do
+  {
+// ///////////////////////////////// SPOLECNA CAST //
+    if(domain_events_cont->jvm == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: jvm = NULL! \n");
+     #endif
+     break;
+    }
+    jvm = domain_events_cont->jvm;
+    // get env
+    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
+    if(env == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: env = NULL! \n");
+     #endif
+     break;
+    }
+    // find class
+    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
+    if(cls == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: cls = NULL! \n");
+     #endif
+     break;
+    }
+    // create AppInfo instance
+    obj_ainfo = createAppInfo(env, appInfo);
+    if(obj_ainfo == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: obj_ainfo = NULL! \n");
+     #endif
+     break;
+    }
+    // create SubInfo instance
+    obj_sinfo = createSubInfo(env, subInfo);
+    if(obj_sinfo == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: obj_sinfo = NULL! \n");
+     #endif
+     break;
+    }
+// ///////////////////////////////// SPOLECNA CAST //
+    // get method ID
+    mid = (*env)->GetMethodID(env,
+                              cls,
+                              "onSubRemoteNew",
+                              "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/SubInfo;)V");
+    if(mid == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: mid = NULL! \n");
+     #endif
+     break;
+    }
+    // call method
+    (*env)->CallVoidMethod(env,
+                           domain_events_cont->obj_de,
+                           mid,
+                           obj_ainfo,
+                           obj_sinfo);
+    flag_ok = 1;
+  } while(0);
+  // while broken
+  if(flag_ok)
+  {
+    if((*jvm)->DetachCurrentThread(jvm) != 0)
+    {
+      printf(":c!: DetachCurrentThread fault! \n");
+      return  ORTE_FALSE;
+    }
+  }
+
+  return ORTE_TRUE;
+}
+
+
+// /////////////////////////////////////////////////////////////////////
+//  public void onSubRemoteChanged() { }
+// /////////////////////////////////////////////////////////////////////
+Boolean
+onSubRemoteChanged(const struct ORTEAppInfo *appInfo,
+                   const struct ORTESubInfo *subInfo,
+                   void *param)
+{
+// ///////////////////////////////// SPOLECNA CAST //
+  JavaVM          *jvm = NULL;
+  JNIEnv          *env = NULL; // local reference
+  jclass           cls;
+  jobject          obj_ainfo;
+  jobject          obj_sinfo;
+  jmethodID        mid;
+  //
+  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
+  int flag_ok = 0;
+
+  #ifdef TEST_STAGE
+      printf(":c: event func. 'onSubRemoteChanged()' called.. \n");
+  #endif
+
+  do
+  {
+// ///////////////////////////////// SPOLECNA CAST //
+    if(domain_events_cont->jvm == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: jvm = NULL! \n");
+     #endif
+     break;
+    }
+    jvm = domain_events_cont->jvm;
+    // get env
+    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
+    if(env == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: env = NULL! \n");
+     #endif
+     break;
+    }
+    // find class
+    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
+    if(cls == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: cls = NULL! \n");
+     #endif
+     break;
+    }
+    // create AppInfo instance
+    obj_ainfo = createAppInfo(env, appInfo);
+    if(obj_ainfo == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: obj_ainfo = NULL! \n");
+     #endif
+     break;
+    }
+    // create SubInfo instance
+    obj_sinfo = createSubInfo(env, subInfo);
+    if(obj_sinfo == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: obj_sinfo = NULL! \n");
+     #endif
+     break;
+    }
+// ///////////////////////////////// SPOLECNA CAST //
+    // get method ID
+    mid = (*env)->GetMethodID(env,
+                              cls,
+                              "onSubRemoteChanged",
+                              "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/SubInfo;)V");
+    if(mid == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: mid = NULL! \n");
+     #endif
+     break;
+    }
+    // call method
+    (*env)->CallVoidMethod(env,
+                           domain_events_cont->obj_de,
+                           mid,
+                           obj_ainfo,
+                           obj_sinfo);
+    flag_ok = 1;
+  } while(0);
+  // while broken
+  if(flag_ok)
+  {
+    if((*jvm)->DetachCurrentThread(jvm) != 0)
+    {
+      printf(":c!: DetachCurrentThread fault! \n");
+      return  ORTE_FALSE;
+    }
+  }
+
+  return ORTE_TRUE;
+}
+
+
+// /////////////////////////////////////////////////////////////////////
+//  public void onSubDelete() { }
+// /////////////////////////////////////////////////////////////////////
+Boolean
+onSubDelete(const struct ORTEAppInfo *appInfo,
+            const struct ORTESubInfo *subInfo,
+            void *param)
+{
+// ///////////////////////////////// SPOLECNA CAST //
+  JavaVM          *jvm = NULL;
+  JNIEnv          *env = NULL; // local reference
+  jclass           cls;
+  jobject          obj_ainfo;
+  jobject          obj_sinfo;
+  jmethodID        mid;
+  //
+  JORTEDomainEventsContext_t   *domain_events_cont = (JORTEDomainEventsContext_t*) param;
+  int flag_ok = 0;
+
+  #ifdef TEST_STAGE
+      printf(":c: event func. 'onSubDelete()' called.. \n");
+  #endif
+
+  do
+  {
+// ///////////////////////////////// SPOLECNA CAST //
+    if(domain_events_cont->jvm == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: jvm = NULL! \n");
+     #endif
+     break;
+    }
+    jvm = domain_events_cont->jvm;
+    // get env
+    (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
+    if(env == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: env = NULL! \n");
+     #endif
+     break;
+    }
+    // find class
+    cls = findClass(env, "org.ocera.orte.types.DomainEvents");
+    if(cls == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: cls = NULL! \n");
+     #endif
+     break;
+    }
+    // create AppInfo instance
+    obj_ainfo = createAppInfo(env, appInfo);
+    if(obj_ainfo == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: obj_ainfo = NULL! \n");
+     #endif
+     break;
+    }
+    // create SubInfo instance
+    obj_sinfo = createSubInfo(env, subInfo);
+    if(obj_sinfo == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: obj_sinfo = NULL! \n");
+     #endif
+     break;
+    }
+// ///////////////////////////////// SPOLECNA CAST //
+    // get method ID
+    mid = (*env)->GetMethodID(env,
+                              cls,
+                              "onSubDelete",
+                              "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/SubInfo;)V");
+    if(mid == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: mid = NULL! \n");
+     #endif
+     break;
+    }
+    // call method
+    (*env)->CallVoidMethod(env,
+                           domain_events_cont->obj_de,
+                           mid,
+                           obj_ainfo,
+                           obj_sinfo);
+    flag_ok = 1;
+  } while(0);
+  // while broken
+  if(flag_ok)
+  {
+    if((*jvm)->DetachCurrentThread(jvm) != 0)
+    {
+      printf(":c!: DetachCurrentThread fault! \n");
+      return  ORTE_FALSE;
+    }
+  }
+
+  return ORTE_TRUE;
+}
\ No newline at end of file
index 7c4358a4b9161c7ce7563e69a686753e0ae07031..5fb4c9669c94d205fffb0d0a3d42d0a572ed4aaf 100644 (file)
   *
   */
 
-
+#include <stdlib.h>
 // origin orte headers
 #include "orte.h"
 // pregenerated header
 #include "jorte/org_ocera_orte_DomainMgr.h"
 #include "jorte/4all.h"
+#include "jorte/jorte_typedefs_defines.h"
+#include "jorte/jorte_protos_api.h"
 
 /* ****************************** *
  *  create default manager domain *
  * ****************************** */
 JNIEXPORT jlong JNICALL
 Java_org_ocera_orte_DomainMgr_jORTEDomainDefaultMgrCreate
-(JNIEnv *env, jclass cls, jint jdomain, jboolean susp)
+(JNIEnv *env, jobject obj, jint jdomain, jboolean susp)
 {
   jlong      d;
 
@@ -63,11 +65,98 @@ Java_org_ocera_orte_DomainMgr_jORTEDomainDefaultMgrCreate
  * *************************** */
 JNIEXPORT jlong JNICALL
 Java_org_ocera_orte_DomainMgr_jORTEDomainMgrCreate
-(JNIEnv *env, jclass cls, jint jdomain, jlong propHandle,
- jlong eventsHandle, jboolean susp)
+(JNIEnv *env, jobject obj,
+ jint jdomain,
+ jlong propHandle,
+ jlong eventsHandle,
+ jobject obj_de,
+ jboolean susp)
 {
+  JavaVM     *jvm;
+  jclass      cls;
+  jfieldID    fid;
   jlong       d;
-
+  //
+  ORTEDomainAppEvents    *dom_events;
+  JORTEDomainEventsContext_t  *domain_events_cont;
+  //assign domain events only if not null
+  if(obj_de != NULL) {
+    // memory alocation
+    domain_events_cont = (JORTEDomainEventsContext_t *) malloc(sizeof(JORTEDomainEventsContext_t));
+    // get jvm
+    jint b = (*env)->GetJavaVM(env,&jvm);
+    if (b < 0)
+    {
+      printf(":!c: getJavaVM() failed! \n");
+      return 0;
+    }
+    // create global references
+    domain_events_cont->jvm = jvm;
+    // domain events
+    domain_events_cont->obj_de = (*env)->NewGlobalRef(env, obj_de);
+    // get new events
+    dom_events = (ORTEDomainAppEvents *) eventsHandle;
+    ////////////////////////////////////////////////
+    // set new events & their prarameters
+    // onRegFail
+    dom_events->onRegFail = (ORTEOnRegFail) onRegFail;
+    dom_events->onRegFailParam = (void *) domain_events_cont;
+    // onMgrNew
+    dom_events->onMgrNew = (ORTEOnMgrNew) onMgrNew;
+    dom_events->onMgrNewParam = (void *) domain_events_cont;
+    // onMgrDelete
+    dom_events->onMgrDelete = (ORTEOnMgrDelete) onMgrDelete;
+    dom_events->onMgrDeleteParam = (void *) domain_events_cont;
+    // onAppRemoteNew
+    dom_events->onAppRemoteNew = (ORTEOnAppRemoteNew) onAppRemoteNew;
+    dom_events->onAppRemoteNewParam = (void *) domain_events_cont;
+    // onAppDelete
+    dom_events->onAppDelete = (ORTEOnAppDelete) onAppDelete;
+    dom_events->onAppDeleteParam = (void *) domain_events_cont;
+    // onPubRemoteNew
+    dom_events->onPubRemoteNew = (ORTEOnPubRemote) onPubRemoteNew;
+    dom_events->onPubRemoteNewParam = (void *) domain_events_cont;
+    // onPubRemoteChanged
+    dom_events->onPubRemoteChanged = (ORTEOnPubRemote) onPubRemoteChanged;
+    dom_events->onPubRemoteChangedParam = (void *) domain_events_cont;
+    // onPubDelete
+    dom_events->onPubDelete = (ORTEOnPubDelete) onPubDelete;
+    dom_events->onPubDeleteParam = (void *) domain_events_cont;
+    // onSubRemoteNew
+    dom_events->onSubRemoteNew = (ORTEOnSubRemote) onSubRemoteNew;
+    dom_events->onSubRemoteNewParam = (void *) domain_events_cont;
+    // onSubRemoteChanged
+    dom_events->onSubRemoteChanged = (ORTEOnSubRemote) onSubRemoteChanged;
+    dom_events->onSubRemoteChangedParam = (void *) domain_events_cont;
+    // onSubDelete
+    dom_events->onSubDelete = (ORTEOnSubDelete) onSubDelete;
+    dom_events->onSubDeleteParam = (void *) domain_events_cont;
+    ////////////////////////////////////////////////
+    cls = (*env)->GetObjectClass(env, obj);
+    if(cls == 0)
+    {
+      #ifdef TEST_STAGE
+        printf(":!c: cls = NULL \n");
+      #endif
+      return 0;
+    }
+    // fieldID - domainEventsContextHandle
+    fid = (*env)->GetFieldID(env,
+                             cls,
+                             "domainEventsContextHandle",
+                             "J");
+    if(fid == 0)
+    {
+      #ifdef TEST_STAGE
+        printf(":!c: fid = NULL \n");
+      #endif
+      return 0;
+    }
+    (*env)->SetLongField(env,
+                        obj,
+                        fid,
+                        (jlong) domain_events_cont);
+  }
   // call ORTE function
   d = (jlong) ORTEDomainMgrCreate((int)jdomain,
                                   (ORTEDomainProp *) propHandle,
index 0ba620768d9a1942211587064e1498c23fbf806b..e80ff49fccf35100a362ddb8008534eafeeafb3b 100644 (file)
   *
   */
 
-
+#include <stdlib.h>
 // origin orte headers
 #include "orte.h"
 // pregenerated header
 #include "jorte/org_ocera_orte_DomainMgr.h"
 #include "jorte/4all.h"
+#include "jorte/jorte_typedefs_defines.h"
 
 
 JNIEXPORT jboolean JNICALL
 Java_org_ocera_orte_DomainMgr_jORTEDomainMgrDestroy
-(JNIEnv *env, jclass cls, jlong dhandle)
+(JNIEnv *env, jobject obj, jlong dhandle)
 {
-  int8_t     b;
+  jlong       h;
+  jclass      cls;
+  jfieldID    fid;
+  int         flag_ok = 0;
+
+  do {
+    // check domain handle
+    if (dhandle == 0)
+    {
+      printf(":!c: ORTEDomainAppDestroy failed! [bad handle] \n");
+      break;
+    }
+    // call ORTE function
+    if(!ORTEDomainMgrDestroy((ORTEDomain *) dhandle))
+    {
+      #ifdef TEST_STAGE
+        printf(":c: mgrDomain destroy failed.. \n");
+      #endif
+      break;
+    }
+    // free domainEvents object
+    // find cls
+    cls = (*env)->GetObjectClass(env, obj);
+    if(cls == 0)
+    {
+      #ifdef TEST_STAGE
+        printf(":!c: cls = NULL! \n");
+      #endif
+      break;
+    }
+    // fieldID
+    fid = (*env)->GetFieldID(env,
+                             cls,
+                             "domainEventsContextHandle",
+                             "J");
+    if(fid == 0)
+    {
+     #ifdef TEST_STAGE
+       printf(":!c: fid = NULL! \n");
+     #endif
+     break;
+    }
+    // get value
+    h = (*env)->GetLongField(env, obj, fid);
+    if(h)
+    {
+      JORTEDomainEventsContext_t *ctx = (JORTEDomainEventsContext_t*)h;
+      if(ctx->obj_de)
+      {
+        #ifdef TEST_STAGE
+          printf(":c: deleting ctx->obj_de \n");
+        #endif
+        (*env)->DeleteGlobalRef(env, ctx->obj_de);
+      }
+      //
+      free((void*)h);
+    }
+    flag_ok = 1;
+  } while(0);
 
-  // call ORTE function
-  b = ORTEDomainMgrDestroy((ORTEDomain *) dhandle);
-  if(b == ORTE_TRUE)
+  if(flag_ok == 0)
   {
-    #ifdef TEST_STAGE
-      printf(":c: mgrDomain destroy successfully.. \n");
-    #endif
-    return 1;
+    printf(":!c: ORTEDomainMgrDestroy failed!  \n");
+    return 0;
   }
-  else
-    printf(":!c: mgrDomain destroy failed! [bad domain handle] \n");
-  return 0;
+
+  return 1;
 }
index 87892ffe6a01c4d018c981fc3a4468b00b714ba3..a8bf3cc68ccfd903874251b18e5d00ecbebbad2d 100644 (file)
@@ -33,6 +33,7 @@
 #include "jorte/4all.h"
 // pregenerated header
 #include "jorte/org_ocera_orte_Publication.h"
+#include "jorte/jorte_protos_api.h"
 
 
 JNIEXPORT jobject JNICALL
index 1cd9c12b7350a60415f570483536316e8a085bb9..dd8e6062f11567dd54df87ad9348abbb496c5ad6 100644 (file)
@@ -52,6 +52,20 @@ Java_org_ocera_orte_Subscription_jORTESubscriptionDestroy
 
   do
   {
+    if(subs_handle)
+    {
+      // call ORTE function
+      b = ORTESubscriptionDestroy((ORTESubscription *) subs_handle);
+      if (b == ORTE_BAD_HANDLE)
+      {
+        printf(":!c: subscription destroy failed! [bad sub handle] \n");
+        break;
+      }
+      #ifdef TEST_STAGE
+        printf(":c: subscription destroy succesfuly.. \n");
+      #endif
+    }
+
     // free callBack object
     // find cls
     cls = (*env)->GetObjectClass(env, obj);
@@ -74,19 +88,6 @@ Java_org_ocera_orte_Subscription_jORTESubscriptionDestroy
      #endif
      break;
     }
-    if(subs_handle)
-    {
-      // call ORTE function
-      b = ORTESubscriptionDestroy((ORTESubscription *) subs_handle);
-      if (b == ORTE_BAD_HANDLE)
-      {
-        printf(":!c: subscription destroy failed! [bad sub handle] \n");
-        break;
-      }
-      #ifdef TEST_STAGE
-        printf(":c: subscription destroy succesfuly.. \n");
-      #endif
-    }
     // get value
     h = (*env)->GetLongField(env, obj, fid);
     if(h)
index 54858209ff47ce183f7c4dd55b7643346c808155..6ba6b05342bbab466e714622e307b65cdb3f2f95 100644 (file)
@@ -33,6 +33,7 @@
 #include "jorte/4all.h"
 // pregenerated header
 #include "jorte/org_ocera_orte_Subscription.h"
+#include "jorte/jorte_protos_api.h"
 
 
 JNIEXPORT jobject JNICALL
index b6517ffdeee221b224190cb1661b9b6961b47b52..7f1de70f1ca08407de4de3855e2a0066c318be3a 100644 (file)
@@ -29,6 +29,7 @@ JNtpTimeToStringMs.c \
 JNtpTimeToStringUs.c \
 JORTEDomainAppCreate.c \
 JORTEDomainAppDestroy.c \
+JORTEDomainEvents.c \
 JORTEDomainInitEvents.c \
 JORTEDomainMgrCreate.c \
 JORTEDomainMgrDestroy.c \