It looks like you're using tapestry-hibernate as well as tapestry-spring.
 I've done a bunch of 2+ database stuff using tapestry-spring + hibernate,
and I've done single-db stuff using tapestry-hibernate, but I've never mixed
hibernate configuration methods.

Get rid of tapestry-hibernate.

Your basic hibernate setup in Spring is fine.  Do the second the same way.
You will need to explicitly wire in your SessionFactories, rather than rely
on auto-wiring.  A template helps out (sample to follow) .
You will not be able to @Inject your SessionFactories directly into Tapestry
pages or services (duplicate service error).

Here's a sample explicit setup (for one of multiple connections):

<bean id="hmsqlSessionFactory"

class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"

autowire-candidate="false">


 <property name="configLocation">

<value>classpath:hibernate-hmsql.cfg.xml</value>

</property>

<property name="configurationClass">

<value>org.hibernate.cfg.AnnotationConfiguration

</value>

</property>

<property name="hibernateProperties">

<ref local="hibernateHmsqlProperties" />

</property>

</bean>

 <bean id="hmsqlTransactionManager"

class="org.springframework.orm.hibernate3.HibernateTransactionManager"
autowire-candidate="false">

<property name="sessionFactory">

<ref local="hmsqlSessionFactory" />

</property>

</bean>


 <bean id="hmsqlTxProxyTemplate" abstract="true"

class=
"org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

<property name="transactionManager">

<ref local="hmsqlTransactionManager" />

</property>

<property name="transactionAttributes">

<props>

... do your standard props here...

</props>

</property>

</bean>

<bean id="hmCustomerDAO" parent="hmsqlTxProxyTemplate">

<property name="target">

<bean class="ca.itstrategic.hmc.hmsql.persistence.hibernate.CustomerDAOImpl"
>

<property name="sessionFactory">

<ref local="hmsqlSessionFactory" />

</property>

</bean>

</property>

</bean>

There might be something simpler... but this works.

On Sat, Dec 4, 2010 at 10:05 AM, <tapes...@digiatlas.org> wrote:

> Hi!
>
> I am wanting to connect to two databases. In the past I've written Tapestry
> apps with just one DB and Spring and Hibernate - no problems. I see that
> (currently) there is no way to connect to multiple DBs with just
> tapestry-hibernate (although I read on the list archive that there is an
> untested patch - not really what I'm looking for).
>
> So I have followed the route recommended which is to use Spring. However,
> I'm running into difficulties. As some of you have apparently done this kind
> of thing then perhaps you might point out where I am going wrong.
>
> Firstly, I followed the instructions I have in the past for getting this
> going with a single DB. Then I began to modify my applicationContext.xml
> file so that I could have two Session Factories. However, I've fallen at the
> first hurdle. While I can change the name of the hibernate.cfg.xml file from
> it's default, if I do I get an error. Tapestry and Spring start as expected,
> and Hibernate starts too - I can see that in the logs and C3P0 is starting
> as expected. But as soon as I try to call:
>
> Query query = sessionFactory.getCurrentSession()
>
>
> it falls flat on its face with:
>
>
> org.hibernate.HibernateException: /hibernate.cfg.xml not found
>        at
> org.hibernate.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:170)
>        at
> org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:1453)
>        at
> org.hibernate.cfg.Configuration.configure(Configuration.java:1475)
>        at
> org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:1017)
>        at
> org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:64)
>        at
> org.hibernate.cfg.Configuration.configure(Configuration.java:1462)
>        at
> org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:1011)
>        at
> org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:64)
>        at
> org.apache.tapestry5.internal.hibernate.DefaultHibernateConfigurer.configure(DefaultHibernateConfigurer.java:38)
>        at
> $HibernateConfigurer_12cb1c6b24c.configure($HibernateConfigurer_12cb1c6b24c.java)
>        at
> org.apache.tapestry5.internal.hibernate.HibernateSessionSourceImpl.(HibernateSessionSourceImpl.java:41)
>        at
> org.apache.tapestry5.hibernate.HibernateCoreModule.buildHibernateSessionSource(HibernateCoreModule.java:123)
>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>        at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>        at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>        at java.lang.reflect.Method.invoke(Method.java:597)
>        at
> org.apache.tapestry5.ioc.internal.ServiceBuilderMethodInvoker.createObject(ServiceBuilderMethodInvoker.java:64)
>
> ...
>
>
> My applicationcontext.xml looks like this:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <beans xmlns="http://www.springframework.org/schema/beans";
>        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>        xsi:schemaLocation="http://www.springframework.org/schema/beans
>        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd";>
>
>        <!-- Hibernate session factory -->
>
>        <bean id="sessionFactory"
>
>  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
>                <property name="configLocation">
>                        <value>classpath:hibernatedpl.cfg.xml</value>
>                </property>
>                <property name="configurationClass">
>
>  <value>org.hibernate.cfg.AnnotationConfiguration</value>
>                </property>
>        </bean>
>
>        <bean id="DPLRepository"
> class="org.digiatlas.dpl.entities.HibernateDPLRepository">
>                <constructor-arg ref="sessionFactory" />
>        </bean>
>
>        <bean id="userRepository"
> class="org.digiatlas.dpl.user.HibernateUserRepository">
>                <constructor-arg ref="sessionFactory" />
>        </bean>
>
> ....
>
>
> and hibernatedpl.cfg.xml is obviously correct because it's connecting to
> the DB.
>
> To me it looks like Tapestry-Hibernate expects the default config name. I
> did try adding:
>
> <context-param>
>        <param-name>tapestry.hibernate.default-configuration</param-name>
>        <param-value>false</param-value>
>    </context-param>
>
> to my web.xml but this now requires me to set up Hibernate configs. I
> shouldn't have to do that as it should all be happening via Spring.
>
> I'm out of ideas and have just spent a day on this and getting no further.
>
> Any help would be greatly appreciated.
>
> My next question will be how to set up the rest of the applicationcontext -
> I imagine I need two transaction managers, but I can't find an example of
> how to connect this up in the XML with the transaction interceptor. Anyway -
> one problem at a time...!
>
> Thank you.
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>


-- 
Jonathan Barker
ITStrategic

Reply via email to