<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Cem Dırman on Medium]]></title>
        <description><![CDATA[Stories by Cem Dırman on Medium]]></description>
        <link>https://medium.com/@cemdrman?source=rss-668f1f3dbd5d------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*kfrM2yV5lBZrBfQnvofyfQ@2x.jpeg</url>
            <title>Stories by Cem Dırman on Medium</title>
            <link>https://medium.com/@cemdrman?source=rss-668f1f3dbd5d------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 04 Nov 2026 21:01:45 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@cemdrman/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[The Decorator Pattern in Spring: Wrap a Bean With Caching or Metrics Without Touching It]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@cemdrman/the-decorator-pattern-in-spring-wrap-a-bean-with-caching-or-metrics-without-touching-it-afcfbd1a7536?source=rss-668f1f3dbd5d------2"><img src="https://cdn-images-1.medium.com/max/1200/1*SNZAobvvXjrzlkdrBmYC2w.png" width="1200"></a></p><p class="medium-feed-snippet">If you have used Spring&#x2019;s @Cacheable or built a Strategy map of beans, you already know Spring likes to keep behavior out of your core&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/@cemdrman/the-decorator-pattern-in-spring-wrap-a-bean-with-caching-or-metrics-without-touching-it-afcfbd1a7536?source=rss-668f1f3dbd5d------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@cemdrman/the-decorator-pattern-in-spring-wrap-a-bean-with-caching-or-metrics-without-touching-it-afcfbd1a7536?source=rss-668f1f3dbd5d------2</link>
            <guid isPermaLink="false">https://medium.com/p/afcfbd1a7536</guid>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[java]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[spring-framework]]></category>
            <dc:creator><![CDATA[Cem Dırman]]></dc:creator>
            <pubDate>Mon, 02 Nov 2026 09:01:02 GMT</pubDate>
            <atom:updated>2026-11-02T09:01:02.583Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Your @TransactionalEventListener Is Silently Not Firing]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@cemdrman/your-transactionaleventlistener-is-silently-not-firing-df167d8e6ae5?source=rss-668f1f3dbd5d------2"><img src="https://cdn-images-1.medium.com/max/1200/1*erXMhSoO4Y4fe_ZE08vr-Q.png" width="1200"></a></p><p class="medium-feed-snippet">If you are coming from plain @EventListener, you already know the shape: publish an event, a listener reacts, your service stays decoupled&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/@cemdrman/your-transactionaleventlistener-is-silently-not-firing-df167d8e6ae5?source=rss-668f1f3dbd5d------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@cemdrman/your-transactionaleventlistener-is-silently-not-firing-df167d8e6ae5?source=rss-668f1f3dbd5d------2</link>
            <guid isPermaLink="false">https://medium.com/p/df167d8e6ae5</guid>
            <category><![CDATA[spring-boot]]></category>
            <category><![CDATA[java]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Cem Dırman]]></dc:creator>
            <pubDate>Fri, 30 Oct 2026 09:01:04 GMT</pubDate>
            <atom:updated>2026-10-30T09:01:04.325Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[C# & .NET for Java/Spring Developers-3: LINQ vs Java Streams]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@cemdrman/c-net-for-java-spring-developers-3-linq-vs-java-streams-20bec197c624?source=rss-668f1f3dbd5d------2"><img src="https://cdn-images-1.medium.com/max/1344/1*L3MbE07ERGlCZUoErjcF3Q.png" width="1344"></a></p><p class="medium-feed-snippet">If you&#x2019;re coming from Spring Boot, you reach for Stream&lt;T&gt; any time you need to filter, map, or collect a list without writing a for loop&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/@cemdrman/c-net-for-java-spring-developers-3-linq-vs-java-streams-20bec197c624?source=rss-668f1f3dbd5d------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@cemdrman/c-net-for-java-spring-developers-3-linq-vs-java-streams-20bec197c624?source=rss-668f1f3dbd5d------2</link>
            <guid isPermaLink="false">https://medium.com/p/20bec197c624</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[java]]></category>
            <category><![CDATA[csharp]]></category>
            <dc:creator><![CDATA[Cem Dırman]]></dc:creator>
            <pubDate>Wed, 28 Oct 2026 09:01:05 GMT</pubDate>
            <atom:updated>2026-10-28T09:01:05.598Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[C# & .NET for Java/Spring Developers-2]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@cemdrman/c-net-for-java-spring-developers-2-d63cbbe41a9b?source=rss-668f1f3dbd5d------2"><img src="https://cdn-images-1.medium.com/max/1344/1*L3MbE07ERGlCZUoErjcF3Q.png" width="1344"></a></p><p class="medium-feed-snippet">In Part 1 we compared project files and dotnet CLI basics. This time it&#x2019;s async. If you&#x2019;ve written a Spring Boot service that fans out to&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/@cemdrman/c-net-for-java-spring-developers-2-d63cbbe41a9b?source=rss-668f1f3dbd5d------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@cemdrman/c-net-for-java-spring-developers-2-d63cbbe41a9b?source=rss-668f1f3dbd5d------2</link>
            <guid isPermaLink="false">https://medium.com/p/d63cbbe41a9b</guid>
            <category><![CDATA[java]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[csharp]]></category>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[Cem Dırman]]></dc:creator>
            <pubDate>Tue, 27 Oct 2026 09:01:02 GMT</pubDate>
            <atom:updated>2026-10-27T09:01:02.648Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[C# & .NET for Java/Spring Developers-1]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@cemdrman/c-net-for-java-spring-developers-1-dd81614e643c?source=rss-668f1f3dbd5d------2"><img src="https://cdn-images-1.medium.com/max/1344/1*I4hR6-7xtOcnDRleWLGO4A.png" width="1344"></a></p><p class="medium-feed-snippet">If you&#x2019;ve spent years shipping Spring Boot services, C# and .NET will feel familiar within about ten minutes and then throw a few genuine&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/@cemdrman/c-net-for-java-spring-developers-1-dd81614e643c?source=rss-668f1f3dbd5d------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@cemdrman/c-net-for-java-spring-developers-1-dd81614e643c?source=rss-668f1f3dbd5d------2</link>
            <guid isPermaLink="false">https://medium.com/p/dd81614e643c</guid>
            <category><![CDATA[csharp]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[java]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Cem Dırman]]></dc:creator>
            <pubDate>Mon, 26 Oct 2026 09:01:04 GMT</pubDate>
            <atom:updated>2026-10-26T09:01:04.186Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Your API Gets Slower on Every Page: Keyset Pagination with Spring Data]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@cemdrman/your-api-gets-slower-on-every-page-keyset-pagination-with-spring-data-69ac065974cc?source=rss-668f1f3dbd5d------2"><img src="https://cdn-images-1.medium.com/max/1200/1*5X5UIjV5TQWxKTKVoVrLBg.png" width="1200"></a></p><p class="medium-feed-snippet">If you paginate with Pageable, you are using OFFSET pagination, and it has a property most people never notice in development: it gets&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/@cemdrman/your-api-gets-slower-on-every-page-keyset-pagination-with-spring-data-69ac065974cc?source=rss-668f1f3dbd5d------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@cemdrman/your-api-gets-slower-on-every-page-keyset-pagination-with-spring-data-69ac065974cc?source=rss-668f1f3dbd5d------2</link>
            <guid isPermaLink="false">https://medium.com/p/69ac065974cc</guid>
            <category><![CDATA[java]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[spring-data-jpa]]></category>
            <category><![CDATA[spring-boot]]></category>
            <category><![CDATA[performance-optimization]]></category>
            <dc:creator><![CDATA[Cem Dırman]]></dc:creator>
            <pubDate>Fri, 23 Oct 2026 08:51:01 GMT</pubDate>
            <atom:updated>2026-10-23T08:51:01.611Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Your save() Runs a SELECT Before Every INSERT — Blame Your UUID Keys]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@cemdrman/your-save-runs-a-select-before-every-insert-blame-your-uuid-keys-aa47e5f2f4a4?source=rss-668f1f3dbd5d------2"><img src="https://cdn-images-1.medium.com/max/1200/1*pTAx1xKmA1NzBqR20BXQAQ.png" width="1200"></a></p><p class="medium-feed-snippet">Turn on SQL logging, save a brand-new entity, and watch the console. You expect one line: an INSERT. Instead you get two &#x2014; a SELECT by&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/@cemdrman/your-save-runs-a-select-before-every-insert-blame-your-uuid-keys-aa47e5f2f4a4?source=rss-668f1f3dbd5d------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@cemdrman/your-save-runs-a-select-before-every-insert-blame-your-uuid-keys-aa47e5f2f4a4?source=rss-668f1f3dbd5d------2</link>
            <guid isPermaLink="false">https://medium.com/p/aa47e5f2f4a4</guid>
            <category><![CDATA[java]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[spring-boot]]></category>
            <category><![CDATA[spring-data-jpa]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Cem Dırman]]></dc:creator>
            <pubDate>Thu, 22 Oct 2026 09:01:02 GMT</pubDate>
            <atom:updated>2026-10-22T09:01:02.804Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Delete the switch: Spring Injects the Strategy Pattern for You]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@cemdrman/delete-the-switch-spring-injects-the-strategy-pattern-for-you-77b80c35048a?source=rss-668f1f3dbd5d------2"><img src="https://cdn-images-1.medium.com/max/1200/1*Pd_-su1nhUt3wierdTFVnA.png" width="1200"></a></p><p class="medium-feed-snippet">If you have written any Spring service, you have written this switch at least once. Something arrives with a type on it &#x2014; a payment method&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/@cemdrman/delete-the-switch-spring-injects-the-strategy-pattern-for-you-77b80c35048a?source=rss-668f1f3dbd5d------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@cemdrman/delete-the-switch-spring-injects-the-strategy-pattern-for-you-77b80c35048a?source=rss-668f1f3dbd5d------2</link>
            <guid isPermaLink="false">https://medium.com/p/77b80c35048a</guid>
            <category><![CDATA[design-pattern-in-java]]></category>
            <category><![CDATA[java]]></category>
            <category><![CDATA[software-design-patterns]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[spring-boot]]></category>
            <dc:creator><![CDATA[Cem Dırman]]></dc:creator>
            <pubDate>Wed, 21 Oct 2026 07:01:04 GMT</pubDate>
            <atom:updated>2026-10-21T07:01:04.122Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Your Heap Just Got Smaller in Java 27: Compact Object Headers]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@cemdrman/your-heap-just-got-smaller-in-java-27-compact-object-headers-9b6d8b62f63f?source=rss-668f1f3dbd5d------2"><img src="https://cdn-images-1.medium.com/max/1200/1*CpgXvqEDeE5E1Y-Fg072rQ.png" width="1200"></a></p><p class="medium-feed-snippet">If you upgraded a service to Java 27 and noticed the heap graph settle a notch lower without touching a line of code, you are looking at&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/@cemdrman/your-heap-just-got-smaller-in-java-27-compact-object-headers-9b6d8b62f63f?source=rss-668f1f3dbd5d------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@cemdrman/your-heap-just-got-smaller-in-java-27-compact-object-headers-9b6d8b62f63f?source=rss-668f1f3dbd5d------2</link>
            <guid isPermaLink="false">https://medium.com/p/9b6d8b62f63f</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[java27]]></category>
            <category><![CDATA[java]]></category>
            <category><![CDATA[software-engineering]]></category>
            <dc:creator><![CDATA[Cem Dırman]]></dc:creator>
            <pubDate>Tue, 20 Oct 2026 09:01:04 GMT</pubDate>
            <atom:updated>2026-10-20T09:01:04.099Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Your @Scheduled Job Runs Three Times. ShedLock Fixes That.]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@cemdrman/your-scheduled-job-runs-three-times-shedlock-fixes-that-0c63c741e606?source=rss-668f1f3dbd5d------2"><img src="https://cdn-images-1.medium.com/max/1200/1*uLz7rnKUvCSPzHd_mJUJ_g.png" width="1200"></a></p><p class="medium-feed-snippet">If you are coming from Spring Boot, @Scheduled feels like the whole job scheduler in one annotation. Add @EnableScheduling, drop&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/@cemdrman/your-scheduled-job-runs-three-times-shedlock-fixes-that-0c63c741e606?source=rss-668f1f3dbd5d------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@cemdrman/your-scheduled-job-runs-three-times-shedlock-fixes-that-0c63c741e606?source=rss-668f1f3dbd5d------2</link>
            <guid isPermaLink="false">https://medium.com/p/0c63c741e606</guid>
            <category><![CDATA[scheduling]]></category>
            <category><![CDATA[redis]]></category>
            <category><![CDATA[java]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[redis-lock]]></category>
            <dc:creator><![CDATA[Cem Dırman]]></dc:creator>
            <pubDate>Mon, 19 Oct 2026 07:36:01 GMT</pubDate>
            <atom:updated>2026-10-19T07:36:01.441Z</atom:updated>
        </item>
    </channel>
</rss>