【问题标题】:Struggling to get JPA working with Spring when I deploy in weblogic当我在 weblogic 中部署时,努力让 JPA 与 Spring 一起工作
【发布时间】:2019-02-20 16:57:44
【问题描述】:

我使用 spring-boot-starter-data-jpa 创建了一个带有 Spring Boot 和 JPA 的 POC,我的解决方案运行良好。当我尝试将相同的解决方案添加到使用 Spring 4hibernate JPA 2.1 版本的旧项目时,就会出现我的问题。当我在 weblogic 中部署我的战争时,我得到的第一个错误是无法自动连接存储库,所以我添加了@EnableJpaRepositories。我什至尝试添加spring.datasource.jndi-name=EXAMPLE_Data_Source,其中EXAMPLE_Data_Source 是我的weblogic 数据源,但没有运气。

应用类:

@Configuration
@EnableWs
@ComponentScan("com.example.package")
@EnableJpaRepositories(basePackages = {"com.example.repository","com.example.entity"})
public class AppConfig extends WsConfigurerAdapter { //WsConfigurerAdapter  is spring-ws-core 2.2.0 Release

@Autowire
MyRepository  repository; 

存储库类:

public interface MyRepository extends JpaRepository<EntityClass, EntityPKey> {

    @Query("select c from EntityClass c where ID = :param1 and  TYPE = :param2 and :param3 between FROM_DATE and TO_DATE ")
    EntityClass entityClass(@Param("param1") int param1, @Param("param2")
            char param2, @Param("param3") Date param3);
}

现在我得到以下错误:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean  named 'entityManagerFactory' is defined" weblogic.application.ModuleException: 
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean   named 'entityManagerFactory' is defined
    at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:140)
    at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:233)
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:228)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)
    Truncated. see log file for complete stacktrace
Caused By: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' is defined
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:641)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1157)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:280)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
    Truncated. see log file for complete stacktrace

我必须让它在 weblogic 中部署的旧 spring 项目上运行。

问题 1:这种解决问题的方法适用于 Spring 框架还是仅适用于 Springboot?

问题 2:我缺少哪些配置?

问题 3: 请指出一个可行的示例。我正在努力完成这项工作。

Spring webmvc 和 spring-tx 是 4.0.6 版本

请在您的解释中更详细一点。我还很初级。

提前致谢。

【问题讨论】:

  • 您是否正确配置了 entityManagerFactory。这可能会有所帮助stackoverflow.com/questions/24520602/…
  • @Harshakj89 如何配置它?在您给我的链接示例中,他们对 ApplicationContext.xml 进行了更改。我的项目中没有该文件。当我部署到 weblogic 时,我还必须进行更改吗?数据源在weblogic中配置
  • 此链接解释了如何使用 java 配置正确配置休眠。检查这是否有帮助baeldung.com/hibernate-4-spring
  • 有多种可能的处理方式。 Weblogic 应该注入 JPA 持久性上下文、只注入 JDBC 数据源、只注入配置信息,还是什么都不注入?
  • @chrylis weblogic 有数据源。缺少哪些其他配置以及我应该如何以及应该如何制作它们。似乎 spring boot 为我们做了很多这样的事情,但是当我使用 spring 时,我必须在应用程序中进行这些操作。请给我看不同场景的例子

标签: java spring hibernate jpa weblogic12c


【解决方案1】:

你必须配置Below Beans

DriverManagerDataSource
LocalContainerEntityManagerFactoryBean
JpaTransactionManager

refer这个例子

【讨论】:

  • 我看到你提到我的例子是我所做的 3/4 的 xml 版本。如果我有投票权,我会勾选。谢谢
【解决方案2】:

我使用的是基于注释的配置,所以我在 2 天后使用以下配置解决了这个问题:

@Bean
public DataSource jndiDataSource() {
    final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
    dsLookup.setResourceRef(true);

    return dsLookup.getDataSource(dataSourceName); // where dataSourceName is your weblogic data source
}

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws NamingException {
    LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
    factoryBean.setDataSource(jndiDataSource());
    factoryBean.setJpaVendorAdapter(jpaVendorAdapter());
    factoryBean.setPackagesToScan("com.example.entity");
    return factoryBean;
}

@Bean
public JpaVendorAdapter jpaVendorAdapter() {
    HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
    hibernateJpaVendorAdapter.setShowSql(false);
    hibernateJpaVendorAdapter.setGenerateDdl(true);
    hibernateJpaVendorAdapter.setDatabase(Database.ORACLE);
    return hibernateJpaVendorAdapter;
}

@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
    JpaTransactionManager txManager = new JpaTransactionManager();
    txManager.setEntityManagerFactory(entityManagerFactory);
    return txManager;
}

【讨论】:

    猜你喜欢
    • 2017-08-19
    • 1970-01-01
    • 2012-01-15
    • 2014-12-08
    • 2021-12-14
    • 2019-04-24
    • 2015-12-31
    • 1970-01-01
    • 2021-10-27
    相关资源
    最近更新 更多