dynamiczny DataSource i persistence Unit

0

witam,

Są zasoby:

  • glassfish - 1 szt,
  • domena pod glassfish-em - 1 szt.
  • postgresql DBMS - 1 szt,
  • baz danych pod postgres-em - bez limitu

Koncepcją jest aby: każdy użytkownik logujący się do aplikacji łączy się do swojej prywatnej bazy,
bez konieczności dodawania wszystkich DataSource-ów "na sztywno" w xml-ach glassfish-a.

Da się owe DataSource-y wygenerować dynamicznie? Pewnie tak.
Mogę was prosić o kawałek przykładowego kodu lub/i choć sugestię którędy droga?

Pozdrawiam
Piotrek

1

yyyy, a nie możesz po prostu przekazać parametru do jakiegoś factory od datasoruce i poprosić to factory od wydanie ci odpowiedniego datasource ?

0

no właśnie, pewnie można, a mogę coś więcej na ten temat prosić?
dosłownie kilka słów kluczy, kierunek - dalej sobie doczytam :)
(to jest mój pierwszy projekt w EE, jeszcze nieco po omacku tę architekturę ogarniam)

1

Zrób po prostu instancje tej klasy, klasa -> new Klasa(); mówi to coś panu ?

1

http://stackoverflow.com/questions/1989672/create-entity-manager-without-persistence-xml tutaj masz rozpisane co i jak. W dużym skrócie z "głównej" bazy danych - tam gdzie trzymasz konfiguracje poszczególnych użytkowników, pobierasz sobie dane do mapy, a następnie na podstawie tej mapy tworzysz EntinyManagerFactory.

1
<bean id="LocalContainerEntityManagerFactoryBean" class=
"org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="packagesToScan" value="application.models" />
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
</bean>

<bean id="jpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="MYSQL" />
<property name="showSql" value="true"/>
<property name="generateDdl" value="false"/>
<property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" />
</bean>
0

uff, dużo tego,
ale o takie wskazówki właśnie prosiłem,
wielkie dzięki

0

Witam ponownie,

Jetem krok dalej, ale czy to dobry kierunek?
nie ma pool-i, beans-ów, jakoś mało tego kodu.

w servlecie nadłubałem coś takiego, jak poniżej:

PGSimpleDataSource source = new PGSimpleDataSource();
source.setServerName(hostname); //adres serwera psql
source.setDatabaseName(database); // nazwa bazy psql
source.setUser(username); // użytkownik bazy
source.setPassword(password); hasło użytkownika bazy
Connection conn = source.getConnection();
Statement stmt = conn.createStatement();
ResultSet rst = stmt.executeQuery("SELECT * FROM tabela");
String wyniki;
while (rst.next()) {
wyniki += " "+rst.getString("kolumna");
}

1

czemu mój wpis jest podpisany autorem Krzywy Kot?

0

nie dawało mi spokoju,

więc:

persistence.xml

<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> <persistence-unit name="JavaEnterpriseApplication-warPU" transaction-type="RESOURCE_LOCAL"> <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> <property name="javax.persistence.schema-generation.database.action" value="create" /> </properties> </persistence-unit> </persistence>

i w kodzie aplikacji
Map properties = new HashMap();
properties.put("javax.persistence.jdbc.driver", "org.postgresql.Driver");
properties.put("javax.persistence.transactionType", "RESOURCE_LOCAL");
properties.put("javax.persistence.jdbc.url", "jdbc//hostname:5432/database");
properties.put("javax.persistence.jdbc.user", "db_user");
properties.put("javax.persistence.jdbc.password", "bd_user_pass");
EntityManagerFactory client_emf = Persistence.createEntityManagerFactory("JavaEnterpriseApplication-warPU", properties);
EntityManager client_em = client_emf.createEntityManager();

1 użytkowników online, w tym zalogowanych: 0, gości: 1