Re: M3 feature preview
Andrus Adamchik <[email protected]> Fri, 17 Jul 2026 16:59:17 -0400
| Newsgroups | gmane.comp.java.cayenne.devel |
|---|---|
| Message-ID | <[email protected]> |
Using "autoCommit=3Dfalse", the DB would implicitly BEGIN a tx on = select. So without a commit it will leave an idle transaction behind = with some resources allocated for it on the DB side. While your = connection pool may (or may not) rollback the tx when a connection is = returned, but in general, connection user is responsible to call either = commit or rollback if "autoCommit=3Dfalse" is in effect. Andrus > On Jul 17, 2026, at 2:14=E2=80=AFPM, [email protected] wrote: >=20 > Hello Andrus, >=20 > more of a curiosity here than an actual Cayenne consideration: I love > the idea of non performing an explicit commit for select queries, but > do you actually need the set 'autoCommit=3Dtrue', or is this just a = safe > option in case there were triggers or other subtle changes on the data > that would not be saved otherwise? >=20 > Thanks, >=20 > Giulio Cesare >=20 > On Sun, Jul 12, 2026 at 10:35=E2=80=AFPM Andrus Adamchik = <[email protected]> wrote: >>=20 >> The M3 change only affects selects. Previously, each select was = performed with autoCommit=3Dfalse, and was followed by an explicit = Connection.commit(). Now we switched to autoCommit=3Dtrue and no = explicit commit. >>=20 >> Hope this explains the change. >>=20 >> Andrus >>=20 >>=20 >>=20 >>> On Jul 12, 2026, at 4:10=E2=80=AFAM, Jurgen Doll = <[email protected]> wrote: >>>=20 >>> Hi Andrus >>>=20 >>> Wrt autoCommit I'm a bit puzzled as to why: "Cayenne no longer wraps = selecting queries ...." therefore ".... this means that for the first = time Cayenne operates with Connection 'autoCommit=3Dtrue'" ? Are selects = and autoCommit related in some way ? >>> I'm asking because in my understanding autoCommit is only relevant = to updates and inserts which will still be wrapped as transactions won't = they ? >>> Or are you saying that there isn't any default transaction wrapping = at all any more in Cayenne, even for inserts and updates ? >>>=20 >>> Thanks for a great library! >>> Jurgen >>>=20 >>> On Jul 11 2026, at 9:21 pm, Andrus Adamchik <[email protected]> = wrote: >>>> As a Cayenne user, the majority of my apps in the last 25 years = were "autoCommit=3Dfalse" just because that's how the framework worked. = So this is also new to me and based on research, not production = experience. So I'd very much like to get community feedback on the = actual behavior and potential pitfalls. >>>>=20 >>>> Andrus >>>>=20 >>>>> On Jul 11, 2026, at 4:52=E2=80=AFAM, [email protected] = wrote: >>>>>=20 >>>>> Hello Andrus, >>>>>=20 >>>>>> But this means that for the first time Cayenne operates with = Connection "autoCommit=3Dtrue". >>>>>=20 >>>>> =F0=9F=98=B1 >>>>> This setting is more scary that an Halloween costume to me! =F0=9F=98= =85 >>>>> I trust your understanding of the trade-offs at play, but I have >>>>> always considered autoCommit the option used by toy projects, not >>>>> suitable for serious tasks. >>>>>=20 >>>>> But my views may well be obsolete by now. =F0=9F=98=81 >>>>>=20 >>>>> Cheers, and =E2=80=93as always=E2=80=93 huge congratulations to = all people involved in >>>>> moving the project forward. >>>>>=20 >>>>> Giulio Cesare >>>>>=20 >>>>> On Tue, Jul 7, 2026 at 3:17=E2=80=AFPM Andrus Adamchik = <[email protected]> wrote: >>>>>>=20 >>>>>> I am glad the new change didn't break much stuff :) Always a = concern with all the new ideas. >>>>>>=20 >>>>>> BTW, as you probably noticed, we are now exposing translated = queries with parameters as standalone record objects instead of going = straight from translator to PreparedStatement, so they can be captured, = inspected, logged, etc (e.g., what the SQLLogger does). >>>>>>=20 >>>>>> And on the broader topic of observability, we started an effort = to integrate OpenTelemetry into Bootique, and I hope this will come back = to Cayenne as well. Would be nice to have otel spans for queries. But as = your video demonstrates, explicit instrumentation is almost irrelevant = these days. The tools are so good... they can grab the logs, or do = automated runtime instrumentation and show you transaction traces with = next to zero effort. >>>>>>=20 >>>>>> Andrus >>>>>>=20 >>>>>>=20 >>>>>>=20 >>>>>>> On Jul 6, 2026, at 7:15=E2=80=AFPM, Hugi Thordarson = <[email protected]> wrote: >>>>>>>=20 >>>>>>> Hi Andrus, >>>>>>>=20 >>>>>>> first =E2=80=94 that logging is a vast, vast improvement, I'm = loving it! >>>>>>>=20 >>>>>>> So happens I've been playing a lot with Cayenne's logging = lately. Very happy about how easy it was/is to hook into query logging = and I've used it to profile SQL-queries in my web application templates = for years now =E2=80=94 keeping track of the time methods spend querying = to find performance problems (profiling/aggregating by bindings rather = than methods really, in WO terms) and watching the SQL they executed. >>>>>>>=20 >>>>>>> Helpful, but has always been private utility logic for myself = since it just prints ugly text reports and I never took the time to make = it pretty and usable for others. >>>>>>>=20 >>>>>>> But that was before Claude :). So now there's this: Inline SQL = logging. Probably easiest described through video =E2=80=94 = https://www.youtube.com/watch?v=3DhoW1WusKSRo . >>>>>>>=20 >>>>>>> =E2=80=A6works great with the new SQLLogger interface. Already = ported, since I'll be switching to -SNAPSHOT (in dev only for a while, = to test the behaviour of the new transaction setup, really looking = forward to putting it through it's paces). >>>>>>> Been using M2 in production since release and it works great, = congrats on another awesome release :). >>>>>>>=20 >>>>>>> Cheers, >>>>>>> - hugi >>>>>>>=20 >>>>>>>=20 >>>>>>>=20 >>>>>>>> On 6 Jul 2026, at 13:37, Andrus Adamchik <[email protected]> = wrote: >>>>>>>>=20 >>>>>>>> Hi, >>>>>>>>=20 >>>>>>>> I wanted to highlight a few things in the upcoming M3. They are = already on master, so maybe some brave souls can take it for a spin and = give us feedback :) >>>>>>>>=20 >>>>>>>> 1. Cayenne no longer wraps selecting queries (or at least those = it can reliably identify as selecting) into transactions. >>>>>>>>=20 >>>>>>>> I had a suspicion for years that we shouldn't be doing that. = Now I was able to vibecode real benchmarks on multiple databases, and = time savings in the JDBC layer with faster queries are about 2x! (as = each useless "commit" is a separate command sent to DB that needs to be = processed). But this means that for the first time Cayenne operates with = Connection "autoCommit=3Dtrue". So I'd appreciate feedback if this = causes any weirdness with your DataSources. >>>>>>>>=20 >>>>>>>>=20 >>>>>>>> 2. SQL logging changes. There are multiple changes. Some = address operational concerns (saving hundreds of GB of storage space; = single-line logs are easier to parse), others are "quality of life": >>>>>>>>=20 >>>>>>>> * No tx for selects (mentioned above) by itself cuts down on 2 = log lines per query >>>>>>>> * The new logger name is short and descriptive "cayenne-sql" >>>>>>>> * ERROR log level for queries that result in exceptions >>>>>>>> * SQL query logs are single-line. Parameters, timers, result = counters, generated keys are placed on one line and rendered in a = compact format. Tx wrapping is still done on separate lines (as a tx can = include more than one SQL statement) >>>>>>>>=20 >>>>>>>> INFO cayenne-sql tx started >>>>>>>> INFO cayenne-sql INSERT INTO BINARY_PK_TEST1(BIN_ID, NAME) = VALUES(?, ?) | = bind:[BIN_ID:FBBC4034ED8F0214B2C559CF1029C1868A66F0D59208A36C9365126C248C.= ..,NAME:'master1'] updated:1 time_ms:0 >>>>>>>> INFO cayenne-sql tx committed >>>>>>>>=20 >>>>>>>> * Mnemonic table aliases. No more meaningless t0, t1, t2: >>>>>>>>=20 >>>>>>>> INFO cayenne-sql SELECT p.ESTIMATED_PRICE, = p.PAINTING_DESCRIPTION, p.PAINTING_TITLE, p.ARTIST_ID, p.GALLERY_ID, = p.PAINTING_ID, g.GALLERY_ID, g.GALLERY_NAME FROM PAINTING p LEFT JOIN = GALLERY g ON p.GALLERY_ID =3D g.GALLERY_ID | selected:1 time_ms:0 >>>>>>>>=20 >>>>>>>> * No alias for single-table queries >>>>>>>>=20 >>>>>>>> INFO cayenne-sql - SELECT ESTIMATED_PRICE, = PAINTING_DESCRIPTION, PAINTING_TITLE, ARTIST_ID, GALLERY_ID, PAINTING_ID = FROM PAINTING | selected:2 time_ms:0 >>>>>>>>=20 >>>>>>>>=20 >>>>>>>> (I am also thinking of lowercasing the SQL so that logs don't = look like they are screaming at you :)) >>>>>>>>=20 >>>>>>>> Andrus >>>>>>>>=20 >>>>>>>>=20 >>>>>>>>=20 >>>>>>>>=20 >>>>>>>=20 >>>>>>=20 >>>>=20 >>>=20 >>=20