Hello,
Adott a következő:
applicationContext.xml http://pastebin.com/fjjSRdXm
datasource.xml http://pastebin.com/VXY3H9yZ
Szeretném, ha a login képernyőn megadott db-re tudna belépni a user.
A db-k egyformák, egyforma táblák stb.
Erre keresnék valamilyen megoldást.
Van egy CustomHibernateDaoSupport osztály, amiből a Dao-kat származtatom.
package hu.xxx.services;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Component;
@Component
public abstract class CustomHibernateDaoSupport extends HibernateDaoSupport {
@Autowired
public void _SetSessionFactory(SessionFactory factory) {
setSessionFactory(factory);
}
}
De hiába állítom át a hibernate configot menet közben, ettől még a Dao session-je nem fog módosulni.
AnnotationConfiguration ac = new AnnotationConfiguration();
Properties p = new Properties();
p.put( Environment.DIALECT, "org.hibernate.dialect.PostgreSQLDialect" );
p.put( "hibernate.connection.driver_class", "org.postgresql.Driver" );
p.put( "hibernate.connection.url", "jdbc:postgresql://192.168.1.9:5432/db1" );
p.put( "hibernate.connection.username", "user" );
p.put( "hibernate.hbm2ddl.auto","update");
p.put( "hibernate.connection.password", "pass" );
p.put( "hibernate.show_sql", "true" );
ac.setProperties( p );
ac.addAnnotatedClass( HrpUsers.class );
SessionFactory factory = ac.buildSessionFactory();
Szóval, ha lenne valami frappáns megoldás, ne kíméljetek. Köszi!
- 6644 megtekintés
Hozzászólások
subs
- A hozzászóláshoz be kell jelentkezni
Ha előre adott db listából kell választani, akkor definiáld mindet a configban és tegyél eléjük egy AbstractRoutingDataSource-t, amit beállítasz a sessionFactory-nak. A routolás történhet request paraméter alapján.
Ha a user írja be a db adatait, akkor DelegatingDataSource leszármazottal próbálkoznék, ami a getTargetDataSource() metódusában az adott request-hez való DataSource-ot ad vissza (ő hozza létre a request paraméterek alapján pl.: egy SingleConnectionDataSource-t). A sessionFactory-nak a DelegatingDataSource implementációt állítanám be.
- A hozzászóláshoz be kell jelentkezni
Köszönöm a választ. Találtam közben egy
org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter
nevű jószágot is.
Megyek küzdeni aztán beszámolok az eredményről :).
- A hozzászóláshoz be kell jelentkezni
"A sessionFactory-nak a DelegatingDataSource implementációt állítanám be."
Erre tudnál esetleg példát mutatni ? Köszönöm.
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Igen. Majdnem ezt szeretném, csak nem előre definiált adatforrások alapján. A lényeg, h a user megadja a login során, hogy hova akar kapcsolódni. (Több cég, több adatbázis). Az url-t kell változtatnom.
- A hozzászóláshoz be kell jelentkezni
Hi,
Asszem értem a lényeget.
datasource.xml
CustomDelegatingDataSourceImpl
Ebben még sok értelem nincs, csak a működést szerettem volna látni.
A CustomDelegatingDataSourceImpl bean-t aztán ijektálom egy Bo-ba
@Autowired
CustomDelegatingDataSourceImpl datasource;
Ez megoldva:
Szépen létre is jön, de amikor próbálok egy datasource.setUrl(""); hívást, akkor
private hu.xxx.services.CustomDelegatingDataSourceImpl hu.xxx.main.AdminPage.routingDataSource [class=hu.xxx.services.CustomDelegatingDataSourceImpl] <----- field that is not serializable
Olvastam valahol, h alapból singletonként jön létre a bean, gondolom
ez lehet a probléma.
public SingleConnectionDataSource getTargetDataSource() {
String password=targetDataSource.getPassword();
String username=targetDataSource.getUsername();
String newurl="jdbc:postgresql://192.168.1.9:5432/db1";
targetDataSource.destroy();
SingleConnectionDataSource ds=new SingleConnectionDataSource(newurl, username, password, true);
targetDataSource=ds;
return targetDataSource;
}
Létrejön a bean, le tudom kérni a getTargetDataSource()-t, létrehozok újat a fentiek alapján, létre is jön. Azonban a bo-ban kiadott save mégis a "régi" db-be akarja kiírni a rekordot.
Köszi!
- A hozzászóláshoz be kell jelentkezni
És megvan..
datasources.xml (ez megy az applicationContext.xml-be)
http://pastebin.com/93nawn2W
http://pastebin.com/n493m7Ka
A CustomDelegatingDataSourceImpl bean-t már tudom injektálni a Dao osztályomba, majd az authentikáció előtt tudok egy setUrl-t állítani, amivel a megfelelő db-ből authentikál a felhasználó.
Köszi mindenkinek az útmutatást!
- A hozzászóláshoz be kell jelentkezni