Java Proc call

Dear All,
Need your help.
I am posting my sample class below
public static java.sql.ResultSet getData(String dbConnectStr,String dbuserID,String dbpwd,String query) throws Exception
// Obtain default connection
// Query all columns from the EMP table
ResultSet rset = null;
Connection conn = null;
try
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
conn = (OracleConnection)DriverManager.getConnection("jdbc:oracle:thin:@"+dbConnectStr,dbuserID,dbpwd);
((OracleConnection)conn).setCreateStatementAsRefCursor(true);
stat.execute("alter session set NLS_DATE_FORMAT='DD-Mon-RRRR HH:MI:SS'");*/
System.out.println(query);
Statement stmt = conn.createStatement();
rset = stmt.executeQuery(query);
System.out.println("returning");
catch (SQLException e)
e.printStackTrace();
// Return the ResultSet (as a REF CURSOR)
return rset;
################################## My Function in Oracle DB
FUNCTION DB_CALL(dbConnectStr VARCHAR2,dbuserID VARCHAR2,dbpwd VARCHAR2,query VARCHAR2) return axsbcstatement.CUR is language java name 'com.axs.logc.OracleDeployProcedure.getData(java.lang.String,java.lang.String,java.lang.String,java.lang.String) return java.sql.Resultset' ;
########################### My Procedure Where i am calling this function
PROCEDURE INSERT_call (inward_dbConnectStr VARCHAR2,inward_dbuserID VARCHAR2,inward_dbpwd VARCHAR2,query VARCHAR2,updateCnt out number) as
up_cnt number(6) :=0;
db_cur axsbcstatement.inward_cur;
ENTRY_NMBR_field dummy_table.Entry_Nmbr%type;
SNDR_NAME_field dummy_table.Sndr_Name%type;
SNDR_ADDRSS_field dummy_table.Sndr_Addrss%type;
RCVR_NAME_field dummy_table.Rcvr_Name%type;
REMARKS_field dummy_table.Remarks%type;
TRAN_AMNT_field dummy_table.Tran_Amnt%type;
TRAN_DATE_field dummy_table.Tran_Date%type;
BATCH_TRANID_field dummy_table.Batch_Tranid%type;
BATCH_TIME_field dummy_table.Batch_Time%type;
BEGIN
db_cur := INWARD_DB_CALL(inward_dbConnectStr,inward_dbuserID ,inward_dbpwd ,query);
loop
fetch db_cur into ENTRY_NMBR_field,TRAN_ID_field,SNDR_NAME_field,SNDR_ADDRSS_field,RCVR_NAME_field,REMARKS_field,TRAN_DATE_field,BNFCRY_field,BATCH_TRANID_field,BATCH_TIME_field;
EXIT WHEN db_cur%NOTFOUND;
begin
select ENTRY_NMBR INTO ENTRY_NMBR_field from dummy_table where ENTRY_NMBR = entry_nmbr_field and TRAN_ID = TRAN_ID_field;
if SQL%found then
dbms_output.put_line('Data Found in table ');
end if;
Exception
when no_data_found then
insert into dummy_table values(ENTRY_NMBR_field,TRAN_ID_field,SNDR_NAME_field,SNDR_ADDRSS_field,RCVR_NAME_field,REMARKS_field,TRAN_DATE_field,BNFCRY_field,BATCH_TRANID_field,BATCH_TIME_field);
up_cnt := up_cnt+1;
end;
end loop;
close db_cur;
updateCnt := up_cnt;
Exception
when others then
dbms_output.put_line(' - ' || SQLCODE|| ' ' ||SQLERRM);
END INSERT_call;
I am getting "ORA-00932: inconsistent datatypes: expected a return value that is a java.sql.ResultSet got a java.sql.ResultSet that can not be used as a REF CURSOR" this error while executing the procedure...
i have tried so many things but not able to solve this problem..
Apart from this If someone suggest me ...........
I am having two different database.with same table structure .
i have to take data from db1 and insert into the db2 on incremental basis (some checks required while inserting into the db2)
Regards .
Salil

John Spencer wrote:
The begin PROC(); end; version sends 7 more bytes across the wireBut that will likely will have no network impact. The number of packets to send will not change (due to MTU size and the small difference in payload size). And the number of packets on the wire has a far larger performance impact than the sizes of these packets.
The client driver can influence this - by packing x volume of payload in more smaller packets rather than fewer larger packets. In the old days (of 64Kb leased lines) we used to get the network folk to run a sniffer on app traffic when we deployed a new app, or updated an existing app with new functionality. We had to get quite intimate with client drivers and interfaces to determine which provided us with the best network packet footprint... {noformat} ;-) {noformat}

Similar Messages

  • Oracle Java proc ORA-04045: errors during recompilation/revalidation

    hi,
    I have Oracle Java stored proc called MERGE_ENTITY_AND_EVENT invoked by a trigger. It was working fine for a couple of weeks. Today it throws this generic exception. I'm not sure what changed.
    Caused by: java.sql.SQLSyntaxErrorException: ORA-04045: errors during recompilation/revalidation of TLMDEV./3ba8073b_Log4JLogger
    ORA-06512: at "MERGE_ENTITY_AND_EVENT", line 1
    ORA-06512: at "QUOTE_TRIGGER", line 49
    1. What is the root cause of this exception ?
    2. Whats the solution ?
    If you dont know 1 or 2, how would you go about debugging this problem ?
    Thanks in advance.

    The most likely cause is that something has caused the class TLMDEV./3ba8073b_Log4JLogger to become invalid and implicit invalidation does not succeed in making it valid. In general a class must be valid in order to be run and an attempt to run an invalid class (such as because your trigger calls it) will cause an attempt to validate it and if that attempt fails an ORA-04045 can be the result. Validation of a class amounts to iterating over the set of names referenced by the class and looking for a valid class by that name, perhaps recursively attempting to validate if an invalid class by that name is found. So validation of a class may amount to an attempt to validate several classes at once. If any of them fail to be validatable, which occurs if there is no class for a given referenced name then most if not all of the classes in the set being validated and certainly the top level one will fail to validate. So if things are working correctly, the ultimate reason for the ORA-04045 will prove to be that some name referenced by TLMDEV./3ba8073b_Log4JLogger or recursived by something it references will be a name for which there is no class in the database (or more precisely in the search path used which is typically the current schema followed by PUBLIC, but could be different if some of the classes involved have had explicit resolver specifications given for them). The thing to do to try to start determining what class is missing is to do the query
    select owner||'.'||name||' : '||text from all_errors where type like 'JAVA%';
    The first thing to look at are lines for TLMDEV./3ba8073b_Log4JLogger. These will probably show text which contains either ORA-29534 identifying a referenced class that exists but could not be recursively valid, or ORA-29521 identifying names for which there is no class. The latter are the ultimately interesting ones since the former will end up being recursively caused by them. So look at the ORA-29521s and then try to determine either why the class is missing and how to restore it or which it is now referenced when it wasn't before (which would happen if some class was changed to reference it or something that references it, recursively).

  • Error while Shell executing from Oracle Using java proc

    Hi All,
    After a long time I'm here again.
    I'm facing one strange problem.
    SQL>
    SQL> select * from v$version;
    BANNER
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
    PL/SQL Release 11.2.0.1.0 - Production
    CORE    11.2.0.1.0      Production
    TNS for Linux: Version 11.2.0.1.0 - Production
    NLSRTL Version 11.2.0.1.0 - Production
    Elapsed: 00:00:00.01
    SQL>
    SQL>And, the purpose of this procedure is to execute shell command from PL/SQL application.
    It seems that this procedure is able to execute shell commands like *'pwd'*.
    But, when it comes to other commands like *'ls -lrt'* or *'sqlldr'* it throws error.
    Kindly find the following details -
    SQL> declare
      2    err_cd   number;
      3    err_desc varchar2(500);
      4  begin
      5   dbms_java.set_output(1000000);
      6   host(p_command => '/a/mis/Sqlloader_script/loader_command/ST_det.sh');
      7   dbms_output.put_line('Successfully Executed SQL Loader Command');
      8  exception
      9      when others then
    10        err_cd := 1;
    11        err_desc := substr(sqlerrm,1,500);
    12        dbms_output.put_line(err_desc);
    13  end;
    14  /
    Process err :/a/mis/Sqlloader_script/loader_command/ST_det.sh: line 19: sqlldr: No such file or directory
    Successfully Executed SQL Loader Command
    PL/SQL procedure successfully completed.
    Elapsed: 00:00:00.11
    SQL>
    SQL> declare
      2    err_cd   number;
      3    err_desc varchar2(500);
      4  begin
      5   dbms_java.set_output(1000000);
      6   host(p_command => 'pwd');
      7   dbms_output.put_line('Successfully Executed SQL Loader Command');
      8  exception
      9      when others then
    10        err_cd := 1;
    11        err_desc := substr(sqlerrm,1,500);
    12        dbms_output.put_line(err_desc);
    13  end;
    14  /
    Process out :/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs
    Successfully Executed SQL Loader Command
    PL/SQL procedure successfully completed.
    Elapsed: 00:00:00.11
    SQL>But, the file exists in the following path -
    SQL> !ls -lrt /a/mis/Sqlloader_script/loader_command/ST_det.sh
    -rwxrwxr-x 1 oracle root 1315 Apr 13 13:40 /a/mis/Sqlloader_script/loader_command/ST_det.shAny idea?
    Where is the privileges that i need to give to the current user?
    When i directly execute the Sql Loader from the oracle o/s - it ran successfully.
    [oracle@pult loader_command]$ /a/mis/Sqlloader_script/loader_command/ST_det.sh
    SQL*Loader: Release 11.2.0.1.0 - Production on Fri Apr 13 14:59:19 2012
    Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
    Commit point reached - logical record count 64
    Commit point reached - logical record count 128
    Commit point reached - logical record count 192
    Commit point reached - logical record count 256
    Commit point reached - logical record count 320
    Commit point reached - logical record count 384
    Commit point reached - logical record count 448
    Commit point reached - logical record count 512
    Commit point reached - logical record count 576
    Commit point reached - logical record count 640
    Commit point reached - logical record count 704
    Commit point reached - logical record count 732
    Succesful execution of Loading.
    [oracle@pult loader_command]$
    [oracle@pult loader_command]$Thanks in advance.

    This is a generic java proc.
    It works well with windows.
    But, facing this problem in Linux.
    Procedure looks like -
    create or replace and compile java source named host as
    import java.io.*;
    public class Host {
      public static void executeCommand(String command) {
        try {
          String[] finalCommand;
          if (isWindows()) {
            finalCommand = new String[4];
            finalCommand[0] = "C:\\windows\\system32\\cmd.exe";  // Windows XP/2003
            finalCommand[1] = "/y";
            finalCommand[2] = "/c";
            finalCommand[3] = command;
          else {
            finalCommand = new String[3];
            finalCommand[0] = "/bin/bash";
            finalCommand[1] = "-c";
            finalCommand[2] = command;
          final Process pr = Runtime.getRuntime().exec(finalCommand);
          pr.waitFor();
          new Thread(new Runnable(){
            public void run() {
              BufferedReader br_in = null;
              try {
                br_in = new BufferedReader(new InputStreamReader(pr.getInputStream()));
                String buff = null;
                while ((buff = br_in.readLine()) != null) {
                  System.out.println("Process out :" + buff);
                  try {Thread.sleep(100); } catch(Exception e) {}
                br_in.close();
              catch (IOException ioe) {
                System.out.println("Failed to print.");
                ioe.printStackTrace();
              finally {
                try {
                  br_in.close();
                } catch (Exception ex) {}
          }).start();
          new Thread(new Runnable(){
            public void run() {
              BufferedReader br_err = null;
              try {
                br_err = new BufferedReader(new InputStreamReader(pr.getErrorStream()));
                String buff = null;
                while ((buff = br_err.readLine()) != null) {
                  System.out.println("Process err :" + buff);
                  try {Thread.sleep(100); } catch(Exception e) {}
                br_err.close();
              catch (IOException ioe) {
                System.out.println("Process error.");
                ioe.printStackTrace();
              finally {
                try {
                  br_err.close();
                } catch (Exception ex) {}
          }).start();
        catch (Exception ex) {
          System.out.println(ex.getLocalizedMessage());
      public static boolean isWindows() {
        if (System.getProperty("os.name").toLowerCase().indexOf("windows") != -1)
          return true;
        else
          return false;
    };Looking for your reply.

  • Error committing transaction in Stored Proc call - prev solns not working

    Hi All,
    Our process invokes a DB adapter to fetch the response from the table for our request via Stored Procedure call but facing the below issue. Its a synchronous process. Stored Procedure is present inside the Package and we are calling the Stored procedure using that Package.
    What we did is created a DB datasource of XA type and tried to call the Stored Proc but it was giving a problem “ORA-24777: use of non-migratable database link not allowed” and hence according to this thread Using DB links in Stored proc call in DB adapter 11G SOA we have modified the datasource as non-XA type.
    While we do that, we could see that Stored Proc is called and the response is present in the reply payload inside the flow trace. But the instance is getting faulted and the error is “Error committing transaction:; nested exception is: javax.transaction.xa.XAException: JDBC driver does not support XA, hence cannot be a participant in two-phase commit. To force this participation, set the GlobalTransactionsProtocol attribute to LoggingLastResource (recommended) or EmulateTwoPhaseCommit for the Data Source.”
    We have tried the properties of global transaction support as one phase commit, emulate two phase commit and logging last resource but error remains the same.
    Database from which we are getting the response is of version "Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production". Will the database link error arises even if we connect to Oracle Database?
    Please could you advise me solutions to resolve this issue.
    Thanks in advance.

    You are using Non-XA because it means (among all others) that the commit issue can be handle by the DB as well.
    The Emulate Two Phase property imitating the XA transaction in that way, that it allows you to manage a local db transaction.
    You can stay with XA connection, but then you will have to use "AUTONOMOUS_TRANSACTION pragma" in your procedure.
    Enter the following link to find good explanation about all of your questions:
    http://docs.oracle.com/cd/E15523_01/integration.1111/e10231/adptr_db.htm#BGBIHCIJ
    Arik

  • Java function call from Trigger in Oracle

    Moderator edit:
    This post was branched from an eleven-year-old long dead thread
    Java function call from Trigger in Oracle
    @ user 861498,
    For the future, if a forum discussion is more than (let's say) a month old, NEVER resurrect it to append your new issue. Always start a new thread. Feel free to include a link to that old discussion if you think it might be relevant.
    Also, ALWAYS use code tags as is described in the forum FAQ that is linked at the upper corner of e\very page. Your formulae will be so very much more readable.
    {end of edit, what follows is their posting}
    I am attempting to do a similar function, however everything is loaded, written, compiled and resolved correct, however, nothing is happening. No errors or anything. Would I have a permission issue or something?
    My code is the following, (the last four lines of java code is meant to do activate a particular badge which will later be dynamic)
    Trigger:
    CREATE OR REPLACE PROCEDURE java_contact_t4 (member_id_in NUMBER)
    IS LANGUAGE JAVA
    NAME 'ThrowAnError.contactTrigger(java.lang.Integer)';
    Java:
    CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "ThrowAnError" AS
    // Required class libraries.
    import java.sql.*;
    import oracle.jdbc.driver.*;
    import com.ekahau.common.sdk.*;
    import com.ekahau.engine.sdk.*;
    // Define class.
    public class ThrowAnError {
    // Connect and verify new insert would be a duplicate.
    public static void contactTrigger(Integer memberID) throws Exception {
    String badgeId;
    // Create a Java 5 and Oracle 11g connection.
    Connection conn = DriverManager.getConnection("jdbc:default:connection:");
    // Create a prepared statement that accepts binding a number.
    PreparedStatement ps = conn.prepareStatement("SELECT \"Note\" " +
    "FROM Users " +
    "WHERE \"User\" = ? ");
    // Bind the local variable to the statement placeholder.
    ps.setInt(1, memberID);
    // Execute query and check if there is a second value.
    ResultSet rs = ps.executeQuery();
    while (rs.next()) {
    badgeId = rs.getString("Note");
    // Clean up resources.
    rs.close();
    ps.close();
    conn.close();
    // davids badge is 105463705637
    EConnection mEngineConnection = new econnection("10.25.10.5",8550);
    mEngineConnection.setUserCredentials("choff", "badge00");
    mEngineConnection.call("/epe/cfg/tagcommandadd?tagid=105463705637&cmd=mmt%203");
    mEngineConnection.call("/epe/msg/tagsendmsg?tagid=105463705637&messagetype=instant&message=Hello%20World%20from%20Axium-Oracle");
    Edited by: rukbat on May 31, 2011 1:12 PM

    To followup on the posting:
    Okay, being a oracle noob, I didn't know I needed to tell anything to get the java error messages out to the console
    Having figured that out on my own, I minified my code to just run the one line of code:
    // Required class libraries.
      import java.sql.*;
      import oracle.jdbc.driver.*;
      import com.ekahau.common.sdk.*;
      import com.ekahau.engine.sdk.*;
      // Define class.
      public class ThrowAnError {
         public static void testEkahau(Integer memberID) throws Exception {
         try {
              EConnection mEngineConnection = new EConnection("10.25.10.5",8550);
         } catch (Throwable e) {
              System.out.println("got an error");
              e.printStackTrace();
    }So, after the following:
    SQL> {as sysdba on another command prompt} exec dbms_java.grant_permission('AXIUM',"SYS:java.util.PropertyPermission','javax.security.auth.usersubjectCredsOnly','write');
    and the following as the user
    SQL> set serveroutput on
    SQL> exec dbms_java.set_output(10000);
    I run the procedure and receive the following message.
    SQL> call java_contact_t4(801);
    got an error
    java.lang.NoClassDefFoundError
         at ThrowAnError.testEkahau(ThrowAnError:13)
    Call completed.
    NoClassDefFoundError tells me that it can't find the jar file to run my call to EConnection.
    Now, I've notice when I loaded the sdk jar file, it skipped some classes it contained:
    c:\Users\me\Documents>loadjava -r -f -v -r "axium/-----@axaxiumtrain" ekahau-engine-sdk.jar
    arguments: '-u' 'axium/***@axaxiumtrain' '-r' '-f' '-v' 'ekahau-engine-sdk.jar'
    creating : resource META-INF/MANIFEST.MF
    loading : resource META-INF/MANIFEST.MF
    creating : class com/ekahau/common/sdk/EConnection
    loading : class com/ekahau/common/sdk/EConnection
    creating : class com/ekahau/common/sdk/EErrorCodes
    loading : class com/ekahau/common/sdk/EErrorCodes
    skipping : resource META-INF/MANIFEST.MF
    resolving: class com/ekahau/common/sdk/EConnection
    skipping : class com/ekahau/common/sdk/EErrorCodes
    skipping : class com/ekahau/common/sdk/EException
    skipping : class com/ekahau/common/sdk/EMsg$EMSGIterator
    skipping : class com/ekahau/common/sdk/EMsg
    skipping : class com/ekahau/common/sdk/EMsgEncoder
    skipping : class com/ekahau/common/sdk/EMsgKeyValueParser
    skipping : class com/ekahau/common/sdk/EMsgProperty
    resolving: class com/ekahau/engine/sdk/impl/LocationImpl
    skipping : class com/ekahau/engine/sdk/status/IStatusListener
    skipping : class com/ekahau/engine/sdk/status/StatusChangeEntry
    Classes Loaded: 114
    Resources Loaded: 1
    Sources Loaded: 0
    Published Interfaces: 0
    Classes generated: 0
    Classes skipped: 0
    Synonyms Created: 0
    Errors: 0
    .... with no explanation.
    Can anyone tell me why it would skip resolving a class? Especially after I use the -r flag to have loadjava resolve it upon loading.
    How do i get it to resolve the entire jar file?
    Edited by: themadprogrammer on Aug 5, 2011 7:15 AM
    Edited by: themadprogrammer on Aug 5, 2011 7:21 AM
    Edited by: themadprogrammer on Aug 5, 2011 7:22 AM
    Edited by: themadprogrammer on Aug 5, 2011 7:23 AM
    Edited by: themadprogrammer on Aug 5, 2011 7:26 AM

  • Java Applet call javascript problem

    Hi I have a web page as follow and embedded a applet. The applet call the java script, and instead of showing an alarm, the browser show the javascript code. Is that strange ? Any suggestion for this problem.
    HTML:
    ================================================================
    <HTML>
         <HEAD>
         function ShowEmbd()
              alert("Test Applet call Javascript");
         </SCRIPT>
         </HEAD>
         <BODY>
         <FORM NAME="AppletEmbdStart">
              <OBJECT classid="clsid:48B2DD7B-6B52-4DB0-97C9-ECB940113B47" id="CIVON_DEmbdObj" width="0" height="0"></OBJECT>
              <APPLET code="MyApplet.class" width="0" height="0"></APPLET>
         </FORM>
         </BODY>
    </HTML>MyApplet.java
    =========================================================================
    import netscape.javascript.*;
    public class MyApplet extends javax.swing.JApplet
         private JSObject m_win = null;
         private JSObject m_doc = null;
         public void init()
              getJSWin().call("ShowEmbd", null);
         private getJSDoc()
              if(m_doc == bull)
                   m_doc = (JSObject) getJSWin().getMember("document");
              return m_doc;
         private JSObject getJSWin()
              if (m_win == null)
                   m_win = netscape.javascript.JSObject.getWindow(this);
              return m_win;
    }The page was load and it should call the applet MyApplet. The MyApplet should do the init() method and call the Javascript "ShowEmbd()", BUT, instead of show alert from ShowEmbd(), the browser show the code of ShowEmbd() itself ...... It did not run the javascript and shows the alert ??
    The browser shows a message from status bar "The applet not initial" ???? why ???
    Can anyone help ?!

    On first look:
    I am not sure about the Object Tag, but the Applet Tag requires the MAYSCRIPT attribute before Java can call Javascript.

  • Using java to call a text file

    I am new to java and was wondering if there is a way of using java to call a text file on my server and use it to create a webpage using a template. Namely to click a link to a poem, and have the java automatically create a page from a text file of the poetry. I need to know if this is even possible, what I would need to look into, (IE: which software or applet to look for), and if there are any sites that anyone knows about that I could learn how to do this. currently I am having to create a page for every poem posted on my site, which takes a great deal of time, and I would like to speed the process up a bit if it is possible. Any suggestions would be greatly appreciated.

    Why a text file? I don't think it is a best practice of doing that. Just use a database, keep your poem collections there, and set up a jsp page that seek the database, and then display it on another jsp page. I guess you can find similar application in the sample projects provided by JSC.

  • Why java is called java2

    why java is called java2 and another thing that i would like to know is why it was renamed to java from its previous name OAK
    Thanx
    Manish

    why java is called java2Not to sure about this one, but I think it was a marketing decision - I guess 'Welcome to the Java 2 platform' sounds better than saying 'Welcome to the JDK 1.2.1 platform' :=)
    and another thing that i
    would like to know is why it was renamed to java from
    its previous name OAKThere was already a patented product named 'OAK', so they had to rename it to something else to avoid the law.
    >
    Thanx
    ManishA brief history of Java:
    http://java.sun.com/features/1998/05/birthday.html
    http://www.ils.unc.edu/blaze/java/javahist.html

  • Java method call from Oracle?

    is it possible to calll on a running java Class's method from Oracle Stored procedure or something?
    here is the real problem...
    let's take a example of a simple ChatServer...
    let 's say we have two or more chatserver running on the same machine and users are connected to both server. Now one user from one machine send some message to another user whois on machine two. let's for a moment assume that all message have to go through the oracle database. We know at the databse level who is connect on what server. So server1 inserts the message into the databse and trigger should send message to server1 some kind of method, which then looks up the user's thread and send the message to the user.
    any clue?

    Oracle does support Java stored procs. You could have an Oracle java proc put a message on a network connection to do this. Honestly, however, it sounds to me like you need to revisit your design. A database really isn't the place to do this. If you need to keep the two servers in synch, consider a messaging solution like JMS

  • Java is call by value or call by reference

    Hi! friends,
    I want to know,java is call by value and call by reference.
    Please give the the exact explanation with some example code.

    All parameters to methods are passed "by value." In other words, values of parameter variables in a method are copies of the values the invoker specified as arguments. If you pass a double to a method, its parameter is a copy of whatever value was being passed as an argument, and the method can change its parameter's value without affecting values in the code that invoked the method. For example:
    class PassByValue {
        public static void main(String[] args) {
            double one = 1.0;
            System.out.println("before: one = " + one);
            halveIt(one);
            System.out.println("after: one = " + one);
        public static void halveIt(double arg) {
            arg /= 2.0;     // divide arg by two
            System.out.println("halved: arg = " + arg);
    }The following output illustrates that the value of arg inside halveIt is divided by two without affecting the value of the variable one in main:before: one = 1.0
    halved: arg = 0.5
    after: one = 1.0You should note that when the parameter is an object reference, the object reference -- not the object itself -- is what is passed "by value." Thus, you can change which object a parameter refers to inside the method without affecting the reference that was passed. But if you change any fields of the object or invoke methods that change the object's state, the object is changed for every part of the program that holds a reference to it. Here is an example to show the distinction:
    class PassRef {
        public static void main(String[] args) {
            Body sirius = new Body("Sirius", null);
            System.out.println("before: " + sirius);
            commonName(sirius);
            System.out.println("after:  " + sirius);
        public static void commonName(Body bodyRef) {
            bodyRef.name = "Dog Star";
            bodyRef = null;
    }This program produces the following output: before: 0 (Sirius)
    after:  0 (Dog Star)Notice that the contents of the object have been modified with a name change, while the variable sirius still refers to the Body object even though the method commonName changed the value of its bodyRef parameter variable to null. This requires some explanation.
    The following diagram shows the state of the variables just after main invokes commonName:
    main()            |              |
        sirius------->| idNum: 0     |
                      | name --------+------>"Sirius"       
    commonName()----->| orbits: null |
        bodyRef       |______________|At this point, the two variables sirius (in main) and bodyRef (in commonName) both refer to the same underlying object. When commonName changes the field bodyRef.name, the name is changed in the underlying object that the two variables share. When commonName changes the value of bodyRef to null, only the value of the bodyRef variable is changed; the value of sirius remains unchanged because the parameter bodyRef is a pass-by-value copy of sirius. Inside the method commonName, all you are changing is the value in the parameter variable bodyRef, just as all you changed in halveIt was the value in the parameter variable arg. If changing bodyRef affected the value of sirius in main, the "after" line would say "null". However, the variable bodyRef in commonName and the variable sirius in main both refer to the same underlying object, so the change made inside commonName is visible through the reference sirius.
    Some people will say incorrectly that objects are passed "by reference." In programming language design, the term pass by reference properly means that when an argument is passed to a function, the invoked function gets a reference to the original value, not a copy of its value. If the function modifies its parameter, the value in the calling code will be changed because the argument and parameter use the same slot in memory. If the Java programming language actually had pass-by-reference parameters, there would be a way to declare halveIt so that the preceding code would modify the value of one, or so that commonName could change the variable sirius to null. This is not possible. The Java programming language does not pass objects by reference; it passes object references by value. Because two copies of the same reference refer to the same actual object, changes made through one reference variable are visible through the other. There is exactly one parameter passing mode -- pass by value -- and that helps keep things simple.
    -- Arnold, K., Gosling J., Holmes D. (2006). The Java� Programming Language Fourth Edition. Boston: Addison-Wesley.

  • Non blocking stored proc call

    HI
    I have written a c application using OCI which can call stored proc. but that is using blocking call. Is it possible to call stored proc in non blocking mode? So that I can receive output in call back function. Actually stored proc take much time to execute can I associate some Subscription callback-function with my stored proc call. Any idea?
    Thanks
    Kamran

    If you want to do non-blocking calls in OCI, you just need to set the server handle (svrhp below) attribute:
    sb2 polling=1;
    OCIAttrSet((dvoid *)svrhp,
    (ub4)OCI_HTYPE_SERVER,
    (dvoid *)&polling,
    (ub4)0,
    (ub4)OCI_ATTR_NONBLOCKING_MODE,
    (OCIError *) errhp);
    And then you call you OCIExecute() as you would in blocking mode. The difference is that instead of blocking until the call is done on the server, it always returns immediately. So instead of calling it just once per statement and checking the return code, you must keep calling OCIExecute() until it does not equal OCI_STILL_EXECUTING. When the proc is done, the final call to OCIExecute() will then be OCI_SUCCESS, OCI_ERROR, whatever happened.

  • Why java is called pure object oriented.

    i know that java is called as pure object oriented language.
    why it is called so even though it has primitive datatypes and also it doesnot support multiple inheritance completely. it only supports in the case of interfaces but not in the case of classes. then why it is called pure object oriented.

    Its because you cannot write an executable java program without creating an object. Well, you can:
    public class a
      public static void main( String a[] )
    }In contrary to C++, there can be no variables or functions in the wild (outside a class).
    You can not create an executable java program without creating a class (but not forcibly its instance, an object.)
    The "pure object oriented" wording in this sense has not really much importance, it is rather a marketing ploy.

  • Why java is called as true object oriented language?

    HI Friends,
    Though few oops concepts is not supported , why java is called as truly object oriented language and C++ as not a purely object oriented language???? Please, if any one know , give me the answer.
    Thanks to all.

    few oops concepts is not supportedwhich concepts?
    as far as i know...to be OO, you must supports
    encapsulation, abstraction, inheritancxe, composition (aggretration, et all) and polymorphism. Java supports all those comcept..now..Java is a hybrid due to what Jverd has pointed out.
    the only pure OO language that i know of is SmallTalk. they have Meta class that can create Class object. and all their primitaives are object.
    C# comes close, but their Class are not object.

  • Why java is called platform independent

    Hello
    Why java is called as platform independent?Any body please give a detailed explanation since im a beginner to java technology.
    ThankYou
    Jk

    BigDaddyLoveHandles wrote:
    georgemc wrote:
    SunFred wrote:
    Java is not platform independent since it depends on the Java platform ;)Don't complicate matters!I always thought the phrase should have been "platform agnostic"It's a phrase I've used meself

  • Need help with Java script calling an html page

    Hello -
    I have a bunch of web pages, that call a java script called "header.js". The "header.js" puts a header on the top of each web page. In the Java script, I have a gif (picture) that displays a logo and if you click on it, it will send to you a different website.
    I'd like to replace this gif with an actual web page. So, the "header" would actually be a web page and not some gif.
    Below is a snippet of the code and I'd like to replace the highlighted section with a web page called "header.html". I don't even know if this is possible.
    Can anyone tell me what I need to do? I know pretty much nothing about Javascripting so please be as detailed as you can. Thanks!
    /* Common header across all pages... */
    document.write('            <div id="header" class="clearfix">');
    document.write('                            <div id="left" class="float_left">');
    document.write('                                            <div id="logo"><a href="http://www.xyz.com/" onclick="window.open(this.href);return false;" onkeypress="window.open(this.href);return false;" target=_blank><img src="/images/xyz.gif" width="105" height="75" alt="" border="0" /></a></div>');
    document.write('                                            <div id="mainNav" class="clearfix"> ');
    document.write('                                                             <ul>');
    //document.write('                                                                         <li id="nav_controls"><a href="controls.html">Controls</a></li>');
    document.write('                                                                              <li id="nav_motion"><a href="motion.html">Motion</a></li>');
    document.write('                                                                              <li id="nav_sensor"><a href="sensor.html">Sensor</a></li>');
    document.write('                                                                              <li id="nav_encoder"><a href="encoder.html">Encoder</a></li>');
    document.write('                                                                              <li id="nav_system"><a href="system.html">System</a></li>');
    //document.write('<!--                                                                  <li id="nav_logs"><a href="#">Logs</a></li> -->');
    document.write('                                                             </ul>');
    document.write('                                            </div>');
    document.write('                            </div>');
    document.write('                            <div id="right" class="float_left">');
    document.write('                                            <div id="controls">');

    Well, the problem with this is that I'm not an expert on SSI and I really know nothing about javascripting...so I'm afraid of breaking the whole web site and also having to modify all the web pages that call this header.
    I'll have to read up on server side include...cause I don't know much about it.
    If I could do what I want with this "header.js", it would be a lot easier.

Maybe you are looking for

  • WHY WONT MY IPHONE CHARGE!?HELP PLEASE!?

    Soo I've had my iPhone 5 now for a little over a month.. Everything was cool, but tonight my phone won't charge!! It's Dead now , I've been SO careful with my phone . So I know I didn't tear it up .. When i noticed it wasnt charging At first when I w

  • Need ATI Rage 128 support on Solaris 8-1-01 (Intel)

    Hi, I am trying to install Solaris 8 (the new 8-1-01 release) onto an intel-based PC with an AGP-based ATI Rage 128 video driver, and there appears to be no option listed in the video driver list on the install CD, and the dirver on the hardware isn'

  • Setting a default font

    I want to set a default font for my out going emails. However, when I go into preferences and select fonts and set the message font, it changes it for all income messages as well. Is there a way to set the font for outgoing emails to have a different

  • Refresh Analytic Workspace increase tablespace size ?

    Hello, I'm using CWM2 OLAP objects with 9.2.0.6 database version. I have analytic workspaces, too. I execute refresh of my analytic workspace, using the script generated by Analytic Workspace Manager 9.2.0.4.1. I have noticed that, strangely, wheneve

  • Adobe TV will not fully play on Ipad

    I can play most Adobe TV videos on my ipad using Safari. JKost video Drifting stops downloading after 13 minutes. Plays fine on the computer. Adobe support has to be rated in last place. The support website is terrible. I have tried to contact them w