Пользовательский источник данных работает нормально при использовании DriverManagerDataSource, но не может выполнить запрос при использовании weblogi c JNDI - PullRequest
0 голосов
/ 29 апреля 2020

Я работаю над проектом весенней загрузки 2, в котором используется JPA, и нет файла application.properties, все свойства которого получены в виде строки от стороннего разработчика. Для использования источника данных, когда я использую DriverManagerDataSource в bean-компоненте источника данных, он прекрасно работает для извлечения данных. Но в производстве используется JNDI, поэтому, когда я изменяю код на JndiDataSourceLookup для WebLogi c server Datasource, он не может выполнить запрос JPA:

Сначала я хочу показать, что работает нормально:

@Bean(name = "dataSource" , destroyMethod = "")
public DataSource datasource() throws Exception {
     final DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(apiofTridparty("driver"));
        dataSource.setUrl(apiofTridparty("URL"));
        dataSource.setUsername(apiofTridparty("username"));
        dataSource.setPassword(apiofTridparty("pass"));
        return dataSource;
  }

После этого, когда я изменяю его на JNDI, например:

@Bean(name = "dataSource" , destroyMethod = "")
public DataSource datasource() throws Exception {
JndiDataSourceLookup lookup = new JndiDataSourceLookup();
    return lookup.getDataSource(apiofTridparty("jndiname"));
}

Используя этот код выше при выполнении запроса, он говорит:

org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet

My LocalContainerEntityManagerFactoryBean это:

@Primary
  @Bean(name = "entityManagerFactory")
  public LocalContainerEntityManagerFactoryBean 
  entityManagerFactory(
    EntityManagerFactoryBuilder builder,
    @Qualifier("dataSource") DataSource dataSource
  ) {
    return builder
      .dataSource(dataSource)
      .packages("<package name>")
      .persistenceUnit("<unit name>")
      .build();
  }

и менеджер транзакций:

 @Primary
  @Bean(name = "transactionManager")
  public PlatformTransactionManager transactionManager(
    @Qualifier("entityManagerFactory") EntityManagerFactory 
    entityManagerFactory
  ) {
    return new JpaTransactionManager(entityManagerFactory);
  }

Может кто-нибудь помочь мне в этом? Я новичок в weblogi c.

...