I still need to know where to call something like this at run time so it kicks in for all the tables I use.
I can get an adapter and tell it what PkGenerator to use on a case by case basis (as the example in my question shows)
But how do I put it in there just once. I don't want to modify everywhere I get a DataContext.
Is there some init hook?

Roger

Borut Bolčina wrote:
Hello Roger,

study the method bellow which creates tables on two databases based on info
in datamaps created by modeler.

hope it helps,
Borut

  /**
   * Creates tables. This method is capable of creating tables on multiple
   * database servers, even mixed vendors.
   */
  @SuppressWarnings("unchecked")
  private void createTables() {
     MySQLAdapter mysqlDbAdapter = new MySQLAdapter();

     DbGenerator generator = null;

     // see http://issues.apache.org/cayenne/browse/CAY-527
     //PropertyUtils.setProperty(mysqlDbAdapter, "pkGenerator", new
MyJdbcPkGenerator());

     List<DataMap> maps = (List) dataContext.getEntityResolver
().getDataMaps();
     for (DataMap dataMap : maps) {
        DataNode dataNode = dataContext.getParentDataDomain
().lookupDataNode(dataMap);
        DataSource dataSource = dataNode.getDataSource();
        MyJdbcPkGenerator myPkGenerator = null;
        if (dataMap.getName().equals("MyFirstDomainMap")) {
           mysqlDbAdapter.setSupportsFkConstraints(false);
           generator = new DbGenerator(mysqlDbAdapter, dataMap);

           generator.setShouldCreatePKSupport(false);
           generator.setShouldDropTables(false);
        } else if (dataMap.getName().equals("MySecondDomainMap")) {
           mysqlDbAdapter.setSupportsFkConstraints(true);
           myPkGenerator = new MyJdbcPkGenerator();
           myPkGenerator.setDataNode(dataNode);
           mysqlDbAdapter.setPkGenerator(myPkGenerator);
           generator = new DbGenerator(mysqlDbAdapter, dataMap);

           generator.setShouldCreatePKSupport(true);
           generator.setShouldCreateFKConstraints(true);
           generator.setShouldDropTables(false);
        }
        try {
           generator.runGenerator(dataSource);
        } catch (Exception e) {
           logger.error("Error running database generator for " +
dataMap.getName(), e);
        }
     }
  }


2006/10/26, Roger Parkinson <[EMAIL PROTECTED]>:

 I have extended JdbcPkGenerator to generate a custom primary key and it
works fine in unit testing.
How do I tell Cayenne to use my class instead of standard
JdbcPkGenerator?

Searching the messages reveals I should do something like:

DbAdapter adapter = dataNode.getAdapter();
PropertyUtils.setProperty(adapter,"pkGenerator",new MyJdbcPkGenerator());

But I don't know where to actually put this code so that it will use my
generator everywhere.
Thanks
--
------------------------------
Roger Parkinson
+64 21 508 792




--

Roger Parkinson
+64 21 508 792

Reply via email to