Uploaded image for project: 'Tuscany'
  1. Tuscany
  2. TUSCANY-1807

Auto Gen keys not getting updated in generated pojos

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • Java-DAS-beta1, Java-DAS-Next
    • Java-DAS-Next
    • Java DAS RDB
    • None
    • DB2 UDB ISeries V5R4

    Description

      Using generated key column as defined in config. If i use a dynamic data object that is not associated with any SDO type, then the auto generated key correctly gets set on the data object after applyChanges. However, if I specify a type in the config xml with dataObjectModel being set, and with type and property being set, the associated field in my generated pojo does not get updated. I have confirmed this in the latest release as well as most recent SNAPSHOT code.

      Below are code examples:

      --The below config works----
      <Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

      <!-Uncomment below for db2 test->
      <ConnectionInfo>
      <ConnectionProperties
      driverClass="com.ibm.as400.access.AS400JDBCDriver"
      databaseURL="jdbc:as400://-------------"
      loginTimeout="600000"
      userName="dunk"
      password="***"/>
      </ConnectionInfo>

      <Command SQL="select * from duncann.t_test" kind="Select" name ="AllAutos">
      <ResultDescriptor columnName="ID" tableName="t_test" columnType="commonj.sdo.Int"/>
      <ResultDescriptor columnName="NAME" tableName="t_test" columnType="commonj.sdo.String"/>
      </Command>

      <Table tableName="t_test" schemaName="duncann">
      <Column columnName="ID" primaryKey="true" generated="true" />
      <Column columnName="NAME" />
      </Table>
      </Config>

      --This config does not work in the sense that auto generated key does not get set after applyChanges —
      <Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      dataObjectModel="autotest.xsd" >

      <!-Uncomment below for db2 test->
      <ConnectionInfo>
      <ConnectionProperties
      driverClass="com.ibm.as400.access.AS400JDBCDriver"
      databaseURL="jdbc:as400://-----"
      loginTimeout="600000"
      userName="dunk"
      password="***"/>
      </ConnectionInfo>

      <Command name="AllAutos" SQL="select * from duncann.t_test" kind="Select">
      <ResultDescriptor columnName="ID" tableName="t_test" columnType="commonj.sdo.Int"/>
      <ResultDescriptor columnName="NAME" tableName="t_test" columnType="commonj.sdo.String"/>
      </Command>

      <Table tableName="t_test" typeName="AutoType" schemaName="duncann">
      <Column columnName="ID" primaryKey="true" generated="true" propertyName="id"/>
      <Column columnName="NAME" propertyName="name"/>
      </Table>
      </Config>

      ----Below is code snippet that shows this working with dynamic data object —
      HelperContext context = HelperProvider.getDefaultContext();
      String fileName = "C:\\Rad7\\sdo2\\TuscanyDASTest\\configs
      TestConfig.xml";
      Config config = ConfigUtil.loadConfig(new FileInputStream(fileName));

      DAS das = DAS.FACTORY.createDAS(config);

      DataObject root = das.getCommand("AllAutos").executeQuery();

      DataObject dao = (DataObject) root.createDataObject("t_test");
      dao.set("NAME","HjkjO");

      das.applyChanges(root);

      System.out.println(dao.get("ID"));

      --------System outputs: 136

      -----------Below snippet shows what happens when using pojo to represent data object
      HelperContext context = HelperProvider.getDefaultContext();
      String fileName = "C:\\Rad7\\sdo2\\TuscanyDASTest\\configs
      TestConfig.xml";

      DASTestNick.loadTypesFromXMLSchemaFile(context,"C:/Rad7/sdo2/TuscanyDASTest/schemas/autotest.xsd");

      Config config = ConfigUtil.loadConfig(new FileInputStream(fileName));

      //now let's get an AutoTest (that refers to a table with auto increment)
      GeneratedFactoryImpl gfi = (GeneratedFactoryImpl) GeneratedFactoryImpl.INSTANCE;
      GeneratedFactoryImpl.INSTANCE.register(context);

      DAS das = DAS.FACTORY.createDAS(config);

      DataObject root = das.getCommand("AllAutos").executeQuery();

      AutoTypeImpl at = (AutoTypeImpl) root.createDataObject("AutoType");
      at.setName("sdfs");

      das.applyChanges(root);

      System.out.println(at.getId());

      System Outputs: 0

      The database gets correctly updated in both instances.
      Here is my autotest.xsd for completeness:

      <?xml version="1.0" encoding="UTF-8"?>
      <xsd:schema xmlns:this="autotest.xsd" targetNamespace="autotest.xsd" xmlns:sdo="commonj.sdo" xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
      <xsd:element name="AutoType">
      <xsd:complexType>
      <xsd:sequence>
      <xsd:element name="id" nillable="false" type="xsd:int"/>
      <xsd:element name="name" type="xsd:string"/>
      </xsd:sequence>
      </xsd:complexType>
      </xsd:element>
      </xsd:schema>

      Attachments

        1. 1807.patch
          7 kB
          Amita Vadhavkar

        Activity

          People

            amitav Amita Vadhavkar
            nick007vh Nick Duncan
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: