[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-7312) Allow usage of multi-tenancy from HEM

Stefan Schulze (JIRA) noreply at atlassian.com
Tue May 15 09:05:11 EDT 2012


    [ https://hibernate.onjira.com/browse/HHH-7312?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=46670#comment-46670 ] 

Stefan Schulze commented on HHH-7312:
-------------------------------------

Ok, doesn't matter if we call it bug or feature.
You said it'd be possible to repurposing CurrentTenantIdentifierResolver. Could you outline, what would be necessary to do this? If it's simply done by changing the javadoc or something I can resolve, I would create a feature request about repurposing the Resolver, add both pull-requests (329 and 338) to this feature-request and link HHH-7306 and HHH-7312 as fixed by the feature request.
Is this a viable solution?

> Allow usage of multi-tenancy from HEM
> -------------------------------------
>
>                 Key: HHH-7312
>                 URL: https://hibernate.onjira.com/browse/HHH-7312
>             Project: Hibernate ORM
>          Issue Type: New Feature
>          Components: entity-manager
>    Affects Versions: 4.1.2
>         Environment: Hibernate 4.1.2, using JPA
>            Reporter: Oriel Maute
>            Priority: Minor
>              Labels: jpa2, multi-tenancy
>         Attachments: persistence.xml, SchemaBasedMultiTenancyTest.java, SchemaBasedMultiTenantConnectionProvider.java, SchemaBasedTenantResolver.java
>
>   Original Estimate: 1h
>  Remaining Estimate: 1h
>
> I tried to use db schema based multi tenancy with hibernate jpa / entitymanager. I use the following properties in persistence.xml:
> <property name="hibernate.multiTenancy" value="SCHEMA"/>
> <property name="hibernate.tenant_identifier_resolver" value="com.xoricon.persistence.bo.multitenancy.test.SchemaBasedTenantResolver"/>
> <property name="hibernate.multi_tenant_connection_provider" value="com.xoricon.persistence.bo.multitenancy.test.SchemaBasedMultiTenantConnectionProvider"/> 
> Both instances (SchemaBasedTenantResolver / SchemaBasedMultiTenantConnectionProvider) will be instantiated by hibernate. 
> When i call:
>   EntityManagerFactory lEntityManagerFactory= Persistence.createEntityManagerFactory("orm1");
>   EntityManager lManager = lEntityManagerFactory.createEntityManager();
> I get:
> System.out: SchemaBasedMultiTenantConnectionProvider.getAnyConnection()
> System.out: SchemaBasedTenantResolver.<init>()
> E
> Time: 1,53
> There was 1 error:
> 1) test1(com.xoricon.persistence.bo.multitenancy.test.SchemaBasedMultiTenancyTest)org.hibernate.HibernateException: SessionFactory configured for multi-tenancy, but no tenant identifier specified
> 	at org.hibernate.internal.AbstractSessionImpl.<init>(AbstractSessionImpl.java:82)
> 	at org.hibernate.internal.SessionImpl.<init>(SessionImpl.java:231)
> 	at org.hibernate.internal.SessionFactoryImpl$SessionBuilderImpl.openSession(SessionFactoryImpl.java:1831)
> 	at org.hibernate.ejb.EntityManagerImpl.getRawSession(EntityManagerImpl.java:121)
> 	at org.hibernate.ejb.EntityManagerImpl.getSession(EntityManagerImpl.java:98)
> 	at org.hibernate.ejb.AbstractEntityManagerImpl.setDefaultProperties(AbstractEntityManagerImpl.java:268)
> 	at org.hibernate.ejb.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:180)
> 	at org.hibernate.ejb.EntityManagerImpl.<init>(EntityManagerImpl.java:90)
> 	at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:178)
> 	at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:173)
> 	at com.xoricon.persistence.bo.multitenancy.test.SchemaBasedMultiTenancyTest.test1(SchemaBasedMultiTenancyTest.java:40)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at com.xoricon.persistence.bo.multitenancy.test.SchemaBasedMultiTenancyTest.main(SchemaBasedMultiTenancyTest.java:51)
> FAILURES!!!
> Tests run: 1,  Failures: 0,  Errors: 1
> In System.out "SchemaBasedTenantResolver.<init>()" shows, that my CurrentTenantIdentifierResolver has been instantiated. But Hiberante did not call method "public String resolveCurrentTenantIdentifier()". 
> I expect, that Hibernate uses the CurrentTenantIdentifierResolver to get the current tenant id. 
> In JPA i cannot set the tenant on the Session, because the exception above occures before Session has been created. I can access the Session only by EntityManager.getDelegate(). But as shown above, i cannot create an EntityManager instance.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list