Ошибка при создании компонента EntityManagerFactory при развертывании в Apache TomEE - PullRequest
0 голосов
/ 25 марта 2020

При развертывании приложения в 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, и запустить транснациональные методы.

Я уже потратил довольно много времени на борьбу с этой вещью и на поиск возможных решений.

Было бы здорово услышать ваше мнение по этому поводу и еще раз извинения, если это окажется ошибкой. на моей стороне.

...