Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

QuarkusTransaction does not fire @Initialized(TransactionScoped.class) #28709

Closed
wicksim opened this issue Oct 20, 2022 · 9 comments · Fixed by #28725 or #31036
Closed

QuarkusTransaction does not fire @Initialized(TransactionScoped.class) #28709

wicksim opened this issue Oct 20, 2022 · 9 comments · Fixed by #28725 or #31036
Assignees
Labels
area/narayana Transactions / Narayana env/windows Impacts Windows machines kind/bug Something isn't working
Milestone

Comments

@wicksim
Copy link

wicksim commented Oct 20, 2022

Describe the bug

When starting a new transaction with QuarkusTransaction.run, listeners listening with @Observes @Initialized(TransactionScoped.class) Object notUsed are not notified.

Expected behavior

Listeners should be notified.

Actual behavior

Listeners are not notified.

How to Reproduce?

  1. Execute transaction-event-reproducer.zip
  2. Wait 10s
  3. See log output...it is fired for @Transactional, but not for QuarkusTransaction.run

Output of uname -a or ver

Microsoft Windows [Version 10.0.19044.2006]

Output of java -version

OpenJDK Runtime Environment Corretto-17.0.4.9.1 (build 17.0.4.1+9-LTS)

GraalVM version (if different from Java)

No response

Quarkus version or git rev

2.13.3.Final

Build tool (ie. output of mvnw --version or gradlew --version)

Apache Maven 3.8.6

Additional information

No response

@wicksim wicksim added the kind/bug Something isn't working label Oct 20, 2022
@quarkus-bot quarkus-bot bot added env/windows Impacts Windows machines triage/needs-triage labels Oct 20, 2022
@mkouba mkouba added area/narayana Transactions / Narayana and removed triage/needs-triage labels Oct 20, 2022
@quarkus-bot
Copy link

quarkus-bot bot commented Oct 20, 2022

/cc @mmusgrov

@mkouba
Copy link
Contributor

mkouba commented Oct 20, 2022

So the difference is that @Transactional interceptors use the injected TransactionManager to begin the tx. And this TM is in fact a delegating wrapper - CDIDelegatingTransactionManager - that fires the relevant events. However, the QuarkusTransaction leverages the injected UserTransaction to begin the tx - no events are fired.

@mkouba
Copy link
Contributor

mkouba commented Oct 20, 2022

FTR the injected UserTransaction would not fire these events either.

@wicksim
Copy link
Author

wicksim commented Oct 20, 2022

So I think, also @TransactionScope-beans will not work with UserTransaction and QuarkusTransaction?

@mkouba
Copy link
Contributor

mkouba commented Oct 20, 2022

So I think, also @TransactionScope-beans will not work with UserTransaction and QuarkusTransaction?

Nope, the @TransactionScoped beans should work because the TransactionContext implementation looks up the current transaction via the TransactionManager and stores the beans in the TransactionSynchronizationRegistry.

@mkouba mkouba self-assigned this Oct 20, 2022
mkouba added a commit to mkouba/quarkus that referenced this issue Oct 20, 2022
mkouba added a commit to mkouba/quarkus that referenced this issue Oct 21, 2022
mkouba added a commit to mkouba/quarkus that referenced this issue Oct 21, 2022
mkouba added a commit to mkouba/quarkus that referenced this issue Oct 25, 2022
mkouba added a commit to mkouba/quarkus that referenced this issue Oct 25, 2022
mkouba added a commit to mkouba/quarkus that referenced this issue Oct 26, 2022
@quarkus-bot quarkus-bot bot added this to the 2.15 - main milestone Oct 26, 2022
tmihalac pushed a commit to tmihalac/quarkus that referenced this issue Oct 27, 2022
@wicksim
Copy link
Author

wicksim commented Feb 8, 2023

@mkouba IMHO this still does not work (with Quarkus 2.16.1.Final).

I think the problem is, that QuarkusTransactionImpl gets the TransactionManager by return cachedTransactionManager = com.arjuna.ats.jta.TransactionManager.transactionManager(); which returns a com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple. I think a NotifyingTransactionManager would be needed here for the listener to work?

