Bug in java arrays?

Hi, just found this in a toy program and thought it might be a bug in the way java handles arrays... I'm working on Suse 8.0 & jdk 1.4, Red Hat 7.x/8.x with jdk 1.4 and Solaris 4 jdk 1.4:
If you have a method like this:
    public static void resize(int[] arr, int size) {
        int[] tmp = arr;
        int iterate;
        arr = new int[size];  // disassociate tmp from arr
        iterate = size > tmp.length ? tmp.length : size;
        for(int x = 0; x < iterate; x++) {
            arr[x] = tmp[x];
    }and try to call it from another class like this:
        /* could this possibly be a bug in java??? */
        Arrays.resize(state, state.length + 1);  // make array bigger
        state[state.length - 1] = start;  // store current room in arrayI get an ArrayIndexOutOfBoundsException on the call to assign start to the last index of state, which means that the new array knows its new length, but can't assign to it.
The solution to my problem was to return arr in the resize() method and assign the returned value to state.
This seems to go against what its supposed to happen (that the array is rezized and the pointer just updated)
Is this a bug in java or is it te desired behaviour?
dave.

But when I create the 'new' array I'm assigning the
pointer to the place where the previous array pointer
was... This should be completely legal. Yes, it's completely legal, but it doesn't do what you want :)
The variable in method to which you assign a new and longer array is a different one than the pointer you have in another method.
If you just call a function to assign values to an
array like this:> public void update(int[]arr){
arr[0] = 2;
} > and then use some code to look at the array you
passed: > int[]x = {1,2,3,4};
update(x);
system.out.println(x[0]);> you would expect to get 2 in the
output. Whay should this operation be different?Because in this case you wrap the reference you change (slot 0 in the array) into another object (the array). Therefore the reference you actually change is the same as the reference you expect to change.
If you let your resize method return the new and longer array, and assign the returned value to yor old variable, you might get a better result.
(And System.arraycopy may be more efficient than your for loop.)

Similar Messages

  • A bug in Java

    I would like to report a bug in Java.
    It began with the rmi tutorial on computing pi.
    I had no problem with this on a single computer but could never get it to work over the network. I posted messages on this forum and got lots of generous help, especially from Genady, but eventually I left it as an unsolved problem.
    Yesterday I came back to my local network with my current problem and had problems similar to pi. Now at least I have more experience and I could track it down. It looks like a Java bug to me.
    The hardware is: 1 router, behind which sit 2 computers: home-ilan at 192.168.2.100 and home-yona at 192.168.2.103. I have a client-server setup via rmi. If the server is on home-yona, all works OK. If the server is on home-ilan it fails. What could be the difference?
    It turns out that home-ilan (my main computer) also has the possibility to run VPN to the hospital. The VPN uses a given IP. If I need to get to the hospital, I use the VPN. If not, I don't use it.
    Yesterday I put Eclipse on home-yona and looked for the problem. It turns out to be in
    Query q1 = (Query) Naming.lookup(rmi1);I was running the query from home-yona to home-ilan. I got a valid q1 back, and I drilled down into it. One of the elements is
    ep=TCPEndpoint which has a host value.
    The host value should have been 192.168.2.100, but instead it was the value of the VPN. The packet was sent from 192.168.2.100 to 192.168.2.103 and home-yona picked up the packet correctly, but it had the wrong value of the host. When I actually made the query to rmi, it expected the result from the VPN IP, which it never got, so it timed out.
    The bug is that Naming.lookup, even though it got the packet through the LAN, gave VPN address. This would have been fine had I been querying from the hospital, but I was in fact doing a local query. The Naming.lookup doesn't differentiate, which is a bug.
    The bug is 100% reproducible. If I start the server while VPN is running, from home-yona I will always get the VPN IP. If I start the server while VPN is turned off, I will get the correct address.
    Any suggestions?
    Ilan

    If that were the only thing which was wrong, we'd be in great shape. It is then a bug of Cisco Systems who supplied the VPN. I just took the default conditions and used them. I had no idea there was any problem until I ran the RMI protocol.
    In fairness to Cisco Systems, I must say that it is unusal to say that I want a VPN connection into the hospital and at the same time make a connection over my local LAN. In fact it works for everything I happened to try up until now, but it fails for RMI (because of the static assignment).
    The amazing thing is that with all these incompatible programs is not that sometimes it fails, but that it works at all. When I look at the Control Panel, I see 2 LAN connections, my local LAN and the VPN. I suspect I would have a very similar problem if I had 2 physical LAN cards.
    The home-ilan identifies the computer and it doesn't identify the computer-lan combination.
    What the RMI wants is not the computer identification, but rather the lan card identification. At least in the Control Panel, such a thing doesn't exist.

  • Is this a bug in Java!

    int i=0;
    i=i++;
    System.out.println(i);
    What should this code print.
    I guess 1.
    But it prints 0.
    Can anyone explain the logic behind this, or is this a bug in Java.
    Thanks for your time in advance.

    What did the mackerel do to deserve that?it wrote Sun's search function !!!!!! :pPlease, a mackerel would of done a better job.
    All I can say is "JTable project", smiles.
    (Gah, Please kill me)mlk BANG BANG*
    *Post decease operator.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

  • Mapping Java Arrays

    I was given an object model generated by an apache product, Axis. The generated java files use the Java Array in the following fashion:
    Class Zoo {
    private ArrayOfAnimals animals;
    // … public get/set methods cut
    Class ArrayOfAnimals {
    private Animal animals[];
    // … public get/set methods cut
    Class Animal {
    private String name;
    // … public get/set methods cut
    I was tasked with mapping the one-to-many relationship between zoo and an array of animals using the Animal array. I can’t find a mapping in TopLink to do this type of association. I am NOT allowed to modify the generated source code. I may be able to extend the generated classes, and perhaps provide a different superclass.
    I am allowed to create the relational model for these domain classes. Can anyone help with this type of mapping?
    Thanks

    TopLink does not directly support arrays as the mapping type for a collection, only collection types that support the Collection and Map interfaces.
    In general it seems odd to use an array instead of a Java collection which would be much more efficient (in terms of adding and removing) and much more functional. I would definitely suggest changing the generated code, or the way the code is generated if at all possible.
    The easiest way to map the array in TopLink would be the use get/set methods for the 1-m mapping on the Zoo class that converted the array to/from a Collection.
    i.e. something like,
    public List getAnimalsList() {
    return new Arrays.asList(animals.animals);
    public void setAnimalsList(List list) {
    animals.animals = (Animal[]) list.toArray();
    In general TopLink uses its ContainerPolicy class to handle collections. It may also be possible (but advanced) to write a custom container policy for your 1-m mapping that handles arrays.

  • [JNI Beginner] GC of Java arrays returned by the native code

    Hello all,
    I am beginning with JNI, to integrate a C library that pilots an industrial equipment, into a java UI. This library enables to exchange various proprietary PDUs (protocol data units), with the equipment, up and down (request/replies). Both requests and replies are arrays of bytes (+char*+).
    "Request" byte arrays are constructed by Java code, which passes them to the JNI code that glues with the lib. "Reply" byte arrays are returned to the Java code, which analyzes them.
    The "return reply" part is very similar to this [tutorial example|http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jniexamp.html] , which returns bytes read from a file. However there's something I don't understand with regard to garbage collection of the returned byte array:
    - in this stock example, the C code creates a Java byte array fills it, and simply returns it (example code stripped to highlight only the parts relevant to my question):
        jByteArray=(*env)->NewByteArray(env, size);
        (*env)->SetByteArrayRegion(env, jByteArray, 0, size, (jbyte *)sourceBytes);
        return (jByteArray);What will happen to this Java array (jByteArray) with regard to garbage collection?
    - if it's no more referenced (the example Java code just systemouts it and forgets it), will it be eligible to GC?
    - if it is referenced by a Java variable (in my case, I plan to keep a reference to several replies as the business logic requires to analyze several of them together), do regular Java language GC rules apply, and prevent eligibility of the array to GC as long as it's referenced?
    That may sound obvious, but what mixes me up is that the same tutorial describes memory issues in subsequent chapters: spécifically, the section on "passing arrays states that:
    [in the example] the array is returned to the calling Java language method, which in turn, garbage collects the reference to the array when it is no longer usedThis seems to answer "yes" to both my questions above :o) But it goes on:
    The array can be explicitly freed with the following call:
    {code} (*env)-> ReleaseByteArrayElements(env, jByteArray, (jbyte *)sourceBytes, 0);{code}Under what circumstances would one need to explicitly free jByteArray when it's about to be returned to the Java calling method? Or does this sentence apply to completely different situations (such as, when the array is +not+ returned as is to a Java method)?
    The tutorial's next section has a much-expected +memory issues+ paragraph, from which I quote:
    By default, JNI uses local references when creating objects inside a native method. This means when the method returns, the references are eligible to be garbage collected.I assume this means, +unless the references are assigned, in the Java code, to a Java variable+, right?
    If you want an object to persist across native method calls, use a global reference instead. A global reference is created from a local reference by calling NewGlobalReference on the the local reference.I assume this enables the C code to maintain a global reference to a java object even if it's not referenced anymore from the Java variables, right?
    I also checked the [JNI specification|http://download-llnw.oracle.com/javase/6/docs/technotes/guides/jni/spec/design.html#wp1242] , but this didn't clear the doubt completely:
    *Global and Local References*
    The JNI divides object references used by the native code into two categories: local and global references. Local references are valid for the duration of a native method call, and are automatically freed after the native method returns. Global references remain valid until they are explicitly freed.
    Objects are passed to native methods as local references. All Java objects returned by JNI functions are local references. The JNI allows the programmer to create global references from local references. JNI functions that expect Java objects accept both global and local references. A native method may return a local or global reference to the VM as its resultAgain I assume the intent is that Global references are meant for objects that have to survive across native calls, regardless of whether they are referenced by Java code. But what worries me is that combining both sentences end up in +All Java objects returned by JNI functions are local references (...) and are automatically freed after the native method returns.+.
    Could you clarify how to make sure that my Java byte arrays, be they allocated in C code, behave consistently with a Java array allocated in Java code (I'm familiar already with GC of "regular" Java objects)?
    Thanks in advance, and best regards,
    J.

    jduprez wrote:
    Hello all,
    I am beginning with JNI, to integrate a C library that pilots an industrial equipment, into a java UI. This library enables to exchange various proprietary PDUs (protocol data units), with the equipment, up and down (request/replies). Both requests and replies are arrays of bytes (+char*+).
    "Request" byte arrays are constructed by Java code, which passes them to the JNI code that glues with the lib. "Reply" byte arrays are returned to the Java code, which analyzes them.
    The "return reply" part is very similar to this [tutorial example|http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jniexamp.html] , which returns bytes read from a file. However there's something I don't understand with regard to garbage collection of the returned byte array:
    - in this stock example, the C code creates a Java byte array fills it, and simply returns it (example code stripped to highlight only the parts relevant to my question):
        jByteArray=(*env)->NewByteArray(env, size);
    (*env)->SetByteArrayRegion(env, jByteArray, 0, size, (jbyte *)sourceBytes);
    return (jByteArray);What will happen to this Java array (jByteArray) with regard to garbage collection?It will be collected when it is no longer referenced.
    The fact that you created it in jni doesn't change that.
    The array can be explicitly freed with the following call:
    (*env)-> ReleaseByteArrayElements(env, jByteArray, (jbyte *)sourceBytes, 0);Under what circumstances would one need to explicitly free jByteArray when it's about to be returned to the Java calling method? Or does this sentence apply to completely different situations (such as, when the array is not returned as is to a Java method)?
    Per what the tutorial says it is either poorly worded or just wrong.
    An array which has been properly initialized it a just a java object. Thus it can be freed like any other object.
    Per your original question that does not concern you because you return it.
    In terms of why you need to explicitly free local references.
    [http://download-llnw.oracle.com/javase/6/docs/technotes/guides/jni/spec/design.html#wp16785]
    The tutorial's next section has a much-expected memory issues paragraph, from which I quote:
    By default, JNI uses local references when creating objects inside a native method. This means when the method returns, the references are eligible to be garbage collected.I assume this means, unless the references are assigned, in the Java code, to a Java variable, right?As stated it is not precise.
    The created objects are tracked by the VM. When they are eligible to be collected they are.
    If you create a local reference and do NOTHING that creates an active reference elsewhere then when the executing thread returns to the VM then the local references are eligible to be collected.
    >
    If you want an object to persist across native method calls, use a global reference instead. A global reference is created from a local reference by calling NewGlobalReference on the the local reference.That is not precise. The scope is the executing thread. You can pass a local reference to another method without problem.
    I assume this enables the C code to maintain a global reference to a java object even if it's not referenced anymore from the Java variables, right?
    It enables access to it to be insured across multiple threads in terms of execution scope. Normally you should not use them.

  • Conversion of java Array to oracle SQL Array while calling Stored Procedure

    How java Array can be converted to oracle SQL array while calling Stored procedure with callable statement.
    i.e java Array ---> Sql Array in Oracle while setting the datatypes to callable statement arguments.

    Look at:
    http://forum.java.sun.com/thread.jsp?forum=48&thread=376735&tstart=0&trange=15
    Paul

  • How to call a C sort function to sort a Java Array.

    My name is David, I'm interning this summer doing some High Performance Computing work. I'm significantly out of my comfort zone here; I am primarily a network/network security geek, not a programming guy. I took one Java based class called problem solving with programming where we wrote like 3 programs in Java and did everything else in pseudocode and using a program called Alice http://www.alice.org/ to do things graphically. Learned basically no actual programming syntax. Also have done some self-taught perl, but only through one book and I didn't finish it, I only got about half way through it. So my expertise in programming are pretty much null.
    That being said, I currently am tasked with having to figure out how to make JNI work... specifically at this time I am tasked with writing an array in Java, and designing a C program that can be called by means of JNI to sort the array. I have chosen to work with the Merge Sort algorithm. My method of coding is not one where I write the entire thing from scratch, I don't particularly have a need to master languages at this point, rather I just need to make them work. I am interested in learning, but time is of the essence for me right now. So thus far what I have done is take sample codes and tweak them to meet my purpose. However, I currently am unable to make things work. So I am asking for help.
    I am going to paste 3 codes here, the first one will be my basic self-written instructions for JNI (Hello World Instructions), the second one will be my Java Array, and the third one will be my MergeSort function. I am not asking for you to DO my work for me by telling me how to manipulate my code, but rather I am asking for you to send me in the direction of resources that will be of some aid to me. Links, books (preferrably e-books so I don't have to go to a library), anything that you can send my direction that may help will be deeply appreciated. Thanks so much!
    JNI Instructions:
    /*The process for calling a C function in Java is as follows:
    1)Write the Java Program name. Eg. HelloWorld.java
    2)Compile it: javac HelloWorld.java
    3)Create a header file: javah -jni HelloWorld
    4)Create a C program eg. HelloWorld.java
    5)Compile the C program creating a shared library eg. libhello.so (My specifc command is cc -m32 -I/usr/java/jdk1.7.0_05/include -I/usr/java/jdk1.7.0_05/include/linux -shared -o libhello.so -fPIC HelloWorld.c
    6) Copy the library to the java.library.path, or LD_LIBRARY_PATH (in my case I have set it to /usr/local/lib.
    7)Run ldconfig (/sbin/ldconfig)
    8)Run the java program: java HelloWorld. */
    //Writing the code:
    //For the HelloWorld program:
    //In java:
    //You need to name a class:
    class HelloWorld {
    //You then need to declare a native method:
    public native void displayHelloWorld();
    //You now need a static initializer:
    static {
    //Load the library:
    System.loadLibrary("hello");
    /*Main function to call the native method (call the C code)*/
    public static void main(String[] args) {
    new HelloWorld().displayHelloWorld();
    //In C:
    #include <jni.h> //JNI header
    #include "HelloWorld.h" //Header created by the javah -jni command parameter
    #include <stdio.h> //Standard input/output header for C.
    //Now we must use a portion of the code provided by the JNI header.
    JNIEXPORT void JNICALL
    Java_HelloWorld_displayHelloWorld(JNIENV *env, jobject obj)
    //Naming convention: Java_JavaProgramName_displayCProgramName
        printf("Hello World!\n");
        return;
    }Java Array:
    class JavaArray {
         private native int MergeSort(int[] arr);
         public static void main(String[] args)
             int arr[] = {7, 8, 6, 3, 1, 19, 20, 13, 27, 4};
         static
             System.loadLibrary("MergeSort");
    }Hacked and pieced together crappy C Merge Sort code:
    #include <jni.h>
    #include <stdio.h>
    #include "JavaArray.h"
    JNIEXPORT jint JNICALL
    Java_JavaArray_MergeSort(JNIEnv *env, jobject obj, jintArray arr[],jint low,jint mid,jint high)
       jint i,j,k,l,b[10];
    l=low;
    i=low;
    j=mid+1;
    while((l<=mid)&&(j<=high))
        if(arr[l]<=arr[j])
           b=arr[l];
    l++;
    else
    b[i]=arr[j];
    j++;
    i++;
    if(l>mid)
    for(k=j;k<=high;k++)
    b[i]=arr[k];
    i++;
    else
    for(k=l;k<=mid;k++)
    b[i]=arr[k];
    i++;
    for(k=low;k<=high;k++)
    arr[k]=b[k];
    void partition(jint arr[],jint low,jint high)
    jint mid;
    if(low<high)
    mid=(low+high)/2;
    partition(arr,low,mid);
    partition(arr,mid+1,high);
    sort(arr,low,mid,high);

    You're doing OK so far up to here:
    Java_JavaArray_MergeSort(JNIEnv *env, jobject obj, jintArray arr[],jint low,jint mid,jint high)This is not correct. It is not what was generated by javah. It would have generated this:
    Java_JavaArray_MergeSort(JNIEnv *env, jobject obj, jintArray arr,jint low,jint mid,jint high)A 'jintArray' is already an array, embedded in an object. You don't have an array of them.
    So you need to restore that, and the header file, the way 'javah' generated them, then adjust your code to call GetIntArrayElements() to get the elements out of 'arr' into a local int[] array, sort that, and then call ReleaseIntArrayElements() to put them back.

  • Bug in Java

    Hi Guys ,
    i found a bug in java when doing this calculation..
    double a = 1741;
           double b = 81.1;
           double c = 0;
           double temp = (a-b-c);
           System.out.println("temp = "+temp);  //1659.9
           double total = (double)temp/1000;   //BUG HERE
           System.out.println("Res = "+total);  //1.6599000000000002I wonder if u guys get the same value as mine using above calculation.
    if i change the double b = 81.2 i works fine..

    I have good news and bad news for you. To end on a high note we'll leave the good news for last.
    The bad news is that you are the 6,137,215th person to report this "bug" yet Sun will not be fixing it.
    The good news is that the bad news doesn't matter because... <drumroll please/>.....
    It is NOT a bug. The only bug here is your lack of understanding floating point arithmetic. I refer you to the following article http://docs.sun.com/source/806-3568/ncg_goldberg.html

  • A possible *bug* in java jcombobox

    Hi all,
    I think i found a possible bug in java jcombobox .. i am sure some of you must have already experienced it..
    supposedly you put a jcombobox in a jpanel
    returned the panel from a method to a calling method..
    and that method adds it to another panel that it had created to a frame..
    and if this happens dynamicaly at runtime, as only after u click a button..
    meaning : without adding the combobox or the immediate parent panelto the contentpane .. directly..
    Then,
    your combox's keylistener may not catch events fired.
    .. this has happened to me many times.. and always i could only find a way out
    .. by adding the combobox to panel that is loaded during startup itself and is
    .. not returned through a method call.
    Your opinions please ?
    'Harish.

    All components in a UI are created at run-time.
    When you create your JFrame you call pack() to align and resize the UI. This validates all the components, and sets the default focus on what ever component should have the focus at start up.
    When you create components and add them as children of another component you have to validate the child and parent. This can be done by calling JComponent.validate()
    As for keylisteners not getting called, this might be fixed if you call grabFocus on the new combobox. I can't see a reason why any listener would stop working.
    For me to really understand what your talking about. I'd need to see source code reproducing this problem.

  • Manipulating java array object in an oracle procedure

    hi there,
    i have a java store procedure that returns an array of filenames, and i have an oracle stored procedure that will for each filename returned in the java array object, open that file do some processing and load the data into database tables, now my question is, would an oracle 9i varray object be compatible with a java array, or should i pass in a pl/sql table to store the filnames returned?
    i really am stuck at this point and need help !!!!
    Thanx

    Wole,
    Have you searched the code samples available at the Technet Web site? Could you not find a relevant one?
    Have you tried searching the Ask Tom Web site?
    Good Luck,
    Avi.

  • Java arrays contiguous in memory?

    are java arrays always contiguous in memory? or how does java save his arrays?
    i need to know because i wrote an algorithm with a lot of array length changing, and i wonder if it consumes a lot or not, maybe java uses virtual memory arrays like those here :
    http://developers.sun.com/solaris/articles/virtual_memory_arrays.html
    any answer is welcome,
    Nck.

    The internal layout of objects (including arrays) is explicitly undefined by the JVM standard:
    http://java.sun.com/docs/books/vmspec/2nd-edition/html/Overview.doc.html#16066
    So you can't assume that arrays are implemented in any particular way on any given JVM. But the Get<Type>ArrayElements JNI functions can give you a clue about it for the current JVM.
    But I don't really understand the background of the question. What do you mean by "a lot of array length changing"? Java arrays can't be resized, whether from bytecode or JNI.
    -slj-

  • Java Array Out Of Bounds Problem

    In order to conduct an experiment in java array sorting algorithm efficiency, i am attempting to create and populate an empty array of 1000 elements with random, unique integers for sorting. I've been able to generate and populate an array with random integers but the problem is - for whatever size array I create, it only allows the range of numbers to populate it to be the size of the array, for instance, an array of size 3000 allows only the integer range of 0-3000 to populate it with or I get an out of bounds exception during runtime. How can you specify an integer range of say 0-5000 for an array of size < 5000? Any help is appreciated.

    Another approach is to fill the array with an
    arithmetic sequence, maybe plus some random noise:
        array[i] = i * k + rand(k);or some such, so they are unique,
    and then permute the array (put the elements
    s in random order)
        for (i : array.length) {
    transpose(array, array[rand(i..length)]); }
    Along those lines, java.util.Collections.shuffle can be used to randomly shuffle a List (such as an ArrayList).  Create an ArrayList with numbers in whatever range is needed.  Then call java.util.Collections.shuffle(myArrayList). [It is static in Collections--you don't need to [and can't] create a Collections object.]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

  • JAVA Array sizes - how to expand + See nice example code

    Hi, We are returning tables of VARCHAR, NUMBERS, BOOLEANs and
    the like to Java using PL2JAVA and Oracle Sessions. Problem I am
    having is the size of the Array's are undetermined, but it
    appears these must be set before calling package - if package
    returns more rows in tables than the calling Java arrays have,
    then it fails. If we assign too many then I guess we are using
    memory which will be wasted - important when this system could
    have 100 simultaneous users/connections.
    Has anyone got any advice - people may find the sample code below
    useful at worse.
    PACKAGE INTERFACE:
    FUNCTION ssfk_get_metadata.ssfp_get_2metadata RETURNS VARCHAR2
    Argument Name Type In/Out
    Default?
    P_USER_PERSON_ID NUMBER(10) IN
    P_SELF_SERVE_APPLICATION VARCHAR2 IN
    PT_DATA_SOURCE TABLE OF VARCHAR2(60) OUT
    PT_PROMPT TABLE OF VARCHAR2(30) OUT
    PT_DATA_TYPE TABLE OF VARCHAR2(30) OUT
    PT_DATA_LENGTH TABLE OF NUMBER OUT
    PT_DECIMAL_PLACES TABLE OF NUMBER OUT
    PT_MANDATORY_IND TABLE OF VARCHAR2(1) OUT
    PT_UCASE_IND TABLE OF VARCHAR2(1) OUT
    PT_DISPLAY_ONLY_IND TABLE OF VARCHAR2(1) OUT
    PT_WEB_LINK_CD TABLE OF VARCHAR2(10) OUT
    P_TABLE_INDEX BINARY_INTEGER OUT
    P_MESSAGE_NUM NUMBER(5) OUT
    Code example:
    public static String getApplicationMetaData (String
    strPersonID, String strApplication, Session sesSession)
    String strClientString = "";
    if (sesSession==null)
    return "CONNECTION ERROR";
    else
    Double dblUser = new Double(strPersonID);
    //initialising of IN parameters
    PDouble pdbUserPersonId = new PDouble
    (dblUser.intValue());
    PStringBuffer pstSelfServeApplication = new
    PStringBuffer (strApplication);
    //initialising of OUT parameters
    PStringBuffer pstDataSource[] = new PStringBuffer
    [intArraySize];
    PStringBuffer pstPrompt[] = new PStringBuffer
    [intArraySize];
    PStringBuffer pstDataType[] = new PStringBuffer
    [intArraySize];
    PDouble pdbDataLength[] = new PDouble [intArraySize];
    PDouble pdbDecimalPlaces[] = new PDouble
    [intArraySize];
    PStringBuffer pstMandatoryIND[] = new PStringBuffer
    [intArraySize];
    PStringBuffer pstUCaseIND[] = new PStringBuffer
    [intArraySize];
    PStringBuffer pstDisplayOnlyIND[] = new PStringBuffer
    [intArraySize];
    PStringBuffer pstWebLinkCode[] = new PStringBuffer
    [intArraySize];
    PInteger pinTableIndex = new PInteger (0);
    PDouble pdbMessageNum = new PDouble (0);
    //initialising of RETURN parameters
    PStringBuffer pstReturn = new PStringBuffer("N");
    //setting the array items sizes
    for (int i=0; i<pstDataSource.length; i++)
    pstDataSource[i] = new PStringBuffer(60);
    pstPrompt[i] = new PStringBuffer(30);
    pstDataType[i] = new PStringBuffer(30);
    pdbDataLength[i] = new PDouble(-1);
    pdbDecimalPlaces[i] = new PDouble(-1);
    pstMandatoryIND[i] = new PStringBuffer(1);
    pstUCaseIND[i] = new PStringBuffer(1);
    pstDisplayOnlyIND[i] = new PStringBuffer(1);
    pstWebLinkCode[i] = new PStringBuffer(10);
    try
    strClientString = strClientString.concat ("001");
    ssfk_get_metadata ssfAppMetaData = new
    ssfk_get_metadata (sesSession);
    strClientString = strClientString.concat ("002");
    pstReturn = ssfAppMetaData.ssfp_get_2metadata
    (pdbUserPersonId, pstSelfServeApplication, pstDataSource,
    pstPrompt, pstDataType, pdbDataLength, pdbDecimalPlaces,
    pstMandatoryIND, pstUCaseIND, pstDisplayOnlyIND, pstWebLinkCode,
    pinTableIndex, pdbMessageNum);
    strClientString = strClientString.concat ("003");
    if
    (pstReturn.stringValue().equalsIgnoreCase("Y"))
    strClientString = strClientString.concat
    ("WORKED");
    return strClientString;
    else
    return "ERROR";
    catch (Exception e)
    return strClientString + "ERROR:" + e.getMessage
    Thanks for any assistance.
    null

    Play with Java Vectors. They are automatic expanding arrays!
    Just add elements and get them later. One thing that's tricky
    is that Vectors only store and return elements as Objects so you
    have to explicitly recast them.
    -dan
    Richard Leigh (guest) wrote:
    : Hi, We are returning tables of VARCHAR, NUMBERS, BOOLEANs and
    : the like to Java using PL2JAVA and Oracle Sessions. Problem I
    am
    : having is the size of the Array's are undetermined, but it
    : appears these must be set before calling package - if package
    : returns more rows in tables than the calling Java arrays have,
    : then it fails. If we assign too many then I guess we are
    using
    : memory which will be wasted - important when this system could
    : have 100 simultaneous users/connections.
    : Has anyone got any advice - people may find the sample code
    below
    : useful at worse.
    : PACKAGE INTERFACE:
    : FUNCTION ssfk_get_metadata.ssfp_get_2metadata RETURNS VARCHAR2
    : Argument Name Type In/Out
    : Default?
    : P_USER_PERSON_ID NUMBER(10) IN
    : P_SELF_SERVE_APPLICATION VARCHAR2 IN
    : PT_DATA_SOURCE TABLE OF VARCHAR2(60) OUT
    : PT_PROMPT TABLE OF VARCHAR2(30) OUT
    : PT_DATA_TYPE TABLE OF VARCHAR2(30) OUT
    : PT_DATA_LENGTH TABLE OF NUMBER OUT
    : PT_DECIMAL_PLACES TABLE OF NUMBER OUT
    : PT_MANDATORY_IND TABLE OF VARCHAR2(1) OUT
    : PT_UCASE_IND TABLE OF VARCHAR2(1) OUT
    : PT_DISPLAY_ONLY_IND TABLE OF VARCHAR2(1) OUT
    : PT_WEB_LINK_CD TABLE OF VARCHAR2(10) OUT
    : P_TABLE_INDEX BINARY_INTEGER OUT
    : P_MESSAGE_NUM NUMBER(5) OUT
    : Code example:
    : public static String getApplicationMetaData (String
    : strPersonID, String strApplication, Session sesSession)
    : String strClientString = "";
    : if (sesSession==null)
    : return "CONNECTION ERROR";
    : else
    : Double dblUser = new Double(strPersonID);
    : //initialising of IN parameters
    : PDouble pdbUserPersonId = new PDouble
    : (dblUser.intValue());
    : PStringBuffer pstSelfServeApplication = new
    : PStringBuffer (strApplication);
    : //initialising of OUT parameters
    : PStringBuffer pstDataSource[] = new PStringBuffer
    : [intArraySize];
    : PStringBuffer pstPrompt[] = new PStringBuffer
    : [intArraySize];
    : PStringBuffer pstDataType[] = new PStringBuffer
    : [intArraySize];
    : PDouble pdbDataLength[] = new PDouble
    [intArraySize];
    : PDouble pdbDecimalPlaces[] = new PDouble
    : [intArraySize];
    : PStringBuffer pstMandatoryIND[] = new
    PStringBuffer
    : [intArraySize];
    : PStringBuffer pstUCaseIND[] = new PStringBuffer
    : [intArraySize];
    : PStringBuffer pstDisplayOnlyIND[] = new
    PStringBuffer
    : [intArraySize];
    : PStringBuffer pstWebLinkCode[] = new PStringBuffer
    : [intArraySize];
    : PInteger pinTableIndex = new PInteger (0);
    : PDouble pdbMessageNum = new PDouble (0);
    : //initialising of RETURN parameters
    : PStringBuffer pstReturn = new PStringBuffer("N");
    : //setting the array items sizes
    : for (int i=0; i<pstDataSource.length; i++)
    : pstDataSource[i] = new PStringBuffer(60);
    : pstPrompt[i] = new PStringBuffer(30);
    : pstDataType[i] = new PStringBuffer(30);
    : pdbDataLength[i] = new PDouble(-1);
    : pdbDecimalPlaces[i] = new PDouble(-1);
    : pstMandatoryIND[i] = new PStringBuffer(1);
    : pstUCaseIND[i] = new PStringBuffer(1);
    : pstDisplayOnlyIND[i] = new PStringBuffer(1);
    : pstWebLinkCode[i] = new PStringBuffer(10);
    : try
    : strClientString = strClientString.concat
    ("001");
    : ssfk_get_metadata ssfAppMetaData = new
    : ssfk_get_metadata (sesSession);
    : strClientString = strClientString.concat
    ("002");
    : pstReturn = ssfAppMetaData.ssfp_get_2metadata
    : (pdbUserPersonId, pstSelfServeApplication, pstDataSource,
    : pstPrompt, pstDataType, pdbDataLength, pdbDecimalPlaces,
    : pstMandatoryIND, pstUCaseIND, pstDisplayOnlyIND,
    pstWebLinkCode,
    : pinTableIndex, pdbMessageNum);
    : strClientString = strClientString.concat
    ("003");
    : if
    : (pstReturn.stringValue().equalsIgnoreCase("Y"))
    : strClientString = strClientString.concat
    : ("WORKED");
    : return strClientString;
    : else
    : return "ERROR";
    : catch (Exception e)
    : return strClientString + "ERROR:" +
    e.getMessage
    : Thanks for any assistance.
    null

  • Any way to comment or watch a bug for Java???

    Hello!
    AFAIK, at bugs.sun.com it isn't possible to comment on bugs, watch them or vote for them anymore.
    I found out there's now https://bugs.openjdk.java.net but I can't find any way to register.
    So, how the hell I can follow the progress on bugs? Or add additional information if I have?
    It's unbelievable that in 2013 we are still unable to have a decent bug reporting system for the JDK/JRE!!!!!
    Mauro.
    P.S.: I know this might not be the best section for this kind of question, but I couldn't find anything better in these forums...

    Other than physically looking for it, sorry, no.

  • How to declare normal java array in fx

    How can we declare normal java array in fx. lets say I extend an abstract java class and it has a method which takes String array as parameter: abstract public void met(String[] users) ;How can i declare String[] parameter while overriding this abstract method in javafx. This does not work: override public function met(s:String[]){ ... }

    Hi,
    The code below works for me:
    public function run(args:String[]){
         var s:String[] = ["Hi", "Hello", "Love", "Peace"];     
         var t:Test2 = Test2{};     
         t.met(s);
    public abstract class Test{
         public abstract function met(s:String[]):Void;
    class Test2 extends Test{
         public override function met(s:String[]):Void{
              for(x in s){
                   println(x);
    }[]'s

Maybe you are looking for

  • WIll not Display portal30.home

    I just installed Oracle 9i AS and it all seemed to work the I got a message that seemed to point to a problem with init.ora and require me to drop the portal30x users etc and run the config tool again. I did that and now get the following error: Plea

  • Master suite trial install query

    Nice and simple one. I have the trial master suite cs4 on dvd here to check out, can i install it AS WELL as my cs3 packages or am i going to have to uninstall them to try it out. Like many people I have my adobe apps set ups in a particular wy with

  • Help needed regarding Scanner class

    hello i'm really desperate for help, i'll mention that this is homework,but i need a small guidance. i need to code a calculator,we need to use the Scanner class to break the expression to tokens(we CANNOT use other classes). my main problem is about

  • XML file loads imprperly

    I have a small .fla file that uses xml files to bring in the data. It works great. However, if i use a tag such as a <b> bold </> tag, the file shows up as "null" when i preview the swf. Does anyone have any ideas? Is it something to do with the tags

  • How to import Albums from iPhoto 2 to iPhoto 6

    Just got a couple new Duo2Cores to replace/compliment some G4s; the G4's all had the old iPhoto 2 installed. How do I get the Albums to transfer from a G4 iPhoto 2 to iPhoto 6? The individual photos copy over fine, but I'd sure like to preserve all m