Re: Initializing DataSourceInfo

From: Mike Kienenberger (mkienen..laska.net)
Date: Thu Feb 17 2005 - 10:02:15 EST

  • Next message: Borut Bolčin: "Duplicate entry"

    =?UTF-8?B?Qm9ydXQgQm9sxI1pbmE=?= <cayenn..mail.si> wrote:
    > I am having trouble initializing DataSourceInfo programaticaly. At
    > application startup I want to drop tables, create them and then do so
    > the usual staff. How can I obtain an initialized DataSourceInfo from
    > DomainNode driver file?

    You can always look at the source for examples. :) There's a variety of
    ways to do it, depending how much behavior you want to hardcode in, and how
    much pre-initialization you've already got.

    And I'd stick with DataSource rather than DataSourceInfo. DataSourceInfo is
    an internal Cayenne class. DataSource is javax.sql.DataSource.
    runGenerator(DataSourceInfo dsi) simply calls runGenerator(DataSource ds)
    after creating a DataSource.

    org.objectstyle.cayenne.conf.RuntimeLoadDelegate.java:

                            // ie, factory = "DriverDataSourceFactory";
                DataSourceFactory localFactory = (DataSourceFactory)
    Class.forName(factory).newInstance();
                localFactory.initializeWithParentConfiguration(config);
                DataSource ds = localFactory.getDataSource(dataSourceURL);

    Or, you could bypass all of that if you want to work with a specific
    DataSourceFactory (like DriverDataSourceFactory).

            FileConfiguration conf = new FileConfiguration("cayenne.xml");
            conf.addFilesystemPath(new File("yourConfigFileDirectory"));
            Configuration.initializeSharedConfiguration(conf);

                            DriverDataSourceFactory dataSourceFactory = new
    DriverDataSourceFactory();
                dataSourceFactory.initializeWithParentConfiguration(config);
                DataSource dataSource =
    dataSourceFactory.getDataSource("yourDriver.xml");

    Or you could load your project as normal, and just read the information from
    dataNode:

                    ObjEntity objEntity =
    entityResolver.lookupObjEntity(OneOfYourDataObjectClasses.class);
                    DataMap dataMap = objEntity.getDataMap();
                    DataNode dataNode = dataDomain.lookupDataNode(dataMap);
                    DataSource dataSource = dataNode.getDataSource();

    > private DataContext ctxt;
    >
    > this.ctxt = createContext();
    >
    >
    > private void createTables() {
    > try {
    > DbAdapter mySqlDbAdapter = new MySQLAdapter();
    >
    > MapLoader mapLoader = new MapLoader();
    > InputStream is =
    > this.getClass().getClassLoader().getResourceAsStream("MyDataMap.map.xml");
                    
    >
    > DataMap dataMap = mapLoader.loadDataMap(new InputSource(is));
    >
    > DbGenerator mySqlDbGenerator = new DbGenerator(mySqlDbAdapter,
    > dataMap);
    >
    > // instead of this (don't want to be hardcoded)
    > // DataSourceInfo *dataSourceInfo *= new DataSourceInfo();
    > //
    >
    dataSourceInfo.setAdapterClassName("org.objectstyle.cayenne.dba.JdbcAdapter");
    > // dataSourceInfo.setDataSourceUrl(connection);
    > // dataSourceInfo.setJdbcDriver("com.mysql.jdbc.Driver");
    > // dataSourceInfo.setPassword(password);
    > // dataSourceInfo.setUserName(username);
    >
    > // *where do I get already initialized dataSourceInfo need by
    > **mySqlDbGenerator.runGenerator*?
    >
    > logger.info("DSI getDataSourceUrl(): " +
    > dataSourceInfo.getDataSourceUrl());
    > logger.info("DSI getJdbcDriver() : " +
    > dataSourceInfo.getJdbcDriver());
    > logger.info("DSI getPassword() : " +
    > dataSourceInfo.getPassword());
    > logger.info("DSI getUserName() : " +
    > dataSourceInfo.getUserName());
    >
    > mySqlDbGenerator.setShouldCreatePKSupport(false);
    > mySqlDbGenerator.setShouldDropTables(true);
    > mySqlDbGenerator.runGenerator(*dataSourceInfo*);
    > } catch (DataMapException e) {
    > logger.fatal("Error in NewsDataMap.", e);
    > } catch (Exception e) {
    > logger.fatal("Error running generator.", e);
    > }
    > }



    This archive was generated by hypermail 2.0.0 : Thu Feb 17 2005 - 10:01:26 EST