Instantiate Java objects from C++ and the ability for callbacks

I've been reading up on JNI and I've been able to
1) load a C++ DLL and call C++ functions from Java and
2) call Java functions from a C++ DLL.
However, I haven't been able to find a way to pass a C++ interface class to a Java method (from a C++ DLL), where the Java method will call functions in that interface. (That is; I need to initiate the C++ DLL before any Java code is called.) I'll illustrate below if I'm unclear.
// Java
public class javaClass
     public void doStuff(WrapperInterface wi)
          wi.foobar();
// C++
class WrapperInterface
     virtual void foobar() = 0;
class cppClass : public WrapperInterface
     virtual void foobar()
          printf("helloworld");
int main()
     // initiate JVM, environment etc
     javaClass javaInstance;
     WrapperInterface* cppInstance = new cppClass();
     javaInstance.doStuff(cppInstance);
}How can I accomplish this?
I can't seem to instantiate a class in C++, that have been compiled as C++ with the javah command, so I can't instantiate it and set its initial values. (The functions are not declared as static in my Java class at least...) I can on the other hand instantiate it as a Java class. However, nothing happens when I call (from C++) the functions of the instantiated Java class.
Also, it seems according to my tests and the documentation that I could find that you are required to use a System.LoadLibrary() from Java. Will not that make the DLL it loads load again, thus creating two instantiations of that DLL?
As a final thought, if this is not possible with SUN's JNI, will it be possible to do with other native interfaces for Java?

You can pass a pointer back to java by using a java long data type. You can pass that to other java native (JNI) methods and write code that casts the long back to the C++ class and then calls a class method for that class.

Similar Messages

  • Cannot instantiate java object from c funtion

    Hi guys,
    I need some help on the following problem :
    i want to call java method from c funtion using jni. My java method should instantiate another class on java side. Here's an example.
    public class KMS {
        public int problemMethod() {
               System.out.println("We are in 1"); // This is written on the screen
               Parser parser = new Parser();
              System.out.println("We are in 2"); // This is not, but no problem on java side
             return 1;
    public class Parser {
       // This class parse an XML document
    }And Here's my c code :
    void main(int argc, char *argv[])
         // create JVM with success
    jclass cls =(jclass) env->NewGlobalRef (env->FindClass ("KMS"));
         if (cls == 0)
                              printf("cannot find cls \n");
         jmethodID mid = (env)->GetMethodID(cls, "<init>", "()V");
         if (mid == 0)
              printf("cannot find initialization\n");
         jobject jobj = (env)->NewObject(cls, mid);
         if (jobj == 0)
              printf("cannot find object\n");
         jmethodID mymid = (env)->GetMethodID(cls, "problemMethod", "()I");
         if(mymid == 0)
              printf("cannot find problemMethod\n");
         jint result = (env)->CallIntMethod(jobj, mymid);
         printf("result %d\n", result);
    }I get the following when I run c program :
    We are in 1
    I get no error msg, and the return value is 0. It seems that the JVM cannot instantiate class Parser. But the problem is when I run java code only, from a java main, it works fine. Do I need to implement another things in c side in order to be able to instanciate class Parser.
    Thanks a lot for your help,
    javaFriendly

    1. You have left out some important facts (like where
    is your java code establishing the native method?
    The native method and java codes can communicate. I can see the first System.out.println result when calling native method. My problem is for the second one. Class Parser cannot be instantiate. (But the java code is correct, I try it when I use only java).
    2. Since your native code returns nothing, why would
    you expect ANY particular value to be returned?
    I was talking about return in java side. My java code should return me 1, but in native method a see a 0. This shows that there's an error when calling java.
    3. I would not count on the printf statements. You
    probably - sometime - should see some output, but if
    you don't do a "flush" after ech one, then there is a
    good chance it will not appear where you expect it.Can you tell me how to use "flush" in order to see all results,
    Best regards
    Java friendly

  • How to reference multiple instances of the same Java object from PL/SQL?

    Dear all,
    I'm experimenting with calling Java from PL/SQL.
    My simple attempts work, which is calling public static [java] methods through PL/SQL wrappers from SQL (and PL/SQL). (See my example code below).
    However it is the limitation of the public static methods that puzzels me.
    I would like to do the following:
    - from PL/SQL (in essence it needs to become a forms app) create one or more objects in the java realm
    - from PL/SQL alter properties of a java object
    - from PL/SQL call methods on a java object
    However I fail to see how I can create multiple instances of an object and reference one particular object in the java realm through public static methods.
    My current solution is the singleton pattern: of said java object I have only 1 copy, so I do not need to know a reference to it.
    I can just assume that there will only ever be 1 of said object.
    But I should be able to make more then 1 instance of an object.
    To make it more specific:
    - suppose I have the object car in the java realm
    - from PL/SQL I want to create a car in the java realm
    - from PL/SQL I need to give it license plates
    - I need to start the engine of a scpecific car
    However if I want more then 1 car then I need to be able to refrence them. How is this done?
    Somehow I need to be able to execute the following in PL/SQL:
    DECLARE
    vMyCar_Porsche CAR;
    vMyCar_Fiat CAR;
    BEGIN
    vMyCar_Porsche = new CAR();
    vMyCar_Fiat = new CAR();
    vMyCar_Porsche.setLicensePlates('FAST');
    vMyCar_Porsche.startEngine();
    vMyCar_Fiat.killEngine();
    END;
    Thanks in advance.
    Best Regards,
    Ruben
    My current example code is the following:
    JAVA:
    ===
    CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED CODAROUL."RMG/BO/RMG_OBJECT" as package RMG.BO;
    public class RMG_OBJECT {
    private static RMG_OBJECT instance = new RMGOBJECT();
    private String rmgObjectNaam;
    private RMG_OBJECT(){
    this.rmgObjectNaam = "NonDetermined";
    public static String GET_RMGOBJECT_NAAM () {
    String toestand = null;
    if (_instance == null) {toestand = "DOES NOT EXIST";} else { toestand = "EXISTS";};
    System.out.println("instance : " + toestand);
    System.out.println("object name is : " + _instance.rmgObjectNaam);
    return _instance.rmgObjectNaam;
    public static Integer SET_RMGOBJECT_NAAM (String IN)
    try
    _instance.rmgObjectNaam = IN;
    return 1;
    catch (Exception e)//catch
    System.out.println("Other Exception: " + e.toString());
    e.printStackTrace();
    return 5;
    } //catch
    PL/SQL Wrapper:
    ==========
    CREATE OR REPLACE FUNCTION CODAROUL.SET_RMGOBJECT_NAAM(NAAM IN VARCHAR2) return NUMBER AS
    LANGUAGE JAVA NAME 'RMG.BO.RMG_OBJECT.SET_RMGOBJECT_NAAM (java.lang.String) return java.lang.Integer';
    Calling from SQL:
    ==========
    CALL dbms_java.set_output(2000);
    select CODAROUL.GET_RMGOBJECT_NAAM() from dual;
    Edited by: RubenS_BE on Apr 6, 2012 5:35 AM
    Edited by: 925945 on Apr 6, 2012 5:41 AM

    You can do this by manually creating a new iterator binding in your binding tab.
    So instead of dragging the VO directly to the page, go to the binding tab, add a new executable iterator binding, and point to that one from your ELs in the page itself.

  • How can I drop the java objects from a schema

    hi..good afternoon all...
    How can I drop the java objects from a database schema???
    suppose the credentials are scott/tiger@db1
    Another thing is that...I have to do this from cmd(command prompt) as there is no plsql developer or sqldeveloper installed in the machine.
    plss help...thanks in advance...

    hi...i have already tried all the options..but it is showing the error..
    ora:01435 - user does not exist
    but when i have given the command...
    select object type, object_name, status from user_objects where object_type like'%JAVA%';
    then it is showing that the java_object is present....
    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    SQL>
    SQL>
    SQL>
    SQL> set linesize 200
    SQL>
    SQL>
    SQL>
    SQL> select object_type, object_name, status from user_objects where object_type
    like '%JAVA%';
    OBJECT_TYPE OBJECT_NAME
    STATUS
    JAVA CLASS javaclass1
    VALID
    JAVA SOURCE javaclass1
    VALID
    SQL> drop java source javaclass1.java;
    drop java source javaclass1.java
    ERROR at line 1:
    ORA-01435: user does not exist
    SQL>

  • HT1338 There is a lot of talk about the Java security issues and the ability to download a patch fix, do i need to do this or will software update pick this up for me?

    There is a lot of talk about the Java security issues and the ability to download an apple patch fix, do i need to do this or will software update pick this up for me?

    Thanks for that, how do I establish if I have Java installed as on Safari preferences it indicates the following
    Web content - Enable Java
                        - Enable JavaScript

  • Dropping java object from Oracle 8i

    We areaable to load java methods and publish them to SQL in Oracle 8i using Jdev Deploy wizard, but we can not drop them thru
    Open View As->Database Browser of the connection object, they drop menu is greyed out/disable. What kind privilege we need to drop java object from Oracle 8i? Or there is something wrong with the database setup.
    Thank you very much

    There are three options:
    Normal
    SysDBA
    SysOper
    I have tried the three of them, none of them works, is there third option SYS?
    Thank you very much.
    <BLOCKQUOTE><font size="1" face="Verdana, Arial">quote:</font><HR>Originally posted by Amit:
    Log in as SYS.<HR></BLOCKQUOTE>
    null

  • How can i return an object isn't java object from webservice????

    Hi !
    I have a problem in my Project. When i call method return a java object from webservice , it 's too easy. But when i create my own object (ex:ClientRequest.class) , it doesn't work exactly T_T . When i return that object (on client, doesn't have ClientRequest.class) , i cann't access its static variables.
    How can i do it ??
    Please help me !
    Thanks a lot !!!!!
    class ClientRequest {
    public static int i;
    public static String s;
    public ClientRequest() {
    }

    You can use REFCURSOR type for this. In java SQL TYPES this is available too. In your PLSQL use REFCURSOR for that array and then take the same from java code. Look in the servelet programming book for this SQLTYPE and see PLSQL for handling refcursors. We have done this way and it works.

  • Access Java object from Javascript

    Hi
    I'm trying to invoke a Java object from Javascript (scriptengine and all that).
    I want to add scripting features to a GeneXus Java generated app... and I have very basic skills on java too. Sorry for that ;o).
    This is the java code to pass "params" to the scriptengine:
    engine.put("remoteHandle",remoteHandle);
    engine.put("context", context); The remoteHandle (int) and context (com.genexus.ModelContext) pass trough all the gx-java generated programs.
    This javascript works fine:
    importClass(Packages.uftestjs);
    new uftestjs(remoteHandle).execute( ) ;The remoteHandle conversion is ok (javascript-number to int). The context is optional.
    But if I want to pass context:
    importClass(Packages.uftestjs);
    new uftestjs(remoteHandle, context).execute( ) ;Fails with this:
    "javax.script.ScriptException: sun.org.mozilla.javascript.internal.EvaluatorException: Java constructor for 'uftestjs' with arguments 'number,javax.script.SimpleScriptContext' not found."
    Obviously, no conversion is possible with context (javax.script.SimpleScriptContext to com.genexus.ModelContext).
    There is some way to reference de original context, by the object Id??? or something like that???
    Thanks in advance for any replies!!!
    Greetings from Chile. (I hope you can understand my english!)

    Hi
    Well, since this topic is about java programming I think the place is right here.
    (I use some tricks to embed java statements in genexus objects...)
    I will try to get some help at Artech (GX) on how to build something... to get the conversion needed.
    But they are not focussed on support this kind of questions.
    Anyway, I want to know: do I can to reference an object by the objId?
    I want to code something like this:
    com.genexus.ModelContext context =
                     (com.genexus.ModelContex)getTheObjectFromTheJVM(theObjectId);(powered by google translator, ha!)

  • 2 TopLink Java Object from Table to be used in single selectOneChoice

    Hello everyone, can I ask for help on how to solve my problem....
    Here's my scenario, I have 2 tables namely tblCollege and tblCourse, they are related through tblCourse.CollegeCode = tblCollege.Code.
    I use the jdeveloper wizard using TopLink -> Java Object from Table to add these table to my project. I created an EJB Data Control so that I can use them to my Userinterface using ADF Faces.
    What I really want to do is that I need to have selectOneChoice component displaying:
    tblCollege.Name + tblCourse.Name, and it should have a value of tblCollege.Code + tblCourse.Code,
    so for example in my
    tblCollege:
    Code---------Name
    1---------------Science
    2---------------Music
    tblCourse
    Code-------Name-----------CollegeCode
    1-------------Biology----------1
    2-------------Computer-------1
    3-------------Guitar------------2
    what I want in my selectOneChoice is like this:
    value----------display
    1-1--------------Science-Biology
    1-2--------------Science-Computer
    2-3--------------Music-Guitar
    I'm a little stuck on how I'm going to that. Thanks.

    Bawasi,
    I see a couple of angles of attack, but this really depends on the technologies involved. If you are using ADF Bindings in combination with ADF Faces then you need to shape the data at the entity level. If ADF Bindings are no the in equation, you can take a less aggressive approach and shape the data in a managed bean. What is not clear to me is the end-to-end use-case. I see the read-only (i.e. how to get data to the drop box), but I am
    not certain what attribute on an entity you are attempting to set. Are you trying to set the course for the current user or for a master schedule? Finally, notice that the final shape of your data set shows a unique combinations, you could increase the performance of your use-case and ease of development simply by denormalizing your schema.
    --RiC                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

  • 32-bit JVM receiving Java objects from 64-bit JVM

    Hi folks,
    Question is: will there be problems for 32-bit JVM receiving Java objects from 64-bit JVM? and vice versa.
    Our application client is running on 32-bit JVM, our server is running on 64-bit JVM. Client will send Java objects to server, and vice versa.
    My past experience suggested when sending Java objects between client and server, both client and server needs to be compiled under the same JVM version. Any advice?
    Christy

    My past experience suggested when sending Java
    objects between client and server, both client and
    server needs to be compiled under the same JVM
    version. Any advice?This is only a case if you omit explicit serialVersionUID. My advice is to ALWAYS specify it for classes you want to serialize over the wire or put into persistent storage. It is way too tricky to rely on default one to fail half a year later when some new programmer adds one new public method to a class.
    Unless you need to deserialize already existing resources, there is no need to put any magic number in serialVersionUID - just put 1 for every class you create and possibly increase it by 1 every time you want to make incompatible version (which is not happening so often, as in real world you often try to stay as compatible as possible)

  • The sheet I am working on has lost the ability for me to scroll to the first few columns. I can't see the columns but I can cut and paste them so I know they are still there. Has this happened to others

    The sheet I am working on has lost the ability for me to scroll to the first few columns. I can't see the columns A & B but if I cut and paste the table to a new sheet, the columns I am missing will travel to the new sheet.  I have charts and other stuff related the the original table so I need to figure out why I can only see from column C  forward.  I tried to "UNHIDE" the columns but the function doesn't seem to recognise that there are columns missing. Has this happened to others and how did you fix it?

    I've seen it happen before, or at least it sounds something like what I've seen before. The table somehow gets into the margins of the page and the app doesn't know how to deal with it. Go into Print View and try moving the table away from the left side ofthe page. You might have to change content size or resize the table to get it to correct (then put you can put them back the way you like).

  • Bug: generate java objects generates error and does not terminate

    During the build of java object generation...the following error occurs (below),
    the generation progress dialog does not close,
    and the process does not terminate.
    Any suggestions?
    Thank you.
    Albert
    va.lang.NullPointerException
         at oracle.ideimpl.log.TabbedLogManager.getMsgPage(TabbedLogManager.java:101)
         at oracle.toplink.addin.log.POJOGenerationLoggingAdapter.updateTask(POJOGenerationLoggingAdapter.java:42)
         at oracle.toplink.addin.mappingcreation.MappingCreatorImpl.fireTaskUpdated(MappingCreatorImpl.java:1049)
         at oracle.toplink.addin.mappingcreation.MappingCreatorImpl.generateMappedDescriptorsForTables(MappingCreatorImpl.java:231)
         at oracle.toplink.addin.mappingcreation.MappingCreatorImpl.generateMappedDescriptorsForTables(MappingCreatorImpl.java:201)
         at oracle.toplink.addin.wizard.jobgeneration.JobWizard$1.construct(JobWizard.java:401)
         at oracle.ide.util.SwingWorker$1.run(SwingWorker.java:119)
         at java.lang.Thread.run(Thread.java:595)
    ADF configuration: Release 3 (10.1.3)
    ADF Business Components     10.1.3.36.73
    CVS Version     Internal to Oracle JDeveloper 10g (client-only)
    Java™ Platform     1.5.0_05
    Oracle IDE     10.1.3.36.73
    PMD     JDeveloper Extension 1.8
    Struts Modeler Version     10.1.3.36.73
    UML Modelers Version     10.1.3.36.73
    Versioning Support     10.1.3.36.73
    Other Configuration:
    Os Name     Microsoft Windows Xp Home Edition
    Version     5.1.2600 Service Pack 2 Build 2600
    Os Manufacturer     Microsoft Corporation
    Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
    Schema:
    Create Table Example.Questions
    Qid Number Not Null,
    Testid Number,
    Question Varchar2(4000),
    Answer Char(4) Default 'Zzzz' Not Null
    Create Table Example.Testgenhistory
    Testgenhistory_Testid Number Not Null,
    Testid Number Not Null,
    Requestor Varchar2(100),
    Daterequested Date Default Systimestamp
    Create Table Example.Testmaster
    Testid Number Not Null,
    Testname Varchar2(100),
    Ownerrequestor Varchar2(100) Default '[email protected]' Not Null,
    Testdatelastmodified Date
    Create Table Example.Users
    Requestor Varchar2(100) Not Null,
    Adminauthority Number Default 0 Not Null
    Alter Table Example.Questions
    Add Constraint Questions_Pk Primary Key
    Qid
    Enable
    Alter Table Example.Testgenhistory
    Add Constraint Testgenhistory_Pk Primary Key
    Testgenhistory_Testid
    Enable
    Alter Table Example.Testmaster
    Add Constraint Testmaster_Pk Primary Key
    Testid
    Enable
    Alter Table Example.Users
    Add Constraint Users_Pk Primary Key
    Requestor
    Enable
    Alter Table Example.Questions
    Add Constraint Questions_Testmaster_Fk1 Foreign Key
    Testid
    References Myschema.Testmaster
    Testid
    ) Enable
    Alter Table Example.Testgenhistory
    Add Constraint Testgenhistory_Users_Fk1 Foreign Key
    Requestor
    References Myschema.Users
    Requestor
    ) Enable
    Alter Table Example.Testgenhistory
    Add Constraint Testgenhistory_Testmaster_Fk Foreign Key
    Testid
    References Myschema.Testmaster
    Testid
    ) Enable
    Create Index Example.Testmaster_Index1 On Example.Testmaster (Testid);
    Create Sequence Example.Qidseq Increment By 1 Start With 1 Minvalue 1 ;
    Create Sequence Example.Testidseq Increment By 1 Start With 1 Minvalue 1 ;

    Hi Anuj,
    Sorry for the reply delay. I didn't get a notification of reply on the post.
    I am still able to get the error message dialog, along with the failure for the generation to terminate. (reproduced today 4/22/06 and others seem to be seeing it as well).
    I can't identify anything specific in the steps.
    Basically...
    created a new application with ejb, adf, toplink
    choose new project
    choose toplink generate java objects
    choose an existing validated database connection
    select objects (all 4 tables in my little schema)
    click through (...next...next...) to finish
    locks up and dialog appears
    I made a video of the steps, including verifying the database connection. If you want to see it, I'll email it to you.
    here it is today (I've applied all updates available up to today):
    ava.lang.NullPointerException
         at oracle.ideimpl.log.TabbedLogManager.getMsgPage(TabbedLogManager.java:101)
         at oracle.toplink.addin.log      .updateTask(POJOGenerationLoggingAdapter.java:42)
         at oracle.toplink.addin.mappingcreation.MappingCreatorImpl.fireTaskUpdated(MappingCreatorImpl.java:1049)
         at oracle.toplink.addin.mappingcreation.MappingCreatorImpl.generateMappedDescriptorsForTables(MappingCreatorImpl.java:231)
         at oracle.toplink.addin.mappingcreation.MappingCreatorImpl.generateMappedDescriptorsForTables(MappingCreatorImpl.java:201)
         at oracle.toplink.addin.wizard.jobgeneration.JobWizard$1.construct(JobWizard.java:401)
         at oracle.ide.util.SwingWorker$1.run(SwingWorker.java:119)
         at java.lang.Thread.run(Thread.java:595)

  • I have bought a film from itunes and the credit has come out of my account, but i can't find the film anywhere, it said it was downloading, then i left the laptop and on return i couldn't find the film. how do i find the film?

    i have bought a film from itunes and the credit has come out of my account, but i can't find the film anywhere, it said it was downloading, then i left the laptop and on return i couldn't find the film. how do i find the film?

    Maybe it is in the Purchased category of iTunes,
    Try going there

  • Link between Delivery schedule line counter from PO and the material docume

    Dear Gurus,
    I have one PO with single line item having delivery schedule -
    Material 1 -
    delivery schedule 01.01.2009     2000
                                                         01.03.2009    5000
    I have received quantity against this Po
    I want to know where I can find the link between Delivery schedule line counter from PO and the material document
    Best regards
    Sar

    There is no link from the MAterial document line item (Table Mseg) to the PO Schedule Line (EKET).
    If this is for Evaluating an on time delivery or GR, you may consider the following approach.
    PO details Po Date  QTY
    Sch1   01Jun2009   200   
    SCH2  08Jun2009   100
    GR Details
    GR1   01Jun2009   180
    GR2   07Jun2009   110
    GR3  09Jun2009      10
    Calculate a *** total qty for the PO Line.
    PO details Po Date  CUMUL QTY
    Sch1   01Jun2009   200   
    SCH2  08Jun2009   300
    Calculate a *** total qty for the ontime GR.
    PO details Po Date  CUMUL PO QTY  CUMUL GR on time
    Sch1   01Jun2009   200                180
    SCH2  08Jun2009   300                 290 (180+110)  the 3rd GR was too late
    Evaluate the PO SChedule Lines as follows:
    Po SCL qty + CUMUL GR QTY - CUMUL PO QTY = ADJ GR ON Time Qty
    SCH1 01Jun2009
    200 + 180 - 200 = 180 on time for 01Jun2009 date ( 90% fill rate)
    SCH2 08Jun2009
    100 + 290 - 300 = 90 on time for 08Jun2009 date (90 % fill rate) the first 20 of the GR on 07Jun2009 went to fill the late, early date.
    Best of luck !
    SCH2 100 +290 - 300 = 90 on time for 07Jun2009 date

  • HT204053 i have two apple id one for Store purchases and the other for iCloud, and i want to merge them into one, can i transfer all app from one to other ?

    i have two apple id one for Store purchases and the other for iCloud, and i want to merge them into one, can i transfer all app from one to other ?

    It is not possible to merge Apple IDs.

Maybe you are looking for

  • Trap error within loop and process next record

    Hi, I am processing each record inside a loop. Now if any exception occurs processing with a single record within loop I want to continue with the next record with proper error message in the log. How to achieve the above scenario? Shall I create a s

  • Thunderbolt issue vga dvi

    On the new mac mini with Thunderbolt, problems with monitors like macbook. Thunderbolt - Minidisplay to VGA - screen not activate, diferent screens. HDMI > DVI - Eizo screen S2202W, switch from vga to dvi, screen 3 sec snow before right image. VGA an

  • Status processing within Batch job.

    Hello SAP-Guru's, I have question, we have to set the field MSTAE status in Mara. We have a written a programm and when we excute this programm online...it works. But the same programm when we run in batch programm (SM37) we are not able to process t

  • Voices and Random Icon Selection

    Longtime listener, Fisrt time caller, I dunno what happened. It was like the computers speech option was turned on, but i was able to check system prefs and it was off. A black box would appear around cetain icons window buttons. for example: In syst

  • Viewing bursts in Photos

    The Photos app on my iPhone 5s is showing an album called Bursts. It includes 1 burst of 3 photos. When I tap it, I only see 1 photo. How can I see the other two?