[ 
https://issues.apache.org/jira/browse/TUSCANY-1807?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Amita Vadhavkar updated TUSCANY-1807:
-------------------------------------

    Attachment: 1807.patch

In ChangeSummarizer.setMapping() the mapping of table/generated pk is created.
so far it was considering only column name, table name. In case of static DO, 
when the data model
specifies a different property name, type name than column name, table name, it 
was not getting
considered. As a fix, in this place, if SDO type, property names are set, they 
are used for
hashmap, else table, column names are used. with this both dynamic and static 
DOs with generated
keys work correct.

Along with the fix added 2 test cases - testCreateAutoGenKeyDynamic() and 
testCreateAutoGenKeyStatic()
into CompanyTests.java


> Auto Gen keys not getting updated in generated pojos
> ----------------------------------------------------
>
>                 Key: TUSCANY-1807
>                 URL: https://issues.apache.org/jira/browse/TUSCANY-1807
>             Project: Tuscany
>          Issue Type: Bug
>          Components: Java DAS RDB
>    Affects Versions: Java-DAS-beta1, Java-DAS-Next
>         Environment: DB2 UDB ISeries V5R4
>            Reporter: Nick Duncan
>            Assignee: Amita Vadhavkar
>         Attachments: 1807.patch
>
>
> 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>

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to