Re: Changing database schemas at runtime

From: Lawrence Gerstley (lawger..mail.com)
Date: Tue Jan 06 2009 - 15:37:38 EST

  • Next message: Marcin Skladaniec: "Single table inheritance and field hiding"

    This worked great. Thanks for the tip.

         public boolean setDataMapSchema(DataMap dataMap, String schema) {
             try {
                 for (DbEntity dbEntity : dataMap.getDbEntities()) {
                     dbEntity.setSchema(schema);
                 }
             } catch (Exception e) {
                 System.out.println(e.toString());
                 return false;
             }
             return true;
         }

    Lawrence

    On Jan 5, 2009, at 11:11 PM, Andrus Adamchik wrote:

    > Hi Lawrence,
    >
    > Yeah, the "default schema" is ignored in runtime, and only per
    > DbEntity schema is consulted. Looking back, it would've been better
    > to use the default if DbEntity schema is not set, and we may change
    > the behavior at some point, but for now "default schema" is only
    > used by the Modeler.
    >
    > So to change schema you would need to iterate through all DbEntities
    > and set it per entity.
    >
    > Andrus
    >
    > On Jan 6, 2009, at 3:57 AM, Lawrence Gerstley wrote:
    >
    >> Hello,
    >>
    >> I've been using Cayenne and allowing for changing backends at
    >> runtime--representing the same schema in MySQL, Oracle, Apache
    >> Derby, and have had success changing the backend with:
    >>
    >> DataSource dataSource = new PoolManager(
    >> jdbcDriverDetails.getDriverClass(),
    >> myURL,
    >> 1,
    >> 5,
    >> myUser,
    >> myPassword);
    >> Configuration config =
    >> Configuration.getSharedConfiguration();
    >> DataDomain domain = config.getDomain();
    >> DataNode node = domain.getNode("MyDomain");
    >> node.setDataSource(dataSource);
    >>
    >> My problem is that I need to also allow a user to select the schema
    >> that the datamap should be applied to. For example, in Oracle, the
    >> same schema design might be in multiple instances (in my example,
    >> KTMI3D, KTMI3M, KTMI3X, etc.). I can change these with the modeler
    >> and have it work, but I need to change it at runtime. I've tried
    >> changing it with:
    >>
    >> dataMap.setDefaultSchema(schema);
    >>
    >> But haven't had much luck changing at runtime. Is there some way to
    >> do this with my approach, or is there a better approach to take if
    >> you want to switch back-ends multiple time at runtime?
    >>
    >> Thanks for reading,
    >>
    >> Lawrence
    >>
    >>
    >



    This archive was generated by hypermail 2.0.0 : Tue Jan 06 2009 - 15:38:18 EST