Получаване на java.sql.SQLException: Transactions not supported Error while calling Spring Boot Rest API with Informix Database

Създадох просто приложение за зареждане на Simple Spring, което може да получава/подава данните в базата данни на Informix.

Докато извиквам Rest API, получавайки по-долу споменатото съобщение за грешка, потърсих основната причина приблизително същата, но не намерих никакви източници,

Оценявам помощта по този въпрос, Ето конфигурацията и кода, които създадох:

application.properties

spring.datasource.url=jdbc:informix-sqli://XXXX:XXXX/localdb:INFORMIXSERVER=ol_xxxxx
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.driver-class-name=com.informix.jdbc.IfxDriver
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.InformixDialect
spring.jpa.hibernate.ddl-auto=update

Заедно с пролетен стартов уеб, данни JPA, инструменти за разработка, добавени по-долу допълнителна зависимост

   <dependency>
        <groupId>com.ibm.informix</groupId>
        <artifactId>jdbc</artifactId>
        <version>4.10.8.1</version>
    </dependency>

Контролер за почивка

@RestController
@RequestMapping("/api")
public class UserController {
    @Autowired
    UserRepository repository;
    
    @GetMapping("/user/{userId}")
    public void getUserDetails(@PathVariable Long countryId) {
      Optional<webCountry> country = repository.findById(countryId);
      System.out.println(country);
    }
    
    @PostMapping(path="/saveuser")
    public void saveUser(@RequestBody UserEntity user) {
        repository.save(data);
    }
}

Интерфейс на хранилището

@Repository
public interface UserRepository extends JpaRepository<UserEntity, Long> {

}

Докато се обажда на API за получаване от публикация, човек получава съобщение за грешка отдолу

    Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.TransactionException: JDBC begin transaction failed: ] with root cause

java.sql.SQLException: Transactions not supported
    at com.informix.util.IfxErrMsg.buildException(IfxErrMsg.java:474) ~[jdbc-4.10.8.1.jar:4.10.8.1]
    at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:443) ~[jdbc-4.10.8.1.jar:4.10.8.1]
    at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:394) ~[jdbc-4.10.8.1.jar:4.10.8.1]
    at com.informix.jdbc.IfxSqliConnect.setAutoCommit(IfxSqliConnect.java:2426) ~[jdbc-4.10.8.1.jar:4.10.8.1]
    at com.zaxxer.hikari.pool.ProxyConnection.setAutoCommit(ProxyConnection.java:414) ~[HikariCP-3.4.5.jar:na]
    at com.zaxxer.hikari.pool.HikariProxyConnection.setAutoCommit(HikariProxyConnection.java) ~[HikariCP-3.4.5.jar:na]
    at org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.begin(AbstractLogicalConnectionImplementor.java:72) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final]
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.begin(LogicalConnectionManagedImpl.java:282) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final]
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.begin(JdbcResourceLocalTransactionCoordinatorImpl.java:246) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final]
    at org.hibernate.engine.transaction.internal.TransactionImpl.begin(TransactionImpl.java:83) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final]
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.beginTransaction(HibernateJpaDialect.java:184) ~[spring-orm-5.2.12.RELEASE.jar:5.2.12.RELEASE]
    at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:402) ~[spring-orm-5.2.12.RELEASE.jar:5.2.12.RELEASE]
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.startTransaction(AbstractPlatformTransactionManager.java:400) ~[spring-tx-5.2.12.RELEASE.jar:5.2.12.RELEASE]
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) ~[spring-tx-5.2.12.RELEASE.jar:5.2.12.RELEASE]
    at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:574) ~[spring-tx-5.2.12.RELEASE.jar:5.2.12.RELEASE]
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:361) ~[spring-tx-5.2.12.RELEASE.jar:5.2.12.RELEASE]
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118) ~[spring-tx-5.2.12.RELEASE.jar:5.2.12.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.12.RELEASE.jar:5.2.12.RELEASE]
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139) ~[spring-tx-5.2.12.RELEASE.jar:5.2.12.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.12.RELEASE.jar:5.2.12.RELEASE]
    at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:178) ~[spring-data-jpa-2.3.6.RELEASE.jar:2.3.6.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.12.RELEASE.jar:5.2.12.RELEASE]
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95) ~[spring-aop-5.2.12.RELEASE.jar:5.2.12.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.12.RELEASE.jar:5.2.12.RELEASE]
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) ~[spring-aop-5.2.12.RELEASE.jar:5.2.12.RELEASE]

person Mahesh    schedule 13.01.2021    source източник


Отговори (3)


Това може да има една или повече от следните причини:

  • IP адресът или името на хост в JDBC URL е грешен.
  • Името на хост в JDBC URL не се разпознава от локалния DNS сървър.
  • Номерът на порта липсва или е грешен в JDBC URL.
  • DB сървърът не работи.
  • DB сървърът не приема TCP/IP връзки.
  • Връзките на DB сървъра са изчерпани.
person Vinayak Mittal    schedule 13.01.2021
comment
Как нещо от това е свързано с изключението, посочено в заглавието на въпроса: java.sql.SQLException: Transactions not supported? - person Jonathan Leffler; 18.01.2021

Informix предоставя четири различни типа бази данни:

  • Отписан
  • Буферирано регистриране
  • Небуферирано регистриране
  • Небуферирано регистриране в РЕЖИМ ANSI

Нерегистрираната база данни няма регистър на транзакциите и следователно не поддържа транзакции. Всички останали типове поддържат транзакции; разликите между сортовете сега не са от значение.

Типът база данни по подразбиране, когато кажете CREATE DATABASE xyz, е нерегистрирана база данни. Трябва да кажете WITH LOG или WITH BUFFERED LOG или WITH LOG MODE ANSI, за да създадете база данни с регистър на транзакциите.

Съдейки по съобщението за грешка, базата данни, която използвате, е създадена без транзакции.

Ако е необходимо (и вероятно е необходимо), DBSA (системен администратор на база данни — обикновено това означава някой с привилегиите да работи като потребител informix) може да промени режима на регистриране. Преминаването към буферирано регистриране вероятно е подходящо. DBSA може или да използва ontape, за да промени режима, докато изпълнява резервно копие на сървъра, или да използва ondblog (но въпреки това архивирането е добра идея):

ontape -s -B xyz

ondblog buf xyz

Вижте Управление на режима на регистриране в базата данни за повече подробности.

Когато се опитате да стартирате транзакция в нерегистрирана база данни на Informix, генерираното съобщение за грешка е:

-256 Transaction not available.

Командата Informix finderr показва:

$ finderr -256
-256    Transaction not available.

You cannot begin a transaction in this database because it does not
have a transaction log. In order to support transactions, you must
start a transaction log. Refer to your Administrator's Guide for
information on how to start a transaction log.

$
person Jonathan Leffler    schedule 13.01.2021
comment
Командата CREATE DATABASE tram_des2 WITH BUFFERED LOG; работи за моя. - person Victor Rodriguez; 21.06.2021

След като можете да опитате, като добавите анотация @Transactional към вашето хранилище. справка: https://www.baeldung.com/transaction-configuration-with-jpa-and-spring

person Ajit    schedule 14.01.2021