Using eclipselink.tenant-id for all of them is fine,
so no issues there.
Any chance you can send a snippet of the code that is interacting
with the EM? Sorry, I don't have a better answer at this point, so
the more info you can provide me the better.
Cheers,
Guy
On 10/08/2011 9:04 AM, Theodor Richard wrote:
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
|