Spring-MVC-4 + JPA 2 + Проверка гибернации 5.0.2 на Weblogic 10.3.6
После многих поисков в сети я пока не нашел решения. Я использую JPA 2 на WebLogic 10.3.6. Все хорошо работает на tomcat:
@RequestMapping(value="/createUser", method = RequestMethod.POST)
public String create(@Valid Utente utente, BindingResult result)
но при развертывании в WebLogic я получаю следующее исключение:
java.lang.AbstractMethodError: org.apache.openjpa.persistence.PersistenceProviderImpl.getProviderUtil()Ljavax/persistence/spi/ProviderUtil;
at javax.persistence.Persistence$PersistenceUtilImpl.isLoaded(Unknown Source) ~[javax.persistence_1.1.0.0_2-0.jar:2.0.3]
at org.hibernate.validator.internal.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:56) ~[hibernate-validator-5.0.2.Final.jar:5.0.2.Final]
Это pom.xml:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
...
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.0.2.Final</version>
</dependency>
заранее спасибо
2 ответа
Решение
Решено, добавив validation.xml:
<?xml version="1.0" encoding="UTF-8"?>
<validation-config
xmlns="http://jboss.org/xml/ns/javax/validation/configuration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration validation-configuration-1.1.xsd"
version="1.1">
<traversable-resolver>CustomTraversableResolver</traversable-resolver>
</validation-config>
и реализации:
public class CustomTraversableResolver implements TraversableResolver {
@Override
public boolean isReachable(Object traversableObject, Node traversableProperty, Class<?> rootBeanType, Path pathToTraversableObject, ElementType elementType) {
return true;
}
@Override
public boolean isCascadable(Object traversableObject, Node traversableProperty, Class<?> rootBeanType, Path pathToTraversableObject, ElementType elementType) {
return true;
}
}
Как сказано здесь, ответ @MDS - это обходной путь, потому что вы должны знать, что это может привести к загрузке большого количества сущностей из базы данных при проверке bean-компонента, который имеет не загруженные ленивые ссылки на другие сущности.
Я предлагаю отредактировать weblogic-application.xml, чтобы перегрузить правильный jar:
<wls:prefer-application-packages>
<wls:package-name>javax.persistence.*</wls:package-name>
<wls:package-name>org.eclipse.persistence.*</wls:package-name>
</wls:prefer-application-packages>