У меня есть проект Java, использующий Spring 3.0, JPA 2.0 с IDE MyEclipse
Попытка преобразовать некоторые базовые дао-интеграционные тесты в Spring и столкнуться с несколькими проблемами. Вот мои настройки:
LevelDAO
public class LevelDAO extends JpaDaoSupport implements ILevelDAO
{
public void save(Level entity) {
logger.info("saving Level instance");
try {
getJpaTemplate().persist(entity);
logger.info("save successful");
} catch (RuntimeException re) {
logger.error("save failed", re);
throw re;
}
}
}
Модульный тест
@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:applicationContext.xml"})
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=false)
public class LevelDaoImplTests {
LevelDAO levelDao;
@Test
public void shouldSaveNewLevels() {
levelDao= new LevelDAO();
Level l = new Level();
l.setName = "test";
levelDao.save(l);
}
}
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="t1" transaction-type="RESOURCE_LOCAL">
<provider>
org.eclipse.persistence.jpa.PersistenceProvider
</provider>
<class>com.nlg.model.Level</class>
<properties>
<property name="javax.persistence.jdbc.driver"
value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url"
value="jdbc:mysql://myserver.rds.amazonaws.com:3306/" />
<property name="javax.persistence.jdbc.user" value="myuser" />
<property name="javax.persistence.jdbc.password" value="mypass" />
</properties>
</persistence-unit>
applicationContext.xml
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="t1" />
</bean>
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean
id="LevelDAO" class="com.nlg.model.LevelDAO">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
Сначала я получил это
Недопустимое значение «2.0» атрибута «версия» элемента «постоянство»
Итак, читая другой пост, в котором предлагается изменить это значение на "1.0"
и теперь получаю
java.lang.IllegalStateException: не удалось загрузить ApplicationContext
Эта проблема была решена с помощью тега , но она не устранила мою проблему:
org.springframework.transaction.CannotCreateTransactionException: Не удалось открыть JPA EntityManager для транзакции; вложенным исключением является исключение [EclipseLink-4021] (Eclipse Persistence Services - 1.0.2 (сборка 20081024)): org.eclipse.persistence.exceptions.DatabaseException
Описание исключительной ситуации: невозможно получить соединение от драйвера [null], пользователя [null] и URL [null].
Меня беспокоит то, что при понижении версии нет. до "1.0", что я также пропускаю проблему совместимости в этом стеке. У меня работают не весенние версии этих тестов, поэтому любые идеи о том, где я ошибся, оценены.
Спасибо