You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cayenne.apache.org by Mirko Teran Ravnikar <mi...@gmail.com> on 2009/09/07 09:10:51 UTC

Cloning DataDomain

Hello.

I've been looking trough similar problems here but can't seem to find
a solution that would work so I'm posting a new question.

My situation is like this. I have an application that connects to
multiple databases that are selected at runtime. All of the databases
have same structure. In Cayenne modeller I have created a single
DataNode and DataMap with this structure. Now at runtime I would like
to clone that whole datadomain (in future it will probably have more
then 1 map/node).

I've used the code posted on website about copying datadomains and
modified to fit my needs. But I keep having same problem. After
creating 2 or more domains all of them use the same(last) database
connection. I'm guessing there is something I'm missing when cloning
datadomain, but I can't find out what it is.

Here is the code I'm using.

  public static void copyDataDomain(String domainName)
  {
    LOGGER.debug("Copy data domain: " + domainName);

    // get source DataDomain
    DataDomain sourceDataDomain =
Configuration.getSharedConfiguration().getDomain("ArrowDomain");
    LOGGER.debug("Source DataDomain: " + sourceDataDomain);

    DataDomain destDataDomain = new DataDomain(domainName,
sourceDataDomain.getProperties());
    Configuration.getSharedConfiguration().addDomain(destDataDomain);
    LOGGER.debug("Destination DataDomain: " + destDataDomain);

    // copy data maps
    LOGGER.debug("Copying data maps...");
    for(DataMap map : sourceDataDomain.getDataMaps())
    {
      LOGGER.debug("Copying data map: " + map.getName());
      destDataDomain.addMap(map);
    }

    // copy data nodes
    LOGGER.debug("Copying data nodes...");
    for(DataNode node : sourceDataDomain.getDataNodes())
    {
      LOGGER.debug("Copying data node: " + node.getName());
      destDataDomain.addNode(node);
    }

    LOGGER.debug("New data domain created: " + domainName);
  }

I've also tried adding EntityResolver as it was suggested in one of
the thread, and a couple of other tips I found, but without any luck.

Kind regards,

--Mirko R. Teran
Sent from Ljubljana, Slovenia

Re: Cloning DataDomain

Posted by Michael Gentry <mg...@masslight.net>.
Hi Mirko, it looks to me like you are copying the DataNode, which
means they'll all have the same DB connection.

mrg


On Mon, Sep 7, 2009 at 3:10 AM, Mirko Teran
Ravnikar<mi...@gmail.com> wrote:
> Hello.
>
> I've been looking trough similar problems here but can't seem to find
> a solution that would work so I'm posting a new question.
>
> My situation is like this. I have an application that connects to
> multiple databases that are selected at runtime. All of the databases
> have same structure. In Cayenne modeller I have created a single
> DataNode and DataMap with this structure. Now at runtime I would like
> to clone that whole datadomain (in future it will probably have more
> then 1 map/node).
>
> I've used the code posted on website about copying datadomains and
> modified to fit my needs. But I keep having same problem. After
> creating 2 or more domains all of them use the same(last) database
> connection. I'm guessing there is something I'm missing when cloning
> datadomain, but I can't find out what it is.
>
> Here is the code I'm using.
>
>   public static void copyDataDomain(String domainName)
>   {
>     LOGGER.debug("Copy data domain: " + domainName);
>
>     // get source DataDomain
>     DataDomain sourceDataDomain =
> Configuration.getSharedConfiguration().getDomain("ArrowDomain");
>     LOGGER.debug("Source DataDomain: " + sourceDataDomain);
>
>     DataDomain destDataDomain = new DataDomain(domainName,
> sourceDataDomain.getProperties());
>     Configuration.getSharedConfiguration().addDomain(destDataDomain);
>     LOGGER.debug("Destination DataDomain: " + destDataDomain);
>
>     // copy data maps
>     LOGGER.debug("Copying data maps...");
>     for(DataMap map : sourceDataDomain.getDataMaps())
>     {
>       LOGGER.debug("Copying data map: " + map.getName());
>       destDataDomain.addMap(map);
>     }
>
>     // copy data nodes
>     LOGGER.debug("Copying data nodes...");
>     for(DataNode node : sourceDataDomain.getDataNodes())
>     {
>       LOGGER.debug("Copying data node: " + node.getName());
>       destDataDomain.addNode(node);
>     }
>
>     LOGGER.debug("New data domain created: " + domainName);
>   }
>
> I've also tried adding EntityResolver as it was suggested in one of
> the thread, and a couple of other tips I found, but without any luck.
>
> Kind regards,
>
> --Mirko R. Teran
> Sent from Ljubljana, Slovenia
>