SQL create table if not exists spring_ch20_rows(label text)
SQL truncate spring_ch20_rows
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#noProviders for further details.
ENV Spring=6.2.11 Java=21.0.11
CHECK PASS proxy kind ClassConfig
TX primary/class thread=blog.spring.Chapter20.main() pid=76444 xid=763 active=true
CHECK PASS class metadata selects primary read-only transaction
TX secondary/method thread=blog.spring.Chapter20.main() pid=76459 xid=764 active=true
CHECK PASS method metadata selects secondary read-write transaction
ATTRIBUTE defaults=PROPAGATION_REQUIRED,ISOLATION_DEFAULT,timeout_9,readOnly; 'primaryTx' override=PROPAGATION_REQUIRED,ISOLATION_DEFAULT; 'secondaryTx'
CHECK PASS method annotation replaces class attributes instead of field-wise merge
CHECK PASS external public call enters transaction
CHECK PASS this call bypasses transaction interceptor
CHECK PASS protected method on class proxy is transactional
CHECK PASS same-package method on class proxy is transactional
CHECK PASS private this call is not transactional
CHECK PASS interface-free bean still uses class proxy
CHECK PASS caller thread transaction state cleaned
CHECK PASS proxy kind JdkConfig
TX primary/class thread=blog.spring.Chapter20.main() pid=76476 xid=765 active=true
CHECK PASS class metadata selects primary read-only transaction
TX secondary/method thread=blog.spring.Chapter20.main() pid=76477 xid=766 active=true
CHECK PASS method metadata selects secondary read-write transaction
ATTRIBUTE defaults=PROPAGATION_REQUIRED,ISOLATION_DEFAULT,timeout_9,readOnly; 'primaryTx' override=PROPAGATION_REQUIRED,ISOLATION_DEFAULT; 'secondaryTx'
CHECK PASS method annotation replaces class attributes instead of field-wise merge
CHECK PASS external public call enters transaction
CHECK PASS this call bypasses transaction interceptor
CHECK PASS protected method on class proxy is transactional
CHECK PASS same-package method on class proxy is transactional
CHECK PASS private this call is not transactional
CHECK PASS interface-free bean still uses class proxy
CHECK PASS caller thread transaction state cleaned
OBSERVER thread=blog.spring.Chapter20.main() spring_ch20_rows=[method, method]
CHECK PASS independent observer sees both committed method writes
SQL drop table if exists spring_ch20_rows
