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
|