[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| 
Re: [eclipselink-users] EclipseLink Multi-tenancy: No value was provided for the session property [eclipselink.tenant-id]
 | 
You can ignore the checkNotNull(). It is a utility method that checks that the specified parameter is not null and returns it. It throws a NullPointerException if the parameter is null (see 
Guava Javadoc). The specified parameter is the actual tenant-id that is set (in this case the string "tenant-id").
I set the parameter "eclipselink.tenant-id" for ALL entities:
em.setProperty(PersistenceUnitProperties.MULTITENANT_PROPERTY_DEFAULT, "customer1")
Please note that ALL multi tenant entities use the default context parameter "eclipselink.tenant-id" to set the tenant-id. Was I suppose to use a different context parameter for every multi tenant entity?
Thanks,
Theo
On Wed, Aug 10, 2011 at 2:46 PM, Guy Pelletier 
<guy.pelletier@xxxxxxxxxx> wrote:
  
    
  
  
    What is happening with this call?
      
      em.setProperty(PersistenceUnitProperties.MULTITENANT_PROPERTY_DEFAULT,
      checkNotNull("tenant-id"))
      
      Specifically the checkNotNull("tenant-id")?
      
      I assume this is looking up a tenant-id and setting the same value
      for the eclipselink tenant id default? When is the value for
      tenant-id set?
       
      Also, just for the sake of clarity on my part, you have some
      multitenant entities that use the default property
      (eclipselink.tenant-id) and some that use tenant-id?
      
      Cheers,
      Guy
    
    On 10/08/2011 8:13 AM, Theodor Richard wrote:
    
Hello Guy,
      
      
      I have a single class in my application that uses the entity
        manager (it is injected by the container via
        @PersistenceContext). This class is an abstract DAO class where
        all my EJB's inherit from in order to access the database. I set
        the tenant-id property after a transaction is started (i.e.
        after invoking an EJB method), but before accessing the entity
        manager. I double checked this by setting a field breakpoint on
        the EntityManager property and manually checking via the
        debugger that the property is set. The weird thing is that
        happens only once, when I execute the same operation again (by
        reloading the page), I don't get the error.
      
      
      Any ideas here?
      
      
      Cheers,
      Theo
      
      
      
      
      
        On Wed, Aug 10, 2011 at 1:15 PM, Guy
          Pelletier 
<guy.pelletier@xxxxxxxxxx>
          wrote:
          
             Hi
                Theo,
                
                Are you setting your tenant properties after a begin
                transaction call? You're tenant properties should be set
                on the EM only after a begin transaction call and before
                any operations are performed on that EM.
                
                Cheers,
                 Guy
                
              
                
                  On 10/08/2011 4:22 AM, Theodor Richard wrote:
                  
Hi,
                    
                      I'm developing a multi-tenant Java EE 6
                      application (where tenants share a single table)
                      with container
                      managed @PersistenceContext injection. I keep
                      getting the following exception:
                    
                    
                    
                      Exception [EclipseLink-6174] (Eclipse
                        Persistence Services - 2.3.0.v20110604-r9504):
                        org.eclipse.persistence.exceptions.QueryException
                      Exception Description: No value was provided
                        for the session property
                        [eclipselink.tenant-id]. This exception is
                        possible when using additional criteria or
                        tenant discriminator columns without specifying
                        the associated contextual property. These
                        properties must be set through Entity Manager,
                        Entity Manager Factory or persistence unit
                        properties. If using native EclipseLink, these
                        properties should be set directly on the
                        session.
                     
                    
                    
                    I set the multi tenant property for every
                      transaction as follows:
                    
                      
                        em.setProperty(PersistenceUnitProperties.MULTITENANT_PROPERTY_DEFAULT,
                        checkNotNull("tenant-id"))
                      
                      
                      where em is the EntityManager. I get the
                        above exception, although I set the property. I
                        also debugged the code to make sure that the
                        property is set (through em.getProperties()),
                        and I was able to see that it's set. When I
                        reload the page (i.e. start another
                        transaction), it works.
                      
                      
                      How can I prevent this exception?
                      
                      
                      Thanks,
                      Theo