Я знаю, что это может быть повторяющийся вопрос, но я не смог заставить его работать даже после того, как процитировал несколько статей здесь и там. Я пытаюсь развернуть простое приложение в веб-сфере, которое использует последнюю версию весенней загрузки. Поскольку весенняя загрузка использует спящие банки JPA 2.1, они сталкиваются с банками JPA 2.0, которые поставляются с websphere 8.5.0.1. Чтобы это сработало, мне пришлось исключить банки гибернации из моей записи maven данных весенней загрузки и указать более низкую версию спящего режима. Хотя это сработало, я не удовлетворен, так как не смог использовать последнюю реализацию гибернации. Поэтому попытался сделать спящий режим последним (JPA 2.1) в качестве стороннего поставщика в веб-сфере. Это то, что я пробовал до сих пор: 1. Среда -> Общая библиотека -> Создал новую SharedLibrary -> Дал путь к классам как ваш c:/app/lib 2. Сервер веб-приложений -> мой сервер -> Java и управление процессами - > Загрузчик классов -> Новое — сначала загружаются классы с помощью загрузчика классов приложения -> Добавлена общая библиотека, созданная на предыдущем шаге.
В разделе «Сервер» -> «Загрузчик классов» выбрано значение «Один», а «Родитель» наконец выбран. Я получаю следующее исключение, когда пытаюсь запустить приложение:
Caused by: java.lang.LinkageError: loading constraint violation: loader "com/ibm/ws/classloader/CompoundClassLoader@da74f152" previously initiated loading for a different type with name "org/xml/sax/Locator" defined by loader "com/ibm/oti/vm/BootstrapClassLoader@53942f80"
[11/24/15 9:26:14:812 EST] 00000056 SystemErr R at java.lang.ClassLoader.defineClassImpl(Native Method)
[11/24/15 9:26:14:812 EST] 00000056 SystemErr R at java.lang.ClassLoader.defineClass(ClassLoader.java:286)
[11/24/15 9:26:14:812 EST] 00000056 SystemErr R at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:154)
[11/24/15 9:26:14:812 EST] 00000056 SystemErr R at com.ibm.ws.classloader.CompoundClassLoader._defineClass(CompoundClassLoader.java:853)
[11/24/15 9:26:14:812 EST] 00000056 SystemErr R at com.ibm.ws.classloader.CompoundClassLoader.localFindClass(CompoundClassLoader.java:763)
[11/24/15 9:26:14:812 EST] 00000056 SystemErr R at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:604)
[11/24/15 9:26:14:812 EST] 00000056 SystemErr R at java.lang.ClassLoader.loadClass(ClassLoader.java:660)
[11/24/15 9:26:14:812 EST] 00000056 SystemErr R at java.lang.J9VMInternals.verifyImpl(Native Method)
[11/24/15 9:26:14:812 EST] 00000056 SystemErr R at java.lang.J9VMInternals.verify(J9VMInternals.java:85)
[11/24/15 9:26:14:812 EST] 00000056 SystemErr R at java.lang.J9VMInternals.verify(J9VMInternals.java:83)
[11/24/15 9:26:14:812 EST] 00000056 SystemErr R at java.lang.J9VMInternals.initialize(J9VMInternals.java:162)
[11/24/15 9:26:14:812 EST] 00000056 SystemErr R at ch.qos.logback.core.joran.event.SaxEventRecorder.startElement(SaxEventRecorder.java:109)
[11/24/15 9:26:14:812 EST] 00000056 SystemErr R at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
[11/24/15 9:26:14:813 EST] 00000056 SystemErr R at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
[11/24/15 9:26:14:813 EST] 00000056 SystemErr R at org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(Unknown Source)
[11/24/15 9:26:14:813 EST] 00000056 SystemErr R at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
[11/24/15 9:26:14:813 EST] 00000056 SystemErr R at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
[11/24/15 9:26:14:813 EST] 00000056 SystemErr R at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
[11/24/15 9:26:14:813 EST] 00000056 SystemErr R at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
[11/24/15 9:26:14:813 EST] 00000056 SystemErr R at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
[11/24/15 9:26:14:813 EST] 00000056 SystemErr R at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
[11/24/15 9:26:14:813 EST] 00000056 SystemErr R at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
[11/24/15 9:26:14:813 EST] 00000056 SystemErr R at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source)
[11/24/15 9:26:14:813 EST] 00000056 SystemErr R at ch.qos.logback.core.joran.event.SaxEventRecorder.recordEvents(SaxEventRecorder.java:61)
[11/24/15 9:26:14:814 EST] 00000056 SystemErr R at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:134)
[11/24/15 9:26:14:814 EST] 00000056 SystemErr R at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:99)
[11/24/15 9:26:14:814 EST] 00000056 SystemErr R at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:49)
[11/24/15 9:26:14:814 EST] 00000056 SystemErr R at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:77)
[11/24/15 9:26:14:814 EST] 00000056 SystemErr R at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:119)
[11/24/15 9:26:14:814 EST] 00000056 SystemErr R at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:57)
[11/24/15 9:26:14:814 EST] 00000056 SystemErr R at org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:98)
[11/24/15 9:26:14:814 EST] 00000056 SystemErr R at org.springframework.boot.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:217)
[11/24/15 9:26:14:814 EST] 00000056 SystemErr R at org.springframework.boot.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:185)
[11/24/15 9:26:14:814 EST] 00000056 SystemErr R at org.springframework.boot.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:164)
[11/24/15 9:26:14:814 EST] 00000056 SystemErr R at org.springframework.boot.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:144)
[11/24/15 9:26:14:815 EST] 00000056 SystemErr R at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:151)
[11/24/15 9:26:14:815 EST] 00000056 SystemErr R at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:128)
[11/24/15 9:26:14:815 EST] 00000056 SystemErr R at org.springframework.boot.context.event.EventPublishingRunListener.publishEvent(EventPublishingRunListener.java:100)
[11/24/15 9:26:14:815 EST] 00000056 SystemErr R at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:59)
[11/24/15 9:26:14:815 EST] 00000056 SystemErr R at org.springframework.boot.SpringApplication.run(SpringApplication.java:286)
[11/24/15 9:26:14:815 EST] 00000056 SystemErr R at org.springframework.boot.context.web.SpringBootServletInitializer.run(SpringBootServletInitializer.java:134)
[11/24/15 9:26:14:815 EST] 00000056 SystemErr R at org.springframework.boot.context.web.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:125)
[11/24/15 9:26:14:815 EST] 00000056 SystemErr R at org.springframework.boot.context.web.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:81)
[11/24/15 9:26:14:815 EST] 00000056 SystemErr R at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:175)
[11/24/15 9:26:14:815 EST] 00000056 SystemErr R at com.ibm.ws.webcontainer.webapp.WebAppImpl.initializeServletContainerInitializers(WebAppImpl.java:613)
[11/24/15 9:26:14:815 EST] 00000056 SystemErr R at com.ibm.ws.webcontainer.webapp.WebAppImpl.initialize(WebAppImpl.java:409)
[11/24/15 9:26:14:815 EST] 00000056 SystemErr R at com.ibm.ws.webcontainer.webapp.WebGroupImpl.addWebApplication(WebGroupImpl.java:88)
[11/24/15 9:26:14:815 EST] 00000056 SystemErr R at com.ibm.ws.webcontainer.VirtualHostImpl.addWebApplication(VirtualHostImpl.java:169)
[11/24/15 9:26:14:816 EST] 00000056 SystemErr R ... 96 more
Я также поиграл с настройкой реализации JPA по умолчанию и попытался указать «org.hibernate.jpa.HibernatePersistenceProvider» в качестве поставщика. Затем я даже попытался поместить файл persistence.xml в META-INF с поставщиком как «org.hibernate.jpa.HibernatePersistenceProvider». Но пока ничего не получилось.
Исключение, о котором я упоминал выше, возникает, когда я изменяю параметр загрузки класса как parent_last для приложения. Если сначала выбран родитель, выдается следующее исключение:
java.lang.NullPointerException
[11/24/15 9:24:12:794 EST] 00000055 SystemErr R at com.ibm.ws.webcontainer.metadata.WebCollaboratorComponentMetaDataImpl.getJ2EEName(WebCollaboratorComponentMetaDataImpl.java:63)
Пожалуйста, дайте мне знать, возможно ли то, что я пытаюсь сделать. Если да, может ли кто-нибудь помочь мне с подробными инструкциями?
ОБНОВЛЕНИЕ: ниже приведена моя конфигурация для JPA.
@Configuration
@EnableTransactionManagement
@PropertySource(value = { ApplicationConstant.DATABASE_PROPERTIES })
public class HibernateConfiguration {
/**
*The variable to store the Environment instance variable
*/
@Autowired
private Environment environment;
/**
* Bean definition to configure Hibernate SessionFactory
* @return LocalSessionFactoryBean
*/
/* @Bean
public LocalSessionFactoryBean sessionFactory() {
final LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan(new String[] { ApplicationConstant.PACKAGE_TO_SCAN });
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}*/
/**
* Bean definition to configure datasource for Hibernate SessionFactory
* @return DataSource
*/
@Bean
public DataSource dataSource() {
JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
jndiObjectFactoryBean.setJndiName("jdbc/prsds");
JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
DataSource dataSource = dataSourceLookup.getDataSource("jdbc/prsds");
return dataSource;
/*
final DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(environment.getRequiredProperty(ApplicationConstant.JDBC_DRIVER_CLASSNAME));
dataSource.setUrl(environment.getRequiredProperty(ApplicationConstant.JDBC_URL));
dataSource.setUsername(environment.getRequiredProperty(ApplicationConstant.JDBC_USERNAME));
dataSource.setPassword(environment.getRequiredProperty(ApplicationConstant.JDBC_PASSWORD));
return dataSource;*/
}
/**
* This method is used to set the properties for Hibernate configuration
* @return Properties
*/
private Properties hibernateProperties() {
final Properties properties = new Properties();
properties.put(ApplicationConstant.HIBERNATE_DIALECT, environment.getRequiredProperty(ApplicationConstant.HIBERNATE_DIALECT));
properties.put(ApplicationConstant.HIBERNATE_SHOW_SQL, environment.getRequiredProperty(ApplicationConstant.HIBERNATE_SHOW_SQL));
properties.put(ApplicationConstant.HIBERNATE_FORMAT_SQL, environment.getRequiredProperty(ApplicationConstant.HIBERNATE_FORMAT_SQL));
return properties;
}
/**
* Bean definition to configure Hibernate Transaction manager
* @param SessionFactory sessionFactory
* @return
*/
/*@Bean
@Autowired
public HibernateTransactionManager transactionManager(final SessionFactory sessionFactory) {
final HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory);
return txManager;
}*/
// ///////////////////////////////////////////////////
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setPackagesToScan(new String[] { ApplicationConstant.PACKAGE_TO_SCAN});
// em.setPersistenceUnitName("txManager");
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(hibernateProperties());
return em;
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf){
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}
@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){
return new PersistenceExceptionTranslationPostProcessor();
}
}
POM.XML
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.7.RELEASE</version>
</parent>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>xjc</id>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<schemaDirectory>${project.basedir}/src/main/resources/Service_Defination/XSD</schemaDirectory>
<outputDirectory>${project.basedir}/src/main/java</outputDirectory>
<clearOutputDir>false</clearOutputDir>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-ws</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.ws.xmlschema</groupId>
<artifactId>xmlschema-core</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<groupId>org.hibernate</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
</dependency>
</dependencies>
</project>
Я также пробовал с файлом persistence.xml и без него, но это тоже не помогло. Это была конфигурация, которую я пробовал:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.0">
<persistence-unit name="txManager">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.CMTTransactionFactory"></property>
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"></property>
</properties>
</persistence-unit>
</persistence>
Пожалуйста, направьте меня, где я ошибаюсь.