# Wie manage ich unter Spring mehrere Datenbankverbindung mit Hibernate



## navino (29. Nov 2010)

Hallo zusammen,

ich suche nach einer Möglichkeit wie ich im Spring und Hibernate verschiedene Datenbanken verwalten kann.
Unterschiedliche User müssen sich mit unterschiedlichen Datenbanken verbinden.

Hat da jemand ne Idee, wie man das machen kann?
Mehrere Service-Klassen/Dao-Klassen ????

Gruß
navino


----------



## maki (29. Nov 2010)

> Mehrere Service-Klassen/Dao-Klassen ????


Ja, zumindest was die DAOs betrifft.


----------



## tfa (29. Nov 2010)

maki hat gesagt.:


> Ja, zumindest was die DAOs betrifft.



Kommt drauf an. Sind denn verschiedene Objekte in den unterschiedlichen Datenbanken?
Es dürfte auf jeden Fall verschiedene DataSources geben. Wie die dann mit den DAOs und
Services verknüpft werden, ist eine Frage der Konfiguration.


----------



## navino (1. Dez 2010)

Hallo,

die Klassen, Objekte und Tabellen sind identisch, oder werden identisch gemacht.
Wenn man Spring, Hibernate und Transaktionen mit Spring konfiguriert und das DAO-Pattern
benutzt hat man ja etwas folgendes für eine Datenbank:

eine Datasource
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
		<property name="driverClass"     value="${jdbc.driverClassName}" />
		<property name="jdbcUrl"         value="${jdbc.url}" />
		<property name="user"            value="${jdbc.username}" />
		<property name="password"        value="${jdbc.password}" />
</bean>

eine Hibernate SessionFactory die eine datasource injeziert bekommt
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />

		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">${hibernate.dialect}</prop>
				<prop key="hibernate.connection.autocommit">false</prop>
				<prop key="hibernate.max_fetch_depth">2</prop>
				<prop key="hibernate.show_sql">false</prop>
				<prop key="hibernate.format_sql">false</prop>
				<prop key="c3p0.min_size">10</prop>				
				<prop key="c3p0.max_size">100</prop>
				<prop key="c3p0.max_statements">100</prop>
                                <prop key="c3p0.acquire_increment">2</prop>
                                <prop key="c3p0.idle_test_period">300</prop>
                	</props>
		</property>
       </bean>

einen Transaktionsmanager der eine sessionFactory injeziert bekommt
	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>

dann gibt es ein Dao die eine sessionFactory injeziert bekommen

<bean id="myDAO" class="MyDaoImpl">
		<property name="sessionFactory"><ref bean="sessionFactory"/></property>
</bean>

und zum Schluss gibt es die ManagerKlassen die ein Dao injeziert bekommen

<bean id="myManager" class="MyManagerImpl">
	<property name="myDao"><ref bean="myDao"/></property>
</bean>


Und das ganze soll ich dann so oft aufbauen, wie ich Datenbanken habe....?
Und wie bekomme ich das hin, das ich je nach User den richtigen Manager benutze, irgendwo benötige ich ja eine Weiche....

Gruß
navino


----------



## navino (8. Dez 2010)

Hallo,

ist keiner hier der eine Idee hat ?


----------



## tfa (8. Dez 2010)

> Und das ganze soll ich dann so oft aufbauen, wie ich Datenbanken habe....?


Sieht wohl so aus. Wieviele hast du denn? Hoffentlich nicht mehr als 2 oder 3.



> Und wie bekomme ich das hin, das ich je nach User den richtigen Manager benutze, irgendwo benötige ich ja eine Weiche....


Ja, das musst du dann wohl programmieren...
Hat denn jeder Benutzer seine eigene Datenbank? Oder wie bildest du das aufeinander ab.


----------



## navino (14. Dez 2010)

Hallo,



tfa hat gesagt.:


> Sieht wohl so aus. Wieviele hast du denn? Hoffentlich nicht mehr als 2 oder 3.
> Ja leider, ich habe 4 Datenbanken.
> 
> 
> ...



Nein zum Glück nicht!

Gruß
navino


----------

