Thanks for your answer,
I don't plan to use JNDI DataSource because is the same to have the
passwords in Cayenne's files that in Tomcat's files. What I want is to
keep our client away the database but being able to access the server's
file system.
I will consider to migrate our applications to 1.2, now we are with 1.1.
Do you consider 1.2M11 suitable for production? If you don't, when is an
stable 1.2 release expected?
Finally, coming back to configuration/initialization, I'm going to
remake my question: I want to access two databases from the same
DataContext, when I keep all connection information in the
Node.driver.xml files I can do it, so it is possible, however if I want
to set the node parameters by code, how should I initialize the
Configuration instance?
Regards,
Oscar
Andrus Adamchik wrote:
> Hi,
>
> Can't comment on your specific initialization method, but if your goal
> is to get rid of passwords in Cayenne XML files I suggest to configure
> Cayenne to use DataSource obtained via JNDI. In CayenneModeler change
> DataSource Factory for the DataNodes to JNDIDataSourceFactory
> (available from the dropdown). The check the Tomcat docs for your
> specific version on how to configure a JNDI DataSource on Tomcat end
> (IIRC relevant part of server.xml configuration format has changed
> between Tomcat 5.0 and 5.5). Here is a link to the older Tomcat config:
>
> http://objectstyle.org/cayenne/userguide/deploy/jndi.html
>
>
>
>> But when I restart Tomcat (or just the application) the session that
>> is recovered is not able to establish the database connection because
>> the configuration is based on the xml file (without username and
>> password) although the initialization was executed by listener. My
>> second question is whether is it possible to achieve session
>> persistence for data contexts?
>
> Deserialized DataContext attaches itself to the existing Cayenne
> stack, regardless of how such stack is configured. So it is totally
> possible to restore the sessions after the server restart. There can
> be some timing issues (things happening in the wrong order). But
> before we dig into that, I suggest trying JNDI configuration above and
> the latest version of Cayenne (as there were deserialization bugs in
> the past that are fixed in latest 1.2 milestones).
>
> Andrus
>
>
> On Mar 6, 2006, at 12:47 PM, Oscar Maire-Richard wrote:
>> Hi all,
>> I am having some problems with cayenne configuration and session
>> persistence arised when I have moved login and password from the node
>> file to the initialization java code. I will try to explain my
>> environment.
>>
>> - I have two databases (data and users) inside a unique domain. The
>> users data is optional for the application, it is just to manage the
>> realm, but the authentication/authorization is delegated to Tomcat.
>> My cayenne.xml is like this:
>>
>> <?xml version="1.0" encoding="utf-8"?>
>> <domains project-version="1.1">
>> <domain name="MyDomain">
>> <property name="cayenne.DataRowStore.snapshot.size" value="1000"/>
>>
>> <map name="MyDataMap" location="MyDataMap.map.xml"/>
>> <map name="MyUsersMap" location="MyUsersMap.map.xml"/>
>>
>> <node name="MyDataNode"
>> datasource="MyDataNode.driver.xml"
>> adapter="org.objectstyle.cayenne.dba.mysql.MySQLAdapter"
>> factory="org.objectstyle.cayenne.conf.DriverDataSourceFactory">
>> <map-ref name="MyDataMap"/>
>> </node>
>> <node name="MyUsersNode"
>> datasource="MyUsersNode.driver.xml"
>> adapter="org.objectstyle.cayenne.dba.mysql.MySQLAdapter"
>> factory="org.objectstyle.cayenne.conf.DriverDataSourceFactory">
>> <map-ref name="MyUsersMap"/>
>> </node>
>> </domain>
>> </domains>
>>
>>
>> - I initialize the configuration in a context listener extending
>> WebApplicationListener
>> When the logins/passwords were declared in
>> "MyDataNode.driver.xml"/"MyUsersNode.driver.xml" I initialized with
>> the following code in the listener:
>> public static void init(ServletContext srvCtx) {
>> BasicServletConfiguration.initializeConfiguration(srvCtx);
>> DataDomain domain =
>> Configuration.getSharedConfiguration().getDomain();
>> DataNode node = domain.getNode("MyDataNode");
>> JdbcAdapter adapter = (JdbcAdapter) node.getAdapter();
>> adapter.setSupportsFkConstraints(true);
>> node.setAdapter(adapter);
>> }
>>
>> Every thing worked right.
>> Note that I was not doing any thing whith "MyUsersNode", I do not
>> know why, but it worked.
>>
>> - Now, I've removed logins/passwords from xml files, and changed the
>> connections pool min from "1" to "0". Then my code to initialize is
>> as follows:
>> public static void init(ServletContext srvCtx) {
>> BasicServletConfiguration.initializeConfiguration(srvCtx);
>> DataDomain domain =
>> Configuration.getSharedConfiguration().getDomain();
>> DataNode node = domain.getNode("MyDataNode");
>> try {
>> int maxConn = ((PoolManager)
>> node.getDataSource()).getMaxConnections();
>> PoolManager dataSource = new PoolManager(
>> "com.mysql.jdbc.Driver",
>> "jdbc:mysql://localhost:3306/myDataDB",
>> 1, maxConn,
>> "user",
>> "password");
>> node.setDataSource(dataSource);
>> } catch (SQLException e) {
>> log.error("Cannot create DataSource.", e);
>> }
>> JdbcAdapter adapter = (JdbcAdapter) node.getAdapter();
>> adapter.setSupportsFkConstraints(true);
>> node.setAdapter(adapter);
>>
>> log.info("Users database connection initialization");
>> DataNode usersNode = domain.getNode("MyUsersNode");
>> try {
>> int maxConn =
>> ((PoolManager)usersNode.getDataSource()).getMaxConnections();
>> PoolManager usersDataSource = new PoolManager(
>> "com.mysql.jdbc.Driver",
>> "jdbc:mysql://localhost:3306/myUsersDB",
>> 1, maxConn,
>> "user",
>> "password");
>> node.setDataSource(usersDataSource);
>> } catch (SQLException e) {
>> log.error("Cannot create DataSource.", e);
>> }
>> JdbcAdapter usersAdapter = (JdbcAdapter) usersNode.getAdapter();
>> usersAdapter.setSupportsFkConstraints(true);
>> usersNode.setAdapter(usersAdapter);
>> }
>> }
>>
>> Now, Cayenne look for all my references to DataObjects in MyUsersDB,
>> thus I get the exception:
>>
>> java.sql.SQLException: General error message from server: "Table
>> 'myusersdb.foo' doesn't exist"
>>
>> Here my first question:
>> How should I configure and initialize both databases?
>>
>> - If I remove all staff related to MyUsersDB the application works
>> right. But when I restart Tomcat (or just the application) the
>> session that is recovered is not able to establish the database
>> connection because the configuration is based on the xml file
>> (without username and password) although the initialization was
>> executed by listener. My second question is whether is it possible to
>> achieve session persistence for data contexts?
>>
>> Thanks in advance,
>>
>> Oscar Maire-Richard
>> SIDSA
>>
>>
>
This archive was generated by hypermail 2.0.0 : Tue Mar 07 2006 - 06:27:04 EST