Here is a bit of 3.1 specifics on top of the suggestion below. In 3.1 you'd
configure a custom Module with providers/factories for everything you need.
Inside the module you'll need to bind DataSourceFactory and
Provider<DataDomain>. Then you create a stack with the custom module:
ServerRuntime runtime = new ServerRuntime("", new MyModule());
And then code your implementations of DataSourceFactory and
Provider<DataDomain>. Inside the later, you'd create a DataDomain with attached
DataMaps and DataNodes.
Andrus
On Nov 14, 2011, at 12:44 PM, Tercio Gaudencio Filho wrote:
> Hi Alexey,
>
> I'm trying exactly that.
>
> final DbAttribute attr = new DbAttribute("id");
> attr.setType(Types.INTEGER);
> attr.setPrimaryKey(true);
> attr.setMandatory(true);
>
> final DbEntity entity = new DbEntity("TEST");
> entity.addAttribute(attr);
>
> final DataMap map = new DataMap("AppMap");
> map.addDbEntity(entity);
>
> final DataDomain domain = new DataDomain("App");
> domain.addMap(map);
>
> final DataNode node = new DataNode("AppNode");
> node.setDataSourceLocation("dbcp.properties");
> node.setDataSourceFactory(org.apache.cayenne.conf.DBCPDataSourceFactory.class.getName());
> node.setSchemaUpdateStrategy(new
> org.apache.cayenne.access.dbsync.SkipSchemaUpdateStrategy());
> node.addDataMap(map);
> node.setDataSource(new
> org.apache.cayenne.conf.DBCPDataSourceFactory().getDataSource(node.getDataSourceLocation()));
> node.setAdapter(new MySQLAdapter());
> domain.addNode(node);
>
> final Configuration c = Configuration.getSharedConfiguration();
> c.addDomain(domain);
>
> final ObjectContext context = DataContext.createDataContext("App");
>
> In this implementation I need to figure out how to "inject" the DataSource
> into the Node in a more "clean" way, in this example it is, at least, weird.
>
> As the line Configuration.getSharedConfiguration() will instantiate a
> DefaultConfiguration class, this implementation will look for a cayenne.xml,
> so you need this file "empty":
> <?xml version="1.0" encoding="utf-8"?>
> <domains project-version="3.0.0.1">
> </domains>
>
>
> My next step is to implement a DynamicConfiguration to allow a initialization
> without any configuration file.
>
> Currently my example is not ideal, but it's a kick-off.
>
> By the way, I'm using DBCP as connection pool.
>
> Regards,
>
> --
> Att.
>
> Tercio Gaudencio Filho
>
>
> On Monday, November 14, 2011 at 7:28 AM, Alexey Shakov wrote:
>
>> Hi *,
>>
>> I would like to know, how to configure Cayenne and map generic object
>> programmatically from scratch without using of XML?
>>
>> Most likely, I need to define a DataSource (Factory), create DataDomain,
>> some DataMaps, containing my generic Entities, etc.
>>
>> Are there some examples, how to do this using last Cayenne milestone
>> release?
>>
>> Many thanks in advance for any help!
>>
>> Greetings,
>>
>> Alexey
>