1 Reply Latest reply on May 21, 2018 12:03 PM by rschmitz

    Error while writing to PI using Java class

    ujjwal

      Hi,

       

      I am using a java class to write data to PI system. The java class is called using an R script and the data is sent to the class file from R.

      Please find below the code snippets.

      Rscript:

      "

      try({

            classname="my_class"

          .jinit("<path to class>")

          obj=.jnew(classname)

          var=t(as.matrix(pidata))

          res=.jcall(obj,"S",method = "name","my_DAS","PI_server",var)

      })

      "

      However, when i try to run this script i get the following error:

       

      "

      *** Error in `/opt/r/R-3.4.1/lib64/R/bin/exec/R': double free or corruption (!prev): 0x000000000add90a0 ***

      ======= Backtrace: =========

      /lib64/libc.so.6(+0x7c619)[0x7f4b9b908619]

      /opt/pipc/jdbc/lib/libRdsaWrapper64-1.5b.so(_ZNSt10unique_ptrI10NativeRDSASt14default_deleteIS0_EED1Ev+0x21)[0x7f4b28580951]

      /lib64/libc.so.6(+0x38a69)[0x7f4b9b8c4a69]

      /lib64/libc.so.6(+0x38ab5)[0x7f4b9b8c4ab5]

      /opt/r/R-3.4.1/lib64/R/lib/libR.so(+0x20b11b)[0x7f4b9c4c911b]

      /opt/r/R-3.4.1/lib64/R/lib/libR.so(run_Rmainloop+0x7b)[0x7f4b9c404efb]

      /opt/r/R-3.4.1/lib64/R/bin/exec/R(main+0x1b)[0x40080b]

      /lib64/libc.so.6(__libc_start_main+0xf5)[0x7f4b9b8adc05]

      /opt/r/R-3.4.1/lib64/R/bin/exec/R[0x40083b]

      ======= Memory map: ========

      00400000-00401000 r-xp 00000000 f9:00 806308                             /opt/r/R-3.4.1/lib64/R/bin/exec/R

      00600000-00601000 r--p 00000000 f9:00 806308                             /opt/r/R-3.4.1/lib64/R/bin/exec/R

      00601000-00602000 rw-p 00001000 f9:00 806308                             /opt/r/R-3.4.1/lib64/R/bin/exec/R

      015a2000-0b362000 rw-p 00000000 00:00 0                                  [heap]

      .

      .

      .

      .

      7f4b2aa87000-7f4b2aa89000 r--s 00008000 f9:01 1181509                    /opt/mana/nia_2.3/files/app/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.1.jar

       

       

      7f4b2ab7d000-7f4b2ab82000 r--s 0002c000 f9:01 1180872    Aborted

      "

       

      -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

       

      Java file:

      "

      import java.sql.Connection;

      import java.sql.DriverManager;

      import java.sql.PreparedStatement;

      import java.util.Properties;

       

       

      public class write_monthly {

       

      public static void main(String args[]) throws Exception {

              String DAS= args[0];

              String DataSource= args[1];

              String df=args[2];

              String[] arr=null;

              write_monthly o1= new write_monthly();

              o1.name(DAS, DataSource, arr);

              

      }

       

      public String name(String DAS, String DataSource,String arr1[]) throws Exception {

               String url = "jdbc:pioledb://"+DAS+"/Data Source="+DataSource+";";

      Class.forName("com.osisoft.jdbc.Driver").newInstance();

               String[] arr2= arr1;

              

              

         try{

              Connection con = DriverManager.getConnection(url, createPropertiesList());

             

              PreparedStatement stmt1=null;

        for(int i=0;i<arr2.length;i=i+9){

        String q1="INSERT piarchive..picomp2 (tag,value,time) VALUES ('"+"TMMF.Assembly.Forecasted Power Active Monthly',"+arr2[i+1]+",'"+arr2[i]+" 00:00:00')";

        System.out.println(q1);

        stmt1 = con.prepareStatement(q1);

        stmt1.executeQuery();

       

      String q2="INSERT piarchive..picomp2 (tag,value,time) VALUES ('"+"TMMF.Plastic.Forecasted Power Active Monthly',"+arr2[i+2]+",'"+arr2[i]+" 00:00:00')";

        PreparedStatement stmt2 = con.prepareStatement(q2);

        stmt2.executeQuery();

       

      String q3="INSERT piarchive..picomp2 (tag,value,time) VALUES ('"+"TMMF.Press.Forecasted Power Active Monthly',"+arr2[i+3]+",'"+arr2[i]+" 00:00:00')";

        PreparedStatement stmt3 = con.prepareStatement(q3);

        stmt3.executeQuery();

       

      String q4="INSERT piarchive..picomp2 (tag,value,time) VALUES ('"+"TMMF.Weld.Forecasted Power Active Monthly',"+arr2[i+4]+",'"+arr2[i]+" 00:00:00')";

        PreparedStatement stmt4 = con.prepareStatement(q4);

        stmt4.executeQuery();

       

      String q5="INSERT piarchive..picomp2 (tag,value,time) VALUES ('"+"TMMF.Office.Forecasted Power Active Monthly',"+arr2[i+5]+",'"+arr2[i]+" 00:00:00')";

        PreparedStatement stmt5 = con.prepareStatement(q5);

        stmt5.executeQuery();

       

      String q6="INSERT piarchive..picomp2 (tag,value,time) VALUES ('"+"TMMF.Paint.Forecasted Power Active Monthly',"+arr2[i+6]+",'"+arr2[i]+" 00:00:00')";

        PreparedStatement stmt6 = con.prepareStatement(q6);

        stmt6.executeQuery();

       

      String q7="INSERT piarchive..picomp2 (tag,value,time) VALUES ('"+"TMMF.Facilities.Forecasted Power Active Monthly',"+arr2[i+7]+",'"+arr2[i]+" 00:00:00')";

        PreparedStatement stmt7 = con.prepareStatement(q7);

        stmt7.executeQuery();

       

      String q8="INSERT piarchive..picomp2 (tag,value,time) VALUES ('"+"TMMF.Logistics.Forecasted Power Active Monthly',"+arr2[i+8]+",'"+arr2[i]+" 00:00:00')";

        PreparedStatement stmt8 = con.prepareStatement(q8);

        stmt8.executeQuery();

       

       

      }

       

      System.out.println("success");

        con.commit();      

                    con.close();

         }catch (Exception e) {

       

             e.printStackTrace();

             System.out.println("could not write forecasted data to osi pi");

       

              }

       

       

      return("SUCCESS");

       

                     }

      private Properties createPropertiesList() {

      Properties plist = new Properties();

      plist.put("ProtocolOrder", "Https/Soap:5461,NetTcp:5462");

      plist.put("LogConsole", "False");

      plist.put("user", "xxxxx");

      plist.put("password", "xxxxx");

      plist.put("TrustedConnection","False");

      plist.put("LogLevel", "5");

      plist.put("DCA", "SAVE");

       

                      return plist;

      }

       

      }

      "

       

      The script is successfully running if I remove the Insertion and connection part and simply iterate in the loop.

      Can you please help in resolving this.

       

      Thanks,

      Ujjwal

        • Re: Error while writing to PI using Java class
          rschmitz

          Hi Ujjwal,

           

          Can I ask what version of the PI JDBC driver you're using? I know we had a known issue a while back with Python and the JDBC driver wherein the Python garbage collector tried to dispose of the JDBC driver object when it was already disposed of resulting in a double free (with a near-identical traceback to what you're seeing right now). The issue should have been fixed with the release of the 2017 R2 JDBC driver if I'm not mistaken.

           

          If you're on the latest version of the JDBC driver and still getting this error, then I would recommend opening up a tech support case and we can dive in further.

           

          Cheers,

          Rob