При развертывании приложения в Apache TomEE plus 1.7.2
org.springframework.beans.factory.BeanCreationException я вижу следующее исключение: ошибка при создании компонента с именем 'baseEntityManager', определенным в пути к классу ресурс [com / abc / test / config / BaseTransactionConfig.class]: сбой вызова метода init; вложенное исключение - java .lang.NoClassDefFoundError: javax / persistence / NamedStoredProcedureQuery в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean. AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory java:. 545) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory java:. 482) в org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject (AbstractBeanFactory. java: 306) в org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry. java: 230) в org.springframework.beans. 1023 *: 302) в org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory. java: 197) в org.springframework.context.s Переменная (AbstractApplicationContext. java: 537) в org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refre sh (EmbeddedWebApplicationContext. java: 118) в org.springframework.boot.SrereApplication. . java: 752) в org.springframework.boot.SpringApplication.doRun (SpringApplication. java: 347) в org.springframework.boot.SpringApplication.run (SpringApplication. java: 295) в org.springframework. boot.context.web. ext.web.SpringBootServletInitializer.onStartup (SpringBootServletInitializer. java: 85) в org.springframework.web.SpringServletContainerInitializer.onStartup (SpringServletContainerInitializer. *. 10. StandardContext. java: 5622) в орг. apache .catalina.util.LifecycleBase.start (LifecycleBase. java: 145) в орг. apache .catalina.core.ContainerBase.addChildInternal (ContainerBase. * 1044) *: 1009) в орг. apache .catalina.core.ContainerBase.addChild (ContainerBase. java: 985) в орг. apache .catalina.core.StandardHost.addChild (StandardHost. java: 652) в орг. apache .catalina.startup.HostConfig.deployWAR (HostConfig. java: 1127) в орг. apache .catalina.startup.HostConfig $ DeployWar.run (HostConfig. java: 2020) в java .util.concurrent.Executors $ RunnableAdapter.call (Executors. java: 511) в java .util.concurrent.FutureTask.run (FutureTask. java: 266) в java .util.concurrent .ThreadPoolExecutor.runWorker (ThreadPoolExecutor. java: 1149) в java .u til.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor. java: 624) в java .lang.Thread.run (Тема. java: 748)
package com.abc.test.config;
import java.util.HashMap;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.Database;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.jta.JtaTransactionManager;
@Configuration
@EnableTransactionManagement
public class TransactionConfig {
@Autowired
JtaTransactionManager jtaTransactionManager;
@Autowired
@Qualifier("jpaVendorAdapter")
JpaVendorAdapter jpaVendorAdapter;
@Autowired
@Qualifier("myDatasource")
DataSource myDatasource;
@Bean(name = "myDatasource")
public DataSource dataSource() throws Exception {
JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
return dataSourceLookup.getDataSource("java:comp/env/jdbc/myDBXAPooled");
}
@Bean (name = "jpaVendorAdapter")
public JpaVendorAdapter jpaVendorAdapter() {
HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
jpaVendorAdapter.setShowSql(false);
jpaVendorAdapter.setGenerateDdl(false);
jpaVendorAdapter.setDatabase(Database.ORACLE);
return jpaVendorAdapter;
}
@Bean(name = "baseEntityManager")
@Primary
public LocalContainerEntityManagerFactoryBean baseEntityManager() throws Throwable {
HashMap<String, Object> properties = new HashMap<String, Object>();
properties.put("javax.persistence.transactionType", "JTA");
properties.put("hibernate.connection.release_mode", "after_statement");
properties.put("hibernate.connection.isolation", "2");
properties.put("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect");
LocalContainerEntityManagerFactoryBean entityManager = new LocalContainerEntityManagerFactoryBean();
entityManager.setJtaDataSource(myDatasource);
entityManager.setJpaVendorAdapter(jpaVendorAdapter);
entityManager.setPackagesToScan("com.abc.test.entity");
entityManager.setPersistenceUnitName("basePersistenceUnit");
entityManager.setJpaPropertyMap(properties);
return entityManager;
}
}
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Component;
@Component
public class EntityManagerConfig {
@PersistenceContext(unitName = "basePersistenceUnit")
protected EntityManager entityManager;
public void remove(Object entity) {
entityManager.remove(entity);
}
public void flush() {
entityManager.flush();
}
public void refresh(Object entity) {
entityManager.refresh(entity);
}
public void detach(Object entity) {
entityManager.detach(entity);
}
}
Web. xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>test</display-name>
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>sample.traditional.config</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<resource-ref>
<res-ref-name>jms/MyIncomingConnFactory</res-ref-name>
<res-type>javax.jms.ConnectionFactory</res-type>
<mapped-name>jms/MyIncomingConnFactory</mapped-name>
</resource-ref>
<resource-ref>
<res-ref-name>jdbc/myDBXAPooled</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<mapped-name>jdbc/myDBXAPooled</mapped-name>
</resource-ref>
<welcome-file-list>
<welcome-file></welcome-file>
</welcome-file-list>
</web-app>
Я настроил два ресурса. xml на стороне сервера
Я хотел определить классы сущностей, которые можно сканировать с помощью EntityManagerFactory, и запустить транснациональные методы.
Я уже потратил довольно много времени на борьбу с этой вещью и на поиск возможных решений.
Было бы здорово услышать ваше мнение по этому поводу и еще раз извинения, если это окажется ошибкой. на моей стороне.