[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[eclipselink-users] Eclipse Link error with LockType
|
Hi All,
1- I'm getting the following error after upgrading to eclipselink
1.1.0 M 5 while using OSGI & Spring.
A lock type can only be used with a select query (which allows the
database to be locked where necessary).
Another piece of info which may or may not be related:
2- I extended org.eclipse.persistence.jpa.osgi.PersistenceProvider in
order to be able to externalize configuration for datasource, dialect,
etc... into spring. [I have a defect open for that] I'm not certain
if that may be the culprit, but I am guessing not since it's failing
while trying to build JPA queries. So I have attached that.
Basically a rip off off the same PersistenceProvider code , aside from
setting the classloader.
3- The M5 bundle plugin file with all dependencies should probably
come bundled with the 2.0 persistence preview. [I was getting OSGI
failures due to javax.persistence.Cache]
Other than that, any thoughts on the the stack trace
org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'entityManager' defined in URL
[bundleentry://76/META-INF/spring/applicationContext-db-eclipselink.xml]:
Instantiation of bean failed; nested exception is
org.springframework.beans.factory.BeanDefinitionStoreException:
Factory method [public javax.persistence.EntityManager
org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager()]
threw exception; nested exception is
javax.persistence.PersistenceException:
java.lang.IllegalArgumentException: A lock type can only be used with
a select query (which allows the database to be locked where
necessary).
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:444)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:903)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:817)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:288)
at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:145)
at com.springsource.server.kernel.dm.ContextPropagatingTaskExecutor$2.run(ContextPropagatingTaskExecutor.java:82)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException:
Factory method [public javax.persistence.EntityManager
org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager()]
threw exception; nested exception is
javax.persistence.PersistenceException:
java.lang.IllegalArgumentException: A lock type can only be used with
a select query (which allows the database to be locked where
necessary).
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:127)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:435)
... 19 more
Caused by: javax.persistence.PersistenceException:
java.lang.IllegalArgumentException: A lock type can only be used with
a select query (which allows the database to be locked where
necessary).
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:266)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:111)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:159)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:146)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:115)
... 20 more
Caused by: java.lang.IllegalArgumentException: A lock type can only be
used with a select query (which allows the database to be locked where
necessary).
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:184)
at org.eclipse.persistence.internal.jpa.JPAQuery.processJPQLQuery(JPAQuery.java:94)
at org.eclipse.persistence.internal.jpa.JPAQuery.prepare(JPAQuery.java:85)
at org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:447)
at org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:413)
at org.eclipse.persistence.internal.sessions.AbstractSession.processJPAQueries(AbstractSession.java:1689)
at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:409)
at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.postConnectDatasource(DatabaseSessionImpl.java:666)
at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.login(DatabaseSessionImpl.java:630)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:213)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:249)
... 28 more
package da.osgi;
import java.net.URL;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.EntityManagerFactory;
import javax.persistence.spi.ClassTransformer;
import javax.persistence.spi.PersistenceUnitInfo;
import org.eclipse.persistence.exceptions.PersistenceUnitLoadingException;
import org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl;
import org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider;
import org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl;
import org.eclipse.persistence.internal.jpa.deployment.JPAInitializer;
import org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor;
import org.eclipse.persistence.internal.jpa.deployment.SEPersistenceUnitInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class DAPersistenceProvider extends
org.eclipse.persistence.jpa.osgi.PersistenceProvider {
static Logger logger = LoggerFactory.getLogger(DAPersistenceProvider.class);
/**
* Called by Persistence class when an EntityManagerFactory is to be
* created.
*
* @param emName
* The name of the persistence unit
* @param map
* A Map of properties for use by the persistence provider. These
* properties may be used to override the values of the
* corresponding elements in the persistence.xml file or specify
* values for properties not specified in the persistence.xml.
* @return EntityManagerFactory for the persistence unit, or null if the
* provider is not the right provider
*/
public EntityManagerFactory createEntityManagerFactory(String emName,
Map properties) {
ClassLoader classloader = initializationHelper.getClassLoader(emName,
properties);
return createEntityManagerFactory(emName, properties, classloader);
}
/**
* Called by Persistence class when an EntityManagerFactory is to be
* created.
*
* @param emName
* The name of the persistence unit
* @param map
* A Map of properties for use by the persistence provider. These
* properties may be used to override the values of the
* corresponding elements in the persistence.xml file or specify
* values for properties not specified in the persistence.xml.
* @param classLoader
* The classloader to search for persistence units on
* @return EntityManagerFactory for the persistence unit, or null if the
* provider is not the right provider
*/
protected EntityManagerFactory createEntityManagerFactory(String emName,
Map properties, ClassLoader classLoader) {
Map nonNullProperties = (properties == null) ? new HashMap()
: properties;
String name = emName;
if (name == null) {
name = "";
}
JPAInitializer initializer = initializationHelper.getInitializer(
classLoader, nonNullProperties);
EntityManagerSetupImpl emSetupImpl = null;
// get a class loader to use with this specific EM
ClassLoader currentLoader = initializationHelper.getClassLoader(emName,
nonNullProperties);
try {
Enumeration<URL> resources = currentLoader
.getResources("META-INF/persistence.xml");
boolean initialized = false;
while (resources.hasMoreElements()) {
String puName = PersistenceUnitProcessor
.buildPersistenceUnitName(PersistenceUnitProcessor
.computePURootURL(resources.nextElement()),
name);
synchronized (EntityManagerFactoryProvider.emSetupImpls) {
emSetupImpl = EntityManagerFactoryProvider
.getEntityManagerSetupImpl(puName);
if (emSetupImpl == null || emSetupImpl.isUndeployed()) {
if (!initialized) {
initializer.initialize(nonNullProperties,
initializationHelper);
initialized = true;
}
emSetupImpl = EntityManagerFactoryProvider
.getEntityManagerSetupImpl(puName);
}
}
// We found a match, stop looking.
if (emSetupImpl != null) {
break;
}
}
} catch (Exception e) {
throw PersistenceUnitLoadingException
.exceptionSearchingForPersistenceResources(currentLoader, e);
}
// gf bug 854 Returns null if EntityManagerSetupImpl for the name
// doesn't exist (e.g. a non-existant PU)
if (emSetupImpl == null) {
return null;
}
if (!initializer.isPersistenceProviderSupported(emSetupImpl
.getPersistenceUnitInfo().getPersistenceProviderClassName())) {
return null;
}
// synchronized to prevent overriding of the class loader
// and also calls to predeploy and undeploy by other threads -
// the latter may alter result of shouldRedeploy method.
synchronized (emSetupImpl) {
if (emSetupImpl.shouldRedeploy()) {
SEPersistenceUnitInfo persistenceInfo = (SEPersistenceUnitInfo) emSetupImpl
.getPersistenceUnitInfo();
persistenceInfo.setClassLoader(initializationHelper
.getClassLoader(emName, properties));
if (emSetupImpl.isUndeployed()) {
persistenceInfo.setNewTempClassLoader(initializationHelper
.getClassLoader(emName, properties));
}
}
// call predeploy
// this will just increment the factory count since we should
// already be deployed
emSetupImpl.predeploy(emSetupImpl.getPersistenceUnitInfo(),
nonNullProperties);
}
EntityManagerFactoryImpl factory = null;
try {
factory = new EntityManagerFactoryImpl(emSetupImpl,
nonNullProperties);
// This code has been added to allow validation to occur without
// actually calling createEntityManager
if (emSetupImpl.shouldGetSessionOnCreateFactory(nonNullProperties)) {
factory.getServerSession();
}
return factory;
} catch (RuntimeException ex) {
if (factory != null) {
factory.close();
} else {
emSetupImpl.undeploy();
}
throw ex;
}
}
@Override
public EntityManagerFactory createContainerEntityManagerFactory(
PersistenceUnitInfo info, Map properties) {
ClassLoader classloader = initializationHelper.getClassLoader(info
.getPersistenceUnitName(), properties);
return createContainerEntityManagerFactory(info, properties,
classloader);
}
private EntityManagerFactory createContainerEntityManagerFactory(
PersistenceUnitInfo info, Map properties, ClassLoader classloader) {
Map nonNullProperties = (properties == null) ? new HashMap()
: properties;
EntityManagerSetupImpl emSetupImpl = null;
boolean isNew = false;
ClassTransformer transformer = null;
synchronized (EntityManagerFactoryProvider.emSetupImpls) {
String puName = PersistenceUnitProcessor.buildPersistenceUnitName(
info.getPersistenceUnitRootUrl(), info
.getPersistenceUnitName());
emSetupImpl = EntityManagerFactoryProvider
.getEntityManagerSetupImpl(puName);
if (emSetupImpl == null) {
emSetupImpl = new EntityManagerSetupImpl();
isNew = true;
emSetupImpl.setIsInContainerMode(true);
// if predeploy fails then emSetupImpl shouldn't be added to
// FactoryProvider
transformer = emSetupImpl.predeploy(info, nonNullProperties);
EntityManagerFactoryProvider.addEntityManagerSetupImpl(puName,
emSetupImpl);
}
}
if (!isNew && !emSetupImpl.isDeployed()) {
transformer = emSetupImpl.predeploy(info, nonNullProperties);
}
if (transformer != null) {
info.addTransformer(transformer);
}
// When EntityManagerFactory is created, the session is only partially
// created
// When the factory is actually accessed, the emSetupImpl will be used
// to complete the session construction
EntityManagerFactoryImpl factory = new EntityManagerFactoryImpl(
emSetupImpl, nonNullProperties);
// This code has been added to allow validation to occur without
// actually calling createEntityManager
if (emSetupImpl.shouldGetSessionOnCreateFactory(nonNullProperties)) {
factory.getServerSession();
}
return factory;
}
}