Calling Java from Delphi via JNI

Hi all. I've got a J2EE application, and I'm trying to write a Delphi client for the server. More specifics:
Server and test client running in Win2000 SP4.
Server running in JBoss (JUnit test cases have successfully connected to the server)
JDK 1.4
I'm using some Delphi files from JEDI which allow me to load/access a JVM via JNI. So far, I've been able to:
1) Create a Properties object.
2) Populate the Properties object with String values (making sure to use NewStringUTF to pass into the Properties method
3) Find my java client classes which facilitate opening a connection.
However, when I attempt to call the method on the object which actually creates the connection, I get an Exception.
My immediate question is how do I see what the Exception is? I have an Exception object, but ExceptionDescribe doesn't product anything, and I'm having trouble finding any details about the Exception (what type of exception, what the Message or Call Stack is). At the moment, something's wrong but I can't see what. And I'll have no chance of fixing it if I don't know what the problem is.
Thanks for any help,
Ed

I use some code for solving this task (in real project with Delphi 6.0 & Java 1.4.1).
May be, it will help.
procedure TJavaInterp.CheckJNIException(Message : string);
begin
if JNI_ExceptionCheck(JNIEnv) = JNI_TRUE then
begin
JNI_ExceptionDescribe(JNIEnv);
JNI_ExceptionClear(JNIEnv);
raise Exception.Create(Message);
end;
end;{ TJavaInterp.CheckJNIException }
procedure TJavaInterp.HandleException(excpt : jthrowable);
var
Msg: string;
ESyntax : Exception;
CauseName : WideString;
Tag : OleVariant;
begin
if JNI_IsInstanceOf(JNIEnv, excpt, FclsCommonSyntaxError) = JNI_TRUE then
begin
ESyntax := Self.BuildSyntaxException(excpt);
JNI_DeleteLocalRef(JNIEnv, excpt);
raise ESyntax;
end;
Msg := Self.GetMessage(excpt);
if JNI_IsInstanceOf(JNIEnv, excpt, FclsNPScriptRuntimeException) = JNI_TRUE then
begin
CauseName := Self.GetCauseName(excpt);
Tag := Self.GetTag(excpt);
JNI_DeleteLocalRef(JNIEnv, excpt);
raise NPScriptHelper.BuildNPScriptRuntimeException(Msg, CauseName, Tag);
end;
if JNI_IsInstanceOf(JNIEnv, excpt, FclsHaltException) = JNI_TRUE then
begin
JNI_DeleteLocalRef(JNIEnv, excpt);
raise Exception.Create(Msg);
end;
Msg := Self.ToString(excpt);
JNI_DeleteLocalRef(JNIEnv, excpt);
raise Exception.Create(Msg);
end;{ TJavaInterp.HandleException }

Similar Messages

  • Calling Java from Delphi

    Can ActiveX bridge used for calling Java from Delphi?

    Also trying to solve this problem, after creating the bean i packaged/registered it successfully, (tested the bean using beanbox, works perfectly) then tried calling it via createoleobject in delphi 7
    (*Code Snip *)
    Var
    v : variant;
    begin
    try
    v := createoleobject(Edit1.text); // my class name ie WorldPort.Bean (also tried WorldPort.Bean.1
    except on e:exception do
    showmessage(e.Message)
    end;
    end;
    (*Code Snip*)
    After this simple code failed i started backtracking , eventually after getting "Access Violation...etc in axbridge.dll" all the time. tried delphi "import activex control" got the same access violation.
    Decided to test the example from http://java.sun.com/j2se/1.4.2/docs/guide/beans/axbridge/developerguide/examples.html........ they both crashed on execution (calc.exe and boundprop.exe).
    After this failed I tested these example classes on another machine, both crashed again.....
    Also tried this experiment in VC++ , after adding the class to the Toolbox , i try to drop it onto a form, once again access violation.**PS**
    ('You will need VC++ and the Microsoft SDK to build the dll, download c++beta for free from microsoft site it you need it')** and a simple cmd file todo the job would look something like this:
    echo - ** Build Java ActiveX Bridge **
    echo Make sure these folders exist in jre--> axbridge\lib and axbridge\bin
    cd\SDK\jre\axbridge\bin
    set path=%path%;C:\MSDN\Bin;C:\VisualC++\lib
    echo path
    javac WorldPort.java
    jar cmf Manifest.txt WorldPort.jar WorldPort.class
    "C:\SDK\bin\packager.exe" -clsid {162193C4-AD5C-4A06-9F88-A737AE9B43AD} -out "C:\SDK\jre\axbridge\bin" WorldPort.jar WorldPort-reg
    *** After running this cmd you will find the dll in bin folder and the jar in lib folder..***
    Must Read:http://java.sun.com/j2se/1.4.2/docs/guide/beans/axbridge/developerguide/index.html
    Hope some of this helps , if you have successfully created / installed/ used a "JavaActiveX" in Delphi , i would really like to try replicate it on my machine..

  • Problem calling java from vb via activex bridge

    I am trying to call java from vb via ActiveX Bridge and I am running into problems. I would appreciate any help.
    I am using Visual Basic 2010 express, and Java JDK 1.6.0_16. I have used the http://download.oracle.com/javase/1.4.2/docs/guide/beans/axbridge/developerguide/index.html page as a guideline. To try to make it work I took the following steps:
    1. Wrote a very simple java class (below):
    package xxx;
    import java.io.Serializable;
    public class axb implements Serializable {
    public int get_axb_Handle() {
    int Address = 12345678;
    return Address;
    2. After I compiled, and created the jar file. I built the dll using the following command:
    "C:\Program Files\Java\jdk1.6.0_16\bin\packager" -out "C:\Program Files\Java\jdk1.6.0_16\jre\axbridge\bin" E:\axb\dist\axb.jar xxx.axb
    3. I then registered using: regsvr32 axb.dll
    4. In Visual Basic Express IDE I use Project -> Add Reference to add Iterop.axb (dump below), and axb namespace
    5. In my basic code I use the following lines
    Dim axb1 As axb.axb
    axb1 = New axb.axb <== Crash here with AccessViolationException ( full exception below)
    What am I missing? Any help would be greatly appreciated
    Thanks
    Iterop.axb partial dump
    ___[MOD] C:\Documents and Settings\Elie A. Cohen.USINC022\My Documents\Visual Studio 2010\Projects\Repo API Example\Repo API Example\obj\x86\Release\Interop.axb.dll
    | M A N I F E S T
    |___[NSP] axb
    | |___[INT] axb.axb
    | | | .class interface public abstract auto ansi import /*02000006*/
    | | | implements axb.axbDispatch/*02000003*/
    | | | implements axb.axbSource_Event/*02000005*/
    | | | .custom /*0C000018:0A000001*/ instance void [mscorlib/*23000001*/]System.Runtime.InteropServices.GuidAttribute/*01000002*/::.ctor(string) /* 0A000001 */ = ( 01 00 24 34 45 36 44 30 44 41 38 2D 36 41 45 44 // ..$4E6D0DA8-6AED ...
    | | | .custom /*0C000019:0A000007*/ instance void [mscorlib/*23000001*/]System.Runtime.InteropServices.CoClassAttribute/*01000009*/::.ctor(class [mscorlib/*23000001*/]System.Type/*01000007*/) /* 0A000007 */ = ( 01 00 0C 61 78 62 2E 61 78 62 43 6C 61 73 73 00 // ...axb.axbClass. ...
    | |
    | |___[CLS] axb.axbClass
    | | | .class public auto ansi import /*02000004*/
    | | | implements axb.axbDispatch/*02000003*/
    | | | implements axb.axb/*02000006*/
    | | | implements axb.axbSource_Event/*02000005*/
    | | | .custom /*0C00000F:0A000008*/ instance void [mscorlib/*23000001*/]System.Runtime.InteropServices.ClassInterfaceAttribute/*0100000A*/::.ctor(int16) /* 0A000008 */ = ( 01 00 00 00 00 00 ) ...
    | | | .custom /*0C000010:0A000009*/ instance void [mscorlib/*23000001*/]System.Runtime.InteropServices.ComSourceInterfacesAttribute/*0100000B*/::.ctor(string) /* 0A000009 */ = ( 01 00 0F 61 78 62 2E 61 78 62 53 6F 75 72 63 65 // ...axb.axbSource ...
    | | | .custom /*0C000011:0A000001*/ instance void [mscorlib/*23000001*/]System.Runtime.InteropServices.GuidAttribute/*01000002*/::.ctor(string) /* 0A000001 */ = ( 01 00 24 43 44 42 46 36 42 33 33 2D 45 32 33 46 // ..$CDBF6B33-E23F ...
    | | | .custom /*0C000012:0A000002*/ instance void [mscorlib/*23000001*/]System.Runtime.InteropServices.TypeLibTypeAttribute/*01000003*/::.ctor(int16) /* 0A000002 */ = ( 01 00 02 00 00 00 ) ...
    | | |___[MET] method .ctor : void()
    | | |___[MET] method equals : bool(object)
    | | |___[MET] method getClass : object()
    | | |___[MET] method get_axb_Handle : int32()
    | | |___[MET] method hashCode : int32()
    | | |___[MET] method notify : void()
    | | |___[MET] method notifyAll : void()
    | | |___[MET] method toString : string()
    | | |___[MET] method wait : object(object,object)
    AccessViolationException exception
    System.AccessViolationException was unhandled
    Message=Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
    Source=mscorlib
    StackTrace:
    at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
    at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
    at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
    at System.Activator.CreateInstance(Type type, Boolean nonPublic)
    at System.Activator.CreateInstance(Type type)
    at WindowsApplication1.Form1.getPatientHandle_Click(Object sender, EventArgs e) in C:\Documents and Settings\Elie A. Cohen.USINC022\my documents\visual studio 2010\Projects\Repo API Example\Repo API Example\Repo API Example.vb:line 13
    at System.Windows.Forms.Control.OnClick(EventArgs e)
    at System.Windows.Forms.Button.OnClick(EventArgs e)
    at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    at System.Windows.Forms.Control.WndProc(Message& m)
    at System.Windows.Forms.ButtonBase.WndProc(Message& m)
    at System.Windows.Forms.Button.WndProc(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    at System.Windows.Forms.Application.Run(ApplicationContext context)
    at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    at WindowsApplication1.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81
    at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
    at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    at System.Threading.ThreadHelper.ThreadStart()
    InnerException:

    In case you haven't figured it out already... Or if anyone else is curious... Or for myself when I get old and forgetful...
    h2. Object Creation
    For starters, when you create an ActiveX object from within VB, use:
    Set myObject = CreateObject("JavaObject.Bean")When I refer to JavaObject.Bean, I'm meaning the full object name + ".Bean". So, in your case, you should use:
    Set myObject = CreateObject("xxx.axb.Bean")h2. Location
    The .dll file must be located in the JRE that is used at the time of calling. Meaning, the .dll file must be placed under <jre_home>\axbridge\bin and registered there.
    In your case:
    DLL:
    C:\Program Files\Java\jre6\axbridge\bin
    Jar:
    C:\Program Files\Java\jre6\axbridge\libh4. A Note:
    The only supported JRE is a 32bit version as far as I know with regards to the ActiveX bridge. Just like the packager.exe can only be found in the 32bit JDK.
    h2. Methods
    h3. Object Types
    ActiveX Bridge does not support passing literals or arrays. However, it does support passing java's primitive data types as Objects.
    Simply meaning:
    h4. Invalid:
    public int get_axb_Handle() {
         int Address = 12345678;
         return Address;
    }h4. Valid:
    public Integer get_axb_Handle() {
         int Address = 12345678;
         return Address;
    }On a normal circumstance, there's little difference between the two methods. However, in the second example, the JVM does a typecast from a literal data type to a object data type, resulting in a valid object to pass through to Visual Basic. Now, obviously there are multiple ways to do a proper change, new Integer(int) for example. It doesn't matter to me. At the end of the day, you have to pass an object.
    As a side note, the same idea applies when receiving data from Visual Basic.
    h4. Invalid:
    public void set_axb_Handle(int newHandle) {
         int Address = newHandle;
    }h4. Valid:
    public void set_axb_Handle(Integer newHandle) {
         int Address =newHandle;

  • Canot call Weblogic Bean from Delphi via JNI

    I tried to call a bean within the weblogiv server 7 from Delphi.
    I use a JNI Wrapper which allows me easily to acces normal java objects.
    I can call the bean from a java application.
    When i try to call the bean via jni, the following error occurs:
    weblogic.utils.AssertionError: ***** ASSERTION FAILED *****
    [ Assertion violated] at weblogic.utils.Debug.assertion(Debug.java:74)
    at weblogic.j2ee.ApplicationManager.loadClass(ApplicationManager.java:258)
    at weblogic.j2ee.ApplicationManager.loadClass(ApplicationManager.java:233)
    at weblogic.rmi.internal.ClientRuntimeDescriptor.computeInterfaces(ClientRuntimeDescriptor.java:224)
    at weblogic.rmi.internal.ClientRuntimeDescriptor.intern(ClientRuntimeDescriptor.java:123)
    at weblogic.jndi.WLInitialContextFactoryDelegate.<clinit>(WLInitialContextFactoryDelegate.java:165)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at weblogic.jndi.WLInitialContextFactory.getInitialContext(WLInitialContextFactory.java:145)
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:671)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:242)
    at javax.naming.InitialContext.init(InitialContext.java:218)
    at javax.naming.InitialContext.<init>(InitialContext.java:194)
    at ejbtest3.ejbtest3sbTestClient1.getInitialContext(ejbtest3sbTestClient1.java:104)
    at ejbtest3.ejbtest3sbTestClient1.init(ejbtest3sbTestClient1.java:32)
    at ejbtest3.ejbtest3sbTestClient1.testmain(ejbtest3sbTestClient1.java:277)
    It seems that i canno create a context object, but i do not know why ...
    So i would be glad if anyone could help me here ...
    Regards Robert

    I would try this with the newest service pack since it seems this assertion does
    not exist in later code lines. It appears to be related to a class loader
    issue. Do you know what version of the Java VM Delphi uses?
    Sam
    robert wrote:
    I tried to call a bean within the weblogiv server 7 from Delphi.
    I use a JNI Wrapper which allows me easily to acces normal java objects.
    I can call the bean from a java application.
    When i try to call the bean via jni, the following error occurs:
    weblogic.utils.AssertionError: ***** ASSERTION FAILED *****
    [ Assertion violated] at weblogic.utils.Debug.assertion(Debug.java:74)
    at weblogic.j2ee.ApplicationManager.loadClass(ApplicationManager.java:258)
    at weblogic.j2ee.ApplicationManager.loadClass(ApplicationManager.java:233)
    at weblogic.rmi.internal.ClientRuntimeDescriptor.computeInterfaces(ClientRuntimeDescriptor.java:224)
    at weblogic.rmi.internal.ClientRuntimeDescriptor.intern(ClientRuntimeDescriptor.java:123)
    at weblogic.jndi.WLInitialContextFactoryDelegate.<clinit>(WLInitialContextFactoryDelegate.java:165)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at weblogic.jndi.WLInitialContextFactory.getInitialContext(WLInitialContextFactory.java:145)
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:671)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:242)
    at javax.naming.InitialContext.init(InitialContext.java:218)
    at javax.naming.InitialContext.<init>(InitialContext.java:194)
    at ejbtest3.ejbtest3sbTestClient1.getInitialContext(ejbtest3sbTestClient1.java:104)
    at ejbtest3.ejbtest3sbTestClient1.init(ejbtest3sbTestClient1.java:32)
    at ejbtest3.ejbtest3sbTestClient1.testmain(ejbtest3sbTestClient1.java:277)
    It seems that i canno create a context object, but i do not know why ...
    So i would be glad if anyone could help me here ...
    Regards Robert

  • Calling Java from C++  using JNI

    I have been looking into JNI, and I ran sample where the Java calls Native c/c++ methods. Now to do it the other way, having C/C++ to call Java method by passing argument and getting the results back, I think I need to follow the example in Chapter 5 sun, which is creating JVM in the native code, accessing the Java class and method, and then finally calling the Java method.
    First I like to know if I'm right above, and second if I need to pass a C++ class as the argument to the Java method and then the result from the method is Java class, what would be the best way to do? I know I need some to convert the class type some how.
    Thanks,
    Eli

    Are you also wanting to launch Java from C++? Unzip JAVA_HOME/src.zip and look at the source code for java.exe
    If you have native called by a Java object then you can call any non native method in the Java object from the C/C++ side. Example Java method, reportCurrentStagePosition :
        public void reportCurrentStagePosition (int fault, double x, double y, double z, double &#966;)
            if (fault == 0)
                reportCurrentStagePosition (x, y, z, &#966;);
            else
                faultMessage = "Stage Positioning Fault: X="+eFormat(x)+", Y="+eFormat(y)+", Z="+eFormat(z)+", phi="+eFormat(&#966;);
                System.out.println ("***Aero Fault Message: "+faultMessage);
        public native long moveLinearXYZPhiAxes() throws PositionException;Then from the native side of moveLinearXYZPhiAxes the obj is the calling object and has the reportCurrentStagePosition method
    JNIEXPORT jlong JNICALL Java_com_hypernex_goniometer_AerotechWrapperN_moveLinearXYZPhiAxes (JNIEnv *env, jobject obj)
         jmethodID jReportPositions = env->GetMethodID(env->GetObjectClass(obj), "reportCurrentStagePosition", "(IDDDD)V");
         if (jReportPositions == NULL)
              printf ("***ERROR*** about to call jReportPositions but it is NULL ***\n");
         else
             env->CallVoidMethod (obj, jReportPositions, 0, xFeedBack, yFeedBack, zFeedBack, phiFeedBack);
    }Since reportCurrentStagePosition returns a void you use the CallVoidMethod of env. The "(IDDDD)V" is the signature of the method. If it is there GetMethodID returns a non null.

  • Calling Java from C++ thru JNI

    Hi,
    Can anybody help me on this...
    I am trying to invoke a simple java method from c++.
    I am using the reference example as in tutorial at
    http://www-105.ibm.com/developerworks/education.nsf/java-onlinecourse-bytitle/52FFDF7067EAA64986256B87006A5D37?OpenDocument
    My C++ program compiles without any errors, but when i try to create an EXE, I get the foll. error::
    error LNK2001: unresolved external symbol __imp__JNI_CreateJavaVM@12
    I am using JDK1.3, and also making use of jvm.dll, jvm.lib and jni.h files shipped with the JDK installer. Can anybody give me a clue on what is the error referring to?
    Thx in advance

    Hi, I have the same problem as you.. I have been tying to proof the example:
    #include <stdio.h>
    #include <jni.h>
    void goTest(JNIEnv *pEnv);
    main(void) {
         JavaVMInitArgs vm_args;
         JavaVMOption options[6];
    jint res;
    JavaVM *vm;
    JNIEnv *pEnv;
         options[0].optionString = "-Djava.compiler=NONE"; /* disable JIT */
         options[1].optionString = "-Djava.class.path=c:\\_jni\\whiskey\\std"; /* user classes */
         //options[2].optionString = "-Djava.library.path=c:\mylibs"; /* set native library path */
         options[2].optionString = "-Xbootclasspath/a:c:\\_jdks\\ibm_1.3_0502\\lib\\tools.jar";
         options[3].optionString = "-Xdebug"; /* print JNI-related messages */
    options[4].optionString = "-Xnoagent";
    options[5].optionString = "-Xrunjdwp:transport=dt_socket,server=y,suspend=n";
         vm_args.version = JNI_VERSION_1_2;
         vm_args.options = options;
         vm_args.nOptions = 6;
         vm_args.ignoreUnrecognized = JNI_FALSE;
         /* Note that in JDK 1.2, there is no longer any need to call
         * JNI_GetDefaultJavaVMInitArgs.
    res = JNI_CreateJavaVM(&vm, (void **)&pEnv, &vm_args);
    if (res < 0) {
    printf("failure in create java vm\n");
    int loop=0;
    while (loop==0) {
    printf("waiting...");
    goTest(pEnv);
    void goTest(JNIEnv *pEnv) {
    jclass javaClass;
    jmethodID mid;
    jint result;
    javaClass = (*pEnv)->FindClass(pEnv,"JNITest");
    mid = (*pEnv)->GetStaticMethodID(pEnv,javaClass,"java_tripleNumber","(I)I");
    result = (*pEnv)->CallStaticIntMethod(pEnv,javaClass,mid,42) ;
    I have do the following:
    dlltool -k dllname jvm.dll def jvm.def --output-lib d:\jbuilder5\jdk1.3\jre\bin\classic\libjvm.a
    gcc -Id:\jbuilder5\jdk1.3\include -Id:\jbuilder5\jdk1.3\include\win32 -g -c invoke.c
    gcc -o invoke.exe invoke.o -Ld:\jbuilder5\jdk1.3\jre\bin\classic -ljvm
    The executable file is created without problems, but when I run it..
    Can't load "jdwp.dll", because Can't find dependent libraries
    failure in create java vm
    I have debbug it: gdb invoke
    (gdb) b main
    Breakpoint 1 at 0x4013aa: file invoke.c, line 85.
    (gdb) r
    Starting program: D:\MinGW\bin/invoke.exe
    Breakpoint 1, main () at invoke.c:85
    85 options[0].optionString = "-Djava.compiler=NONE"; /* d
    isable JIT */
    (gdb) n
    86 options[1].optionString = "-Djava.class.path=c:\\_jni\\whiskey\\
    std"; /* user classes */
    (gdb) n
    88 options[2].optionString = "-Xbootclasspath/a:c:\\_jdks\\ibm_1.3_
    0502\\lib\\tools.jar";
    (gdb) n
    89 options[3].optionString = "-Xdebug"; /* print
    JNI-related messages */
    (gdb) n
    90 options[4].optionString = "-Xnoagent";
    (gdb) n
    91 options[5].optionString = "-Xrunjdwp:transport=dt_socket,server=y,su
    spend=n";
    (gdb) n
    93 vm_args.version = JNI_VERSION_1_2;
    (gdb) n
    94 vm_args.options = options;
    (gdb) n
    95 vm_args.nOptions = 6;
    (gdb) n
    96 vm_args.ignoreUnrecognized = JNI_FALSE;
    (gdb) n
    101 res = JNI_CreateJavaVM(&vm, (void **)&pEnv, &vm_args);
    (gdb) n
    0x503e41b1 in d_jbuilder5_jdk1_3_jre_bin_classic_libjvm_a_iname ()
    (gdb) n
    Single stepping until exit from function d_jbuilder5_jdk1_3_jre_bin_classic_li
    bjvm_a_iname,
    which has no line number information.
    0x77e8860c in d_jbuilder5_jdk1_3_jre_bin_classic_libjvm_a_iname ()
    (gdb) n
    Single stepping until exit from function d_jbuilder5_jdk1_3_jre_bin_classic_li
    bjvm_a_iname,
    which has no line number information.
    Program received signal SIGSEGV, Segmentation fault.
    0x0040145a in goTest (pEnv=0x0) at invoke.c:124
    124 javaClass = (*pEnv)->FindClass(pEnv,"JNITest");
    (gdb)
    .... How can I solve this problem..

  • Call RFC from DELPHI Windows Services Program

    Hi all,
    Are there any way to call RFC from DELPHI Windows Services Program?
    Best regards.
    Munur EBCIOGLU

    Hi again Bhagat,
    1. Yes, it's included on 7.4 ABAP Stack (SAP NetWeaver 7.4 SP8 - Optimized for SAP HANA, Cloud and Mobile - Service Release 2 available now!). In a recent customer, SAP licences GW by user but there are other license model like session licensing: https://store.sap.com/sap/cp/ui/resources/store/html/SolutionDetails.html?pid=0000009470&catID=&pcntry=US&sap-language=EN&_cp_id=id-1385059687642-0
    2. You could install as an AddOn on your 7.3 system, there are many options depending on your desired infrastructure: SAP Gateway deployment options in a nutshell For example our customer have deployed Central Hub Gateway in a standalone stack ABAP to act as an standalone oData bridge between ABAP/nonAbap systems.
    3. You could deploy SAPUI5 apps in 7.x, Java Web Servers or HTTP Web Servers. You must consider your SSO scenario:
    - SSO Logon Tickets. You will need to configurate SSO Logon Tickets between SAP NW Portal & SAP NW Gateway & your backend (ECC, etc). In order to pass SAP session cookie you will need setup SAP Web Dispacther and access portal & gateway throught SAP WD with the same domain.
    - SAML2 Tickets. This scenario lets you provide portal & gateway on different domains enabling SSO. You could configure SAP NW Portal as an Identity Provider and other systems must trust SAP Portal as IdP.
    Cheers

  • ClassDefNotFound error when calling Java from C++

    Hi all,
    I have a problem with calling my java from C++ through JNI.
    I have set my CLASSPATH environment varible that include path to every libary that I need. My source is as follows:
    #include <jni.h>
    #include <stdio.h>
    int main()     
         JNIEnv               *env;
         JavaVM               *jvm;
         JavaVMInitArgs     vm_args;
         jint               res;
         jclass               cls;
         jmethodID          mid;
    IMPORTANT: specify vm_args version # if you use JDK 1.1.2 and beyond
         vm_args.version = JNI_VERSION_1_4;
         vm_args.ignoreUnrecognized = JNI_TRUE;
         JNI_GetDefaultJavaVMInitArgs(&vm_args);
         /* Create the Java VM */
         res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
         if (res < 0) {
              printf("Can't create JVM\n");
              return 1;
         cls = (env)->FindClass ("dds/test/comm/listeners/NACKListenerFrame");
         if (cls == 0)     {
              printf("Can't find NACKListenerFrame Class\n");
              return 1;
    mid = (env)->GetStaticMethodID(cls, "start", "()V");
         if (mid == 0)     {
              printf("Can't find NackListnerFrame.start \n");
              return 1;
         (env)->CallStaticVoidMethod((_jclass*)cls, (_jmethodID*)mid, NULL);
         jthrowable e = (env)->ExceptionOccurred();
         if (e)     {
              env->ExceptionDescribe();
              env->ExceptionClear();
         if ((jvm)->DestroyJavaVM() < 0)     {
              printf("Cannot destroy JVM./n");     
         return 0;
    I deliberately left out the codebelow because I want the JVM I created to load Classes from the system's CLASSPATH variable as I have set path to every classes that I need, in that CLASSPATH variable.
    JavaVMOption     options[1];
    options[0].optionString=
    "-Djava.class.path=.;E:/DDSproject/DDSImplementation/classes";
    vm_args.options = options;
    vm_args.nOptions = 1;
    But it seems like unless I specify CLASSPATH in my C++ source code the JVM could not find any classes.
    I tried to put the "jvm.dll" path to the first one in the System's PATH variable. It does not work either...
    Gurus Pls help!!!.. I don't know what to do... I don't wanna code my CLASSPATH in my c++ source code as above.
    Thanks in advance,
    chancellor

    I was thinking JVM should the classpath when it is invoked. But obviously it is not and we need to assign the classpath ourselves when invoking from native side. Thanks for pointing that out. For other people's benefit the following is the code piece I for initializing JVM.
    char* str1;
              char* str2;
              char* classpath;
              str1 = "-Djava.class.path=";
              str2 = std::getenv("CLASSPATH");
              classpath = (char*)malloc(strlen(str1) + strlen(str2) + 1);
              strcpy(classpath, str1);
              strcat(classpath, str2);
              if (str2 == NULL)     {
                   printf("CLASSPATH environment variable is not defined.");
                   exit(1);
              m_VmArgs.version = JNI_VERSION_1_4;
              m_options[0].optionString= classpath;
              m_VmArgs.options = m_options;
              m_VmArgs.nOptions = 1;
              m_VmArgs.ignoreUnrecognized = JNI_TRUE;
              JNI_GetDefaultJavaVMInitArgs(&m_VmArgs);
              /* Create the Java VM */
              m_Res = JNI_CreateJavaVM(&m_Jvm, (void**)&m_Env, &m_VmArgs);
              if (m_Res < 0) {
                   printf("Can't create JVM\n");
                   exit(1);
    thanks,
    chancellor

  • Questions abt. calling Java from C

    I have a java class that contains a method I need to make accessable to C functions. It looks something like this:
    public class ExportName
       private SomeObj theObj;
       public ExportName(SomeObj theObj)
          this.theObj = theObj;
       } //end ExportName
       public String getName()
          return theObj.getName();
       public native String getNameJNI();
    }Using javah I have my ExportName.h, and I'm in the process of writing ExportName.c:
    #include <stdio.h>
    #include <jni.h>
    #include "ExportName.h"
    JNIEXPORT jstring JNICALL Java_ExportName_getNameJNI (JNIEnv *, jobject)
       jclass cls = (*env)->GetObjectClass(env, obj);
       jMethodID mid = (*env)->GetMethodID(env, cls, "getName", "()Ljava/lang/String");
       if (mid == 0)
          return;
       } /* end if */
    }I have 2 questions:
    (1)At some point, I need to actually call the java method using
    (*env)->Call<TYPE>Method(env, obj, mid);
    What type should I use here (CallWhatMethod)?
    (2)Also, I need to create genuine C wrappers for these methods. How do I hand off the jstring returned by this JNI C code to the ANSI C method that calls it? I know that there is a conversion along the lines of:
    const char str = (env)->GetStringUTFChars(env, <<JSTRING HERE>>, 0);
    Can I just put the call to the JNI method where the jstring variable name goes?
    Any help would be appreciated. I have already read the Java tutorial on JNI, so please don't respond just to tell me to go there.
    Thanks!

    If that is the case, then your starting point is not javah, but to investigate the invocation API, after which you will call java methods from C.
    Well, the Invocation API is mostly orthogonal to whether you are calling Java from C or vice versa. The Invocation API is mostly about creating/destroying VMs. You can call Java methods from a flat C application or you can call Java methods from C from within Java native methods.
    If you want to call Java from C, you need to use the methods you're using like GetMethodID, CallXXXMethod, etc...
    In your particular example, if you wanted to call ExportName.getName(), you would use CallObjectMethod. You would cast the result to a jstring, and then use GetStringUTFChars, ReleaseStringUTFChars, etc...
    God bless,
    -Toby Reyelts
    For a solution to all your JNI woes, check out Jace - http://jace.reyelts.com/jace

  • Call java from ABAP

    JCo connectivity is used to call RFCs from Java. can i call Java from abap?
    thanks in advance.....
    regards,
    Sundararamaprasad

    Hi Sundar ,
             This link will surely give u an idea about calling java fro ABAP using Jco.
    http://www.thespot4sap.com/Articles/SAP_Netweaver_Java_Connector.asp
    regards,
    aravindh.

  • Call java from sybase trigger

    Is it possible to call java from Sybase trigger ? If so can you please supply example or URL to one ? Alternative solution is to call shell script from sybase trigger (as app is based on Solaris).
    Regards
    Michal

    Thank for your opinion, but what idea is better ?Doing things in the middle tier, where Java lives.
    Ever heard of event-based trading systems?
    pooling a table every 30 sec. ?. I need to implment
    real-time system which process each trade from table
    once it appears there.Sounds like you have it backwards - you're trying to drive Java from the database.
    I think it'd be better to write that event-based system in Java and leave the database just for persistence.
    GigaSpaces and their ilk are being used this way for highly transactional trading systems. Maybe you could see how they're doing it.
    %

  • Calling webservices from ABAP via https/ssl with p12 certificates.

    Hi all,
    I have a problem with calling an external webservice via HTTPS.
    I configured my system as indicate in the blog /people/jens.gleichmann/blog/2008/10/31/calling-webservices-from-abap-via-httpsssl-with-pfx-certificates but when I check the RFC connection the result is: ICM_HTTP_SSL_ERROR.
    I check the ICM monitor and this is the result:
    [Thr 11] Thu May 26 16:02:57 2011                                                                               
    [Thr 11] *** ERROR during SecudeSSL_SessionStart() from SSL_connect()==SSL_ERROR_SSL                                           
    [Thr 11]    session uses PSE file "/usr/sap/SV5/DVEBMGS10/sec/SAPSSLHTTPS1.pse"                                                
    [Thr 11] SecudeSSL_SessionStart: SSL_connect() failed                                                                          
      secude_error 536875072 (0x20001040) = "received a fatal SSLv3 handshake failure alert message from the peer"                 
    [Thr 11] >>            Begin of Secude-SSL Errorstack            >>                                                            
    [Thr 11] WARNING in ssl3_read_bytes: (536875072/0x20001040) received a fatal SSLv3 handshake failure alert message from the peer
    WARNING in ssl3_output_cert_chain: (12354/0x3042) No hierarchy certificate in FCPath                                           
    WARNING in reduce_FCPath_by_Issuer: (12354/0x3042) No hierarchy certificate in FCPath                                          
    [Thr 11] <<            End of Secude-SSL Errorstack                                                                            
    [Thr 11]   SSL_get_state() returned 0x000021d0 "SSLv3 read finished A"                                                         
    [Thr 11]   Server's List of trusted CA DNames (from cert-request message):                                                     
    [Thr 11]     #1  " certificate 1
    [Thr 11]     #2  " certificate 2
    [Thr 11]   SSL NI-sock: local=ip  peer=ip2                                                       
    [Thr 11] <<- ERROR: SapSSLSessionStart(sssl_hdl=6000000000652010)==SSSLERR_SSL_CONNECT                                         
    [Thr 11] *** ERROR => IcmConnInitClientSSL: SapSSLSessionStart failed (-57): SSSLERR_SSL_CONNECT [icxxconn_mt.c 2012]
    SAP_ABA     700     0012     SAPKA70012     Componenti validi per tutte le applicazioni
    SAP_BASIS     700     0012     SAPKB70012     Componenti di base SAP
    PI_BASIS     2005_1_700     0012     SAPKIPYJ7C     PI_BASIS 2005_1_700
    ST-PI     2008_1_700     0001     SAPKITLRD1     SAP Solution Tools Plug-In
    SAP_BW     700     0013     SAPKW70013     SAP NetWeaver BI 7.0
    SAP_AP     700     0010     SAPKNA7010     Piatt. d'applicazione SAP
    CCM     200_700     0010     SAPK-27010INCCM     CCM 200_700 : Add-On Supplement
    SRM_PLUS     550     0010     SAPKIBK010     SRM_PLUS per mySAP SRM
    SRM_SERVER     550     0010     SAPKIBKT10     SRM_SERVER
    BI_CONT     703     0001     SAPKIBIIP1     Contenuto Business Intelligence
    ST-A/PI     01L_BCO700     0000          -     Servicetools for other App./Netweaver 04
    What do you think about it?
    Best regards,
    Norberto.

    Don´t forget to set your proxy settings! Be sure that the application server could establish a connection to the external server.
    From the BLog.
    Thr 11 WARNING in ssl3_read_bytes: (536875072/0x20001040) received a fatal SSLv3 handshake failure alert message from the peer
    From the Error.
    Have you looked into the above details?
    Thanks
    SM

  • Advantages and Disadvantages of calling java from PL/SQL

    Hi,
    I have one doubt. What are all the advantages and disadvantages of the calling java from PL/SQL?
    In actual scenario the java program will be in the Application server side. It will do the operation and it will store the result in Data base. But in this case (calling java from PL/SQL), we are loading the java program in the Data base and it is doing the operations.
    I have seen many posts are coming regarding loading jar files into the database. Actually the jar will deploy in to Application server. Is there any difference instead of keeping in the Application server side?
    Then I have read,
    advantages:
    -> java having lot API's. so PL/SQL can use that API's.
    -> if we can not do anything in PL/SQL. we can do it using this mtd(calling java from PL/SQL).
    My questions:
    -> could you explain what are all the things we can not do but we can do using "calling java from PL/SQL" method?
    -> is there any other advantages?
    Disadvantages:
    -> the performance is very slow in calling java from PL/SQL.
    My questions:
    -> Then why others are loading java files and jar files into database?
    -> is there any other disadvantages?
    Could you explain about this one? It will be more helpful to others also…
    Regards,
    kk

    Hi,
    You can read the free first chapter of my book @ http://www.amazon.com/gp/product/1555583296/ (see details then Excerpt)
    Kuassi http://db360.blogspot.com

  • ResourceBundle throws MissingResourceException when calling Java from C

    All,
    Our code calls Java from C application.
    The C code create JVM using JNI_CreateJavaVM. Due to internal design issues we don't
    create the JVM with a "-classpath" option.
    After creating the JVM, we create a ClassLoader (URLClassLoader), with a URL list as it's classpath.
    The last step in the C code is to load a Java class using the C reference to URLClassLoader.loadClass
    (I will refer to this class as classA), and than call one of it's static methods.
    Please notice that classA is not instantiated, we call a static method.
    At this point we are moving to the Java code...
    In the Java static method we call ResourceBundle.getBundle("resources.messages"),
    the result is ResourceBundle throws MissingResourceException.
    - The JAR hosting "resources/messeges.properties" (refer as jarA) is include in the
    ClassLoader URL paths we used for loading the Java class.
    - Using a debugger we can see that ClassLoader.getSystemClassLoader() don't contain
    jarA in it's URL list.
    - Using the debugger we see that classA.class.getClassLoader() does contain
    jarA in it's URL list.
    After some investigation we see that ResourceBundle.getBundle calles to ResourceBundle.getLoader:
    private static ClassLoader getLoader() {
            Class[] stack = getClassContext();
            /* Magic number 2 identifies our caller's caller */
            Class c = stack[2];
            ClassLoader cl = (c == null) ? null : c.getClassLoader();
            if (cl == null) {
                cl = ClassLoader.getSystemClassLoader();
            return cl;
        } getClassContext() - native method, this can explain the why the above work fine for Windows.
    I suspect the problem raised in the above code. Since I couldn't get a debug
    version of rt.jar for Solaris, I need some help.
    Our environment is Solaris 8, Java 1.5.
    Please note that the same code works fine on WindowsXP with the same Java version!
    Thanks,
    Avi

    I was thinking JVM should the classpath when it is invoked. But obviously it is not and we need to assign the classpath ourselves when invoking from native side. Thanks for pointing that out. For other people's benefit the following is the code piece I for initializing JVM.
    char* str1;
              char* str2;
              char* classpath;
              str1 = "-Djava.class.path=";
              str2 = std::getenv("CLASSPATH");
              classpath = (char*)malloc(strlen(str1) + strlen(str2) + 1);
              strcpy(classpath, str1);
              strcat(classpath, str2);
              if (str2 == NULL)     {
                   printf("CLASSPATH environment variable is not defined.");
                   exit(1);
              m_VmArgs.version = JNI_VERSION_1_4;
              m_options[0].optionString= classpath;
              m_VmArgs.options = m_options;
              m_VmArgs.nOptions = 1;
              m_VmArgs.ignoreUnrecognized = JNI_TRUE;
              JNI_GetDefaultJavaVMInitArgs(&m_VmArgs);
              /* Create the Java VM */
              m_Res = JNI_CreateJavaVM(&m_Jvm, (void**)&m_Env, &m_VmArgs);
              if (m_Res < 0) {
                   printf("Can't create JVM\n");
                   exit(1);
    thanks,
    chancellor

  • How to call back to C via JNI in Java started from C?

    Hi!
    This problem might seem outlandish, but I have not been able to find any other method to reach my goal. The situation is the following.
    There is a C++ program I intend to interface with a piece of Java code, called the manager. The C++ code invokes a VM, starts a Java glue code, that connects to the manager via RMI. This works fine. The glue code, however, can be called from the manager, via RMI as well. The problem is, that these calls should in turn call functions in the C++ code, that originally started the Java glue code. JNI can only load a library, but this is not what I want to do now. I want to somehow connect back to the C code that started the Java code. Is this possible at all?
    Thanks for your help,
    Ambrus

    What you want to do is not too tough, but there will be some details to be worked through. In particular, you have to figure out how to make your "callback" get from your "glue" code back into your C++.
    1. Calling back out is from java to C is pretty easy. There is a JNI function for registering a native method with the JVM. Here is an example of the registration code:
    // See if the service interface class is known.
    javaClass = javaEnv->FindClass("JavaInterfaceObject");
    if (javaClass != 0) {
    //Register a native method to place java server messages in the service log.
    // Define the service logger native method.
    JNINativeMethod methods[] = {
    {"addToMessageLog", "(Ljava/lang/String;)V", Java_addToMessageLog}
    // Register the method with the jvm.
    javaEnv->RegisterNatives(javaClass, methods, 1);
         javaEnv->ExceptionClear();     // Just in case not found.
         return TRUE;
    2. You have to define the native method:
    * Native method - callback to place java server messages in the service log.
    JNIEXPORT void JNICALL Server::Java_addToMessageLog(JNIEnv * javaEnv, jclass javaClass, jstring javaMsg) {
         jboolean     isCopy;
         const char* msg = javaEnv->GetStringUTFChars(javaMsg, &isCopy);
         Server::theServer->logger->addToMessageLog((char*)msg);
         if (isCopy)
              javaEnv->ReleaseStringUTFChars(javaMsg, msg);
    3. The real headache is that this is C code, not C++. In other words, if you really need to call into C++, then you need to seed your callback so that it has a pointer to the appropriate C++ object.

Maybe you are looking for

  • Unable to see AVI files

    With OS X I cannot see AVI files with quick time 7 I had no problems with OS9 and quick time 6 in my old computer Please help MacBook Pro 2 GHz Intel Core Duo memory 1.5 GB

  • SRM 7.0 Central Contract- Distribution to backend failure

    Hello experts, We are implementing SRM 7.0 Central contracts scenario with PI. The Contracts get created and Released but the problem is that the Distribution to backend fails. The Status in BBP_PD shows 'Distribution Incorrect' and the RZ20 gives an

  • I'm trying to update my ipad 2 with ios 5 and the backup is taking forever

    I stopped it at 6 hours last night and the green bar was at about 5 mm. When i do a normal sync the backup took only 5 minutes.  I've managed to upgrade my iphone 4 (although that did take 2 hours).  I'm using windows 7. Any thoughts greatly apprecia

  • Java.security.ProviderException: unable to parse algorithm params.

    java.security.ProviderException: unable to parse algorithm params. Anyone any idea how to get around this problem? Is it something to do with the java.security file?

  • 9iAS Release 2 (some) components don't start

    Component that don't start (Forms, DAS, ...) In oidmon.log is ... 2002/12/06:12:11:34Failed to fetch Process Table. ORA-12571: TNS:packet writer failure 2002/12/06:12:11:34Error connecting database. 12571 2002/12/06:12:11:34Error : Guardian Process t