My original reproducer can still be used to reproduce the problem. Just update to the new Quarkus-Version.

Can we re-open this issue?

@mkouba mkouba reopened this Feb 9, 2023
@mkouba
Copy link
Contributor

mkouba commented Feb 9, 2023

@mkouba IMHO this still does not work (with Quarkus 2.16.1.Final).

I think the problem is, that QuarkusTransactionImpl gets the TransactionManager by return cachedTransactionManager = com.arjuna.ats.jta.TransactionManager.transactionManager(); which returns a com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple. I think a NotifyingTransactionManager would be needed here for the listener to work?

My original reproducer can still be used to reproduce the problem. Just update to the new Quarkus-Version.

Can we re-open this issue?

You're right - we fixed the injected UserTransaction but it seems that only some methods of QuarkusTransaction use it (e.g. begin()).

I think that we should try to modify the QuarkusTransactionImpl.getUserTransaction() and QuarkusTransactionImpl.getTransactionManager() methods to use the injected variants.

CC @yrodiere

@yrodiere
Copy link
Member

yrodiere commented Feb 9, 2023

I think that we should try to modify the QuarkusTransactionImpl.getUserTransaction() and QuarkusTransactionImpl.getTransactionManager() methods to use the injected variants.

Makes sense to me. Are you working on this or do you want me to send a patch (+ non-regression tests)?

@mkouba
Copy link
Contributor

mkouba commented Feb 9, 2023

I think that we should try to modify the QuarkusTransactionImpl.getUserTransaction() and QuarkusTransactionImpl.getTransactionManager() methods to use the injected variants.

Makes sense to me. Are you working on this or do you want me to send a patch (+ non-regression tests)?

Feel free to send a pull request ;-)

@yrodiere yrodiere added this to the 3.0 - main milestone Feb 10, 2023
@gsmet gsmet modified the milestones: 3.0 - main, 2.16.3.Final Feb 15, 2023
benkard added a commit to benkard/mulkcms2 that referenced this issue Apr 2, 2023
This MR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [flow-bin](https://github.com/flowtype/flow-bin) ([changelog](https://github.com/facebook/flow/blob/master/Changelog.md)) | devDependencies | minor | [`^0.199.0` -> `^0.200.0`](https://renovatebot.com/diffs/npm/flow-bin/0.199.0/0.200.0) |
| [com.rometools:rome](http://rometools.com) ([source](https://github.com/rometools/rome)) | compile | minor | `1.18.0` -> `1.19.0` |
| [org.postgresql:postgresql](https://jdbc.postgresql.org) ([source](https://github.com/pgjdbc/pgjdbc)) | build | patch | `42.5.3` -> `42.5.4` |
| [org.jsoup:jsoup](https://jsoup.org/) ([source](https://github.com/jhy/jsoup)) | compile | patch | `1.15.3` -> `1.15.4` |
| [io.quarkus:quarkus-maven-plugin](https://github.com/quarkusio/quarkus) | build | patch | `2.16.2.Final` -> `2.16.3.Final` |
| [io.quarkus:quarkus-universe-bom](https://github.com/quarkusio/quarkus-platform) | import | patch | `2.16.2.Final` -> `2.16.3.Final` |

---

### Release Notes

<details>
<summary>flowtype/flow-bin</summary>

### [`v0.200.0`](flow/flow-bin@9618443...b6c1eb0)

[Compare Source](flow/flow-bin@9618443...b6c1eb0)

### [`v0.199.1`](flow/flow-bin@05bb4e3...9618443)

[Compare Source](flow/flow-bin@05bb4e3...9618443)

</details>

<details>
<summary>rometools/rome</summary>

### [`v1.19.0`](https://github.com/rometools/rome/releases/tag/1.19.0)

[Compare Source](rometools/rome@1.18.0...1.19.0)

<!-- Release notes generated using configuration in .github/release.yml at 1.19.0 -->

#### What's Changed

##### 🔨 Dependency Upgrades

-   Bump flatten-maven-plugin from 1.2.7 to 1.3.0 by [@&#8203;dependabot](https://github.com/dependabot) in rometools/rome#565
-   Bump maven-bundle-plugin from 5.1.5 to 5.1.8 by [@&#8203;dependabot](https://github.com/dependabot) in rometools/rome#563
-   Bump maven-dependency-plugin from 3.3.0 to 3.5.0 by [@&#8203;dependabot](https://github.com/dependabot) in rometools/rome#602
-   Bump maven-deploy-plugin from 2.8.2 to 3.1.0 by [@&#8203;dependabot](https://github.com/dependabot) in rometools/rome#607
-   Bump maven-jar-plugin from 3.2.2 to 3.3.0 by [@&#8203;dependabot](https://github.com/dependabot) in rometools/rome#574
-   Bump maven-javadoc-plugin from 3.3.1 to 3.5.0 by [@&#8203;dependabot](https://github.com/dependabot) in rometools/rome#609
-   Bump maven-scm-plugin from 1.12.2 to 1.13.0 by [@&#8203;dependabot](https://github.com/dependabot) in rometools/rome#554
-   Bump assertj-core from 3.22.0 to 3.24.2 by [@&#8203;dependabot](https://github.com/dependabot) in rometools/rome#603
-   Bump slf4j-api from 1.7.36 to 2.0.6 by [@&#8203;dependabot](https://github.com/dependabot) in rometools/rome#596

##### Other Changes

-   Bump actions/setup-java from 3.3.0 to 3.10.0 by [@&#8203;dependabot](https://github.com/dependabot) in rometools/rome#606
-   Bump logback-classic from 1.2.10 to 1.3.5 by [@&#8203;PatrickGotthard](https://github.com/PatrickGotthard) in rometools/rome#611

**Full Changelog**: rometools/rome@1.18.0...1.19.0

</details>

<details>
<summary>pgjdbc/pgjdbc</summary>

### [`v42.5.4`](https://github.com/pgjdbc/pgjdbc/blob/HEAD/CHANGELOG.md#&#8203;4254-2023-02-15-102104--0500)

##### Fixed

fix: fix testGetSQLTypeQueryCache by searching for xid type. We used to search for box type but it is now cached. xid is not cached, this nuance is required for the test.
fix OidValueCorrectnessTest BOX_ARRAY OID, by adding BOX_ARRAY to the oidTypeName map \[MR [#&#8203;2810](https://github.com/pgjdbc/pgjdbc/issues/2810)]\((https://github.com/pgjdbc/pgjdbc/pull/2810).
fixes [Issue #&#8203;2804](pgjdbc/pgjdbc#2804).
fix: Make sure that github CI runs tests on all [MRs #&#8203;2809](\(https://github.com/pgjdbc/pgjdbc/pull/2809\)).

</details>

<details>
<summary>quarkusio/quarkus</summary>

### [`v2.16.3.Final`](https://github.com/quarkusio/quarkus/releases/tag/2.16.3.Final)

[Compare Source](quarkusio/quarkus@2.16.2.Final...2.16.3.Final)

##### Major changes

-   [#&#8203;29756](quarkusio/quarkus#29756) - Support custom Flyway credentials/URL

##### Complete changelog

-   [#&#8203;31141](quarkusio/quarkus#31141) - Resolve roles allowed configuration expression after config setup is completed
-   [#&#8203;31129](quarkusio/quarkus#31129) - Fix stuck HTTP2 request when sent challenge has resumed request
-   [#&#8203;31125](quarkusio/quarkus#31125) - Add "keep-alive-enabled" parameter to REST client reactive
-   [#&#8203;31112](quarkusio/quarkus#31112) - Qute - fix assignability check when validating expressions
-   [#&#8203;31099](quarkusio/quarkus#31099) - Use the effective Maven project build config when initializing sources and classes paths for dev mode
-   [#&#8203;31092](quarkusio/quarkus#31092) - Make sure quarkus:go-offline properly supports test scoped dependencies
-   [#&#8203;31077](quarkusio/quarkus#31077) - Qute: regression in template extension method with byte array
-   [#&#8203;31076](quarkusio/quarkus#31076) - Quarkiverse: Install instead of verify
-   [#&#8203;31074](quarkusio/quarkus#31074) - Added quarkus-jms-spi to quarkus bom
-   [#&#8203;31059](quarkusio/quarkus#31059) - Path lookup must also consider interfaces
-   [#&#8203;31046](quarkusio/quarkus#31046) - Simplify Quarkiverse release.yml workflow
-   [#&#8203;31038](quarkusio/quarkus#31038) - Update Instrumentation Processor check logic to match comment
-   [#&#8203;31036](quarkusio/quarkus#31036) - Use CDI when accessing UserTransaction/TransactionManager in QuarkusTransaction
-   [#&#8203;31028](quarkusio/quarkus#31028) - Fix typo in snapstart enable config
-   [#&#8203;31016](quarkusio/quarkus#31016) - Re-initialize platform dependent netty classes/values at runtime
-   [#&#8203;30988](quarkusio/quarkus#30988) - Race condition in SmallRye Config property expansion for [@&#8203;RolesAllowed](https://github.com/RolesAllowed) value?
-   [#&#8203;30964](quarkusio/quarkus#30964) - Add ConfigMappings from a builder class to support full hot reload
-   [#&#8203;30961](quarkusio/quarkus#30961) - Error of quarkus:dev when the project.build.directory is overridden by a profile
-   [#&#8203;30960](quarkusio/quarkus#30960) - Register CDI Bean when ConfigMapping is marked as Unremovable
-   [#&#8203;30922](quarkusio/quarkus#30922) - Fix dependency parsing in JBangBuilderImpl
-   [#&#8203;30885](quarkusio/quarkus#30885) - Add concurrency configuration to the GitHub Action workflows
-   [#&#8203;30843](quarkusio/quarkus#30843) - Micrometer-Extension writes wrong URI-Tag when Path-Variables defined at Interface-Level
-   [#&#8203;30672](quarkusio/quarkus#30672) - Avoid creating CSRF cookie if no CSRF token was created
-   [#&#8203;30648](quarkusio/quarkus#30648) - Support passing filename to multipart form data output
-   [#&#8203;30594](quarkusio/quarkus#30594) - CSRF: exception thrown when authentication falied
-   [#&#8203;30570](quarkusio/quarkus#30570) - Set filename for PartItems in MultipartFormDataOutput
-   [#&#8203;30455](quarkusio/quarkus#30455) - Introduce `quarkus.datasource.devservices.init-script-path`
-   [#&#8203;29756](quarkusio/quarkus#29756) - Support custom Flyway credentials/URL
-   [#&#8203;29631](quarkusio/quarkus#29631) - [@&#8203;Unremovable](https://github.com/Unremovable) ConfigMapping is still removed
-   [#&#8203;29630](quarkusio/quarkus#29630) - Changes to configmappings not being applied during hot reload
-   [#&#8203;28709](quarkusio/quarkus#28709) - QuarkusTransaction does not fire [@&#8203;Initialized](https://github.com/Initialized)(TransactionScoped.class)
-   [#&#8203;24639](quarkusio/quarkus#24639) - configure dedicated db user for database migrations: DML-only user for datasource, but DDL user for migration
-   [#&#8203;23360](quarkusio/quarkus#23360) - "Request has already been read" using vertx + auth
-   [#&#8203;17839](quarkusio/quarkus#17839) - Invalid memory configuration for netty maxDirectMemory in native image

</details>

<details>
<summary>quarkusio/quarkus-platform</summary>

### [`v2.16.3.Final`](quarkusio/quarkus-platform@2.16.2.Final...2.16.3.Final)

[Compare Source](quarkusio/quarkus-platform@2.16.2.Final...2.16.3.Final)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever MR is behind base branch, or you tick the rebase/retry checkbox.

👻 **Immortal**: This MR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC4yNC4wIiwidXBkYXRlZEluVmVyIjoiMzQuMjQuMCJ9-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/narayana Transactions / Narayana env/windows Impacts Windows machines kind/bug Something isn't working
Projects
None yet
4 participants