2013-03-26 3 views
6

Sto cercando di configurare un Hibernate SessionFactory utilizzando le opzioni multi-tenancy e con creazione automatica dello schema, però mi sono bloccato su questo errore:Hibernate 4 multitenancy Spring 3 Schema di esportazione errore

java.lang.NullPointerException 
    at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:51) 
    at org.hibernate.tool.hbm2ddl.DatabaseExporter.<init>(DatabaseExporter.java:52) 
    at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:367) 
    at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) 
    at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:498) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1742) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1780) 
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:242) 

Qui è la mia configurazione primavera:

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource1"/> 
    <property name="hibernateProperties"> 
     <props> 
     <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop> 
     <prop key="hibernate.hbm2ddl.auto">create-drop</prop> 
     <prop key="hibernate.show_sql">true</prop> 
     <prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop> 

     <prop key="hibernate.multiTenancy">DATABASE</prop> 
     <prop key="hibernate.multi_tenant_connection_provider">org.springframework.webflow.samples.booking.SampleMultiTenantConnectionProvider</prop> 
     <prop key="hibernate.tenant_identifier_resolver">org.springframework.webflow.samples.booking.SampleCurrentTenantIdentifierResolver</prop> 
     </props> 
    </property> 
</bean> 


<!-- Deploys a in-memory "booking" datasource populated --> 
<bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="org.hsqldb.jdbcDriver" /> 
    <property name="url" value="jdbc:hsqldb:mem:booking1" /> 
    <property name="username" value="sa" /> 
    <property name="password" value="" /> 
</bean> 

<bean id="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="org.hsqldb.jdbcDriver" /> 
    <property name="url" value="jdbc:hsqldb:mem:booking2" /> 
    <property name="username" value="sa" /> 
    <property name="password" value="" /> 
</bean> 

per ora sto utilizzando solo DataSource 1, e il SampleConnectionProvider e TenantResolver tornare sempre lo stesso inquilino e origine dati. Tuttavia, quando viene eseguita l'esportazione dello schema, genera NullPointerException. Il ConnectionProvider fornito per SuppliedConnectionProviderHelper è nullo. Sembra che non possa scegliere un ConnectionProvider appropriato quando usa la multitenancy. Il SuppliedConnectionProviderHelper viene creato su SchemaExport:

this.connectionHelper = new SuppliedConnectionProviderConnectionHelper(
      serviceRegistry.getService(ConnectionProvider.class) 
    ); 

Si può utilizzare il hibernate.hbm2ddl.auto quando si utilizza multi-tenancy? Cerca già nella documentazione di ibernazione ma non trova nulla.

Qualsiasi aiuto sarebbe molto apprezzato!

migliori saluti

João Simas

risposta

4

Sembra che non v'è alcun supporto per il multi-tenancy in SchemaExport. Ho guardato il codice sorgente in altri luoghi, il provider di connessione è ottenuto in base alla strategia multi-tenancy. Vedere la riga 581 here. Non vedo che succeda in SchemaExport. Inoltre, se esistono più origini dati, SchemaExport deve creare automaticamente lo schema anche in altre origini dati. Non vedo SchemaExport fare qualcosa del genere.

See e JIRA issue. Il problema JIRA non ha il problema esatto che hai descritto, ma è stato suggerito un approccio per la creazione di schemi nei commenti.

Questa è solo la mia analisi statica. Probabilmente dovresti aprire un problema o aspettare che qualcuno possa inviare una risposta. Per quanto ne so, questo sembra essere un bug o una funzione non supportata.

+0

Grazie! Ho votato anche per la questione JIRA –