Customer Portal

bufferUnderFlow Exception

Comments 4

  • Avatar
    oldforum
    0
    Comment actions Permalink
    hello martin

    this is my SplitRecord componenet


    /*
    * Created on Nov 10, 2005
    *
    * TODO To change the template for this generated file go to
    * Window - Preferences - Java - Code Style - Code Templates
    */
    package org.jetel.component;

    /**
    * @author Deepak
    *
    * TODO To change the template for this generated type comment go to
    * Window - Preferences - Java - Code Style - Code Templates
    */
    import java.io.IOException;

    import org.jetel.data.DataRecord;
    import org.jetel.exception.ComponentNotReadyException;
    import org.jetel.graph.InputPort;
    import org.jetel.graph.Node;
    import org.jetel.graph.OutputPort;
    import org.jetel.util.ComponentXMLAttributes;
    import org.w3c.dom.Element;

    /**
    * @author Deepak
    *
    * TODO To change the template for this generated type comment go to
    * Window - Preferences - Java - Code Style - Code Templates
    */
    public class SplitRecord extends Node{

    public static final String COMPONENT_TYPE="SPLIT_RECORD";

    public SplitRecord(String id)
    {
    super(id);
    }

    public String getType() {
    return COMPONENT_TYPE;
    }

    public void init() throws ComponentNotReadyException {
    // test that we have at least one input port and one output
    if (inPorts.size()<1){
    throw new ComponentNotReadyException("At least one input port has to be defined for node " + id);
    }else if (outPorts.size()<1){
    throw new ComponentNotReadyException("At least one output port has to be defined for node " + id);
    }
    }

    public void run()
    {
    boolean isDriverDifferent;

    // get all ports involved
    InputPort inPort = getInputPort(0);
    DataRecord driverRecordread = new DataRecord(inPort.getMetadata());
    driverRecordread.init();

    int index=0;

    // get array of all ports defined/connected - use collection Collection - getInPorts();
    OutputPort outPorts[];
    outPorts = (OutputPort[]) getOutPorts().toArray(new OutputPort[0]);

    // create array holding incoming records
    DataRecord outputRecords[];
    outputRecords = new DataRecord[outPorts.length];

    // initialize array of data records (for each input port one)
    System.out.println("the no. of out put pin in split is " + outPorts.length);

    // numActive=inPorts.length;
    int cou[] = new int[5];
    Integer timeid=new Integer (1);

    while (runIt)
    {
    try
    {
    driverRecordread = inPort.readRecord(driverRecordread);
    if(driverRecordread != null)
    {
    DataRecord record0 = new DataRecord(outPorts[0].getMetadata());
    record0.init();
    record0.getField(0).setValue(driverRecordread.getField(1).getValue());

    DataRecord record1=new DataRecord(outPorts[1].getMetadata());
    record1.init();
    record1.getField(1).setValue(new Integer(1));
    record1.getField(2).setValue(driverRecordread.getField(0).getValue()); //customer_id
    record1.getField(3).setValue(timeid );
    record1.getField(4).setValue(driverRecordread.getField(2).getValue()); //doc_no
    record1.getField(5).setValue(driverRecordread.getField(3).getValue());//version
    record1.getField(6).setValue(driverRecordread.getField(4).getValue());//sales_representative
    record1.getField(7).setValue(driverRecordread.getField(5).getValue());//item_id
    record1.getField(8).setValue("KG");
    record1.getField(9).setValue(driverRecordread.getField(6).getValue());//qty
    record1.getField(10).setValue(driverRecordread.getField(7).getValue());//price
    record1.getField(11).setValue(driverRecordread.getField(8).getValue());//discount1
    record1.getField(12).setValue(driverRecordread.getField(9).getValue());//discount2
    record1.getField(13).setValue(new Integer(5));


    outPorts[0].writeRecord(record0 );
    outPorts[1].writeRecord(record1);

    }else
    {
    break;
    }
    } catch (IOException ex)
    {
    resultMsg = ex.getMessage();
    resultCode = Node.RESULT_ERROR;
    closeAllOutputPorts();
    System.out.println("IO error in split:" + ex.getMessage());
    ex.printStackTrace();
    return;
    } catch (Exception ex)
    {
    resultMsg = ex.getMessage();
    resultCode = Node.RESULT_FATAL_ERROR;
    System.out.println("error in split:" + ex.getMessage());
    ex.printStackTrace();
    return;
    }
    }

    broadcastEOF();

    if (runIt) {
    resultMsg = "OK";
    } else
    {
    resultMsg = "STOPPED";
    }
    resultCode = Node.RESULT_OK;
    }

    public boolean checkConfig() {
    return true;
    }
    public void toXML(Element xmlElement) {
    super.toXML(xmlElement);
    }

    public static Node fromXML(org.w3c.dom.Node nodeXML) {
    ComponentXMLAttributes xattribs = new ComponentXMLAttributes(nodeXML);

    try {
    return new SimpleCopy(xattribs.getString(Node.XML_ID_ATTRIBUTE));
    } catch (Exception ex) {
    System.err.println(ex.getMessage());
    return null;
    }
    }
    }




    here is my graph

    <?xml version="1.0" encoding="UTF-8"?>
    <Graph name="Testing split">

    <Global>
    <Metadata id="salesMetadata" fileURL="E:/CloverETL/Examples/metadata/sales.txt"/>
    <Metadata id="salesOutMetadata" fileURL="E:/CloverETL/Examples/metadata/salesOutMeta.txt"/>
    <Metadata id="dateMetadata" fileURL="E:/CloverETL/Examples/metadata/date.txt"/>
    <DBConnection id="InpDB" dbConfig="E:/CloverETL/Examples/Postgress.cfg"/>
    <DBConnection id="outputDB" dbConfig="E:/CloverETL/Examples/Postgress1.cfg"/>
    </Global>
    <Phase number="0">
    <Node id="INPUT" type="DB_INPUT_TABLE" dbConnection="InpDB" sqlQuery="select customer_id,"date",prefix || ' ' || doc_no as doc_no,version,pm.person_first_name || ' ' || pm.person_last_name as sales_representative,item_id,qty,price,discount1,discount2 from sv_master as sv,employee_master as em,person_master as pm,sv_detail as sd where sv.id <> 0 and sv.current_version and sv.sales_representativ=em.id and em.person_master_id=pm.id and sd.sv_id=sv.id"/>
    <Node id="SPLIT" type="SPLIT_RECORD" />
    <Node id="OUTDATE" type="DB_OUTPUT_TABLE" dbConnection="outputDB" dbTable="mydate"/>
    <Node id="OUTSALES" type="DB_OUTPUT_TABLE" dbConnection="outputDB" dbTable="sales"/>
    <Edge id="INEDGE" fromNode="INPUT:0" toNode="SPLIT:0" metadata="salesMetadata"/>
    <Edge id="MIDEDGE" fromNode="SPLIT:0" toNode="OUTDATE:0" metadata="dateMetadata"/>
    <Edge id="OUTEDGE1" fromNode="SPLIT:1" toNode="OUTSALES:0" metadata="salesOutMetadata"/>
    </Phase>
    </Graph>



    [sales.txt]

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- Automatically generated from database null -->
    <Record name="sales" type="delimited">
    <Field name="customer_id" type="long" delimiter="," format="#"/>
    <Field name="date" type="date" delimiter="," format="yyyy-MM-dd" />
    <Field name="doc_no" type="string" delimiter="," />
    <Field name="version" type="integer" delimiter="," />
    <Field name="sales_representative" type="string" delimiter="," />
    <Field name="item_id" type="long" delimiter="," />
    <Field name="qty" type="long" delimiter="," />
    <Field name="price" type="numeric" delimiter="," />
    <Field name="discount1" type="numeric" delimiter="," />
    <Field name="discount2" type="numeric" delimiter="," />
    </Record>



    [salesOutMeta.txt]
    <?xml version="1.0" encoding="UTF-8" ?>
    <!-- Automatically generated from database jdbc:postgresql://192.168.0.3/olap -->
    <Record name="" type="delimited">
    <Field name="id" type="integer" delimiter="," />
    <Field name="customer_id" type="integer" delimiter="," />
    <Field name="time_id" type="integer" delimiter="," />
    <Field name="doc_no" type="string" delimiter="," />
    <Field name="version" type="integer" delimiter="," />
    <Field name="sales_person" type="string" delimiter="," />
    <Field name="product_id" type="integer" delimiter="," />
    <Field name="unit" type="string" delimiter="," />
    <Field name="unit_sale" type="numeric" delimiter="," />
    <Field name="unit_price" type="numeric" delimiter="," />
    <Field name="discount1" type="numeric" delimiter="," />
    <Field name="discount2" type="numeric" delimiter="," />
    <Field name="warehouse_id" type="integer" delimiter="\n" />
    </Record>



    [date.txt]
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- Automatically generated from database null -->
    <Record name="date" type="delimited">
    <Field name="date" type="date" delimiter="," format="dd/MM/yyyy" />
    </Record>
  • Avatar
    oldforum
    0
    Comment actions Permalink
    hello Martin

    after modifying fromXML my Split record work.

    but its can not copy bigint type data instead its return null.

    now i implement grneral component. then i send it to you in your mail.

    please explain me whats going wrong with bigint data
  • Avatar
    oldforum
    0
    Comment actions Permalink
    I think that you mail me this data (zatopek.martin@seznam.cz). Post like this make this forum little bit messy.

    I dont understand your fromXML() method. This method is used by engine for creating your component. You must return instance of SplitRecord node. Your code is never use because you make only SimpleCopy Node.

    Martin
  • Avatar
    oldforum
    0
    Comment actions Permalink
    Hello,
    hard to say what's wrong. Sorry i really dont know, but you can try post me graph, your component and data and i find some time to debug your code. It's maximum what can i do.
    Martin

Please sign in to leave a comment.