tag:blogger.com,1999:blog-30193203266554150322024-03-19T01:07:13.090-07:00JavaOrçun Çolak'ın her şeyden bir parça notlarıUnknownnoreply@blogger.comBlogger1784125tag:blogger.com,1999:blog-3019320326655415032.post-85643460800619243322024-03-10T22:58:00.000-07:002024-03-15T05:45:51.294-07:00OpenRewrite<div><div><b>Giriş</b></div><div><b>OpenRewrite</b> bir static kod analiz aracı. Diğer araçlardan farklı olarak sadece rapor üretmiyor aynı zamanda kodu da değiştirebiliyor.</div><div><br /></div><div><b>1. dryRun Goal</b></div><div><b>target/rewrite </b>dizini altında bir patch dosyası oluşturur</div></div><div><br /></div><div><b>2. run Goal</b></div><div>Kodları direkt değiştirir</div><div><br /></div><div><b>3. Recipe Listesi</b></div><div><br /></div><div><b>3.1 CommonStaticAnalysis Recipe</b></div><div>Sanırım en işe yarayan recipe'lerden bir tanesi. Bur recipe ile yapılabilecek işlerin listesi burada</div><div><a href="https://docs.openrewrite.org/recipes/staticanalysis/commonstaticanalysis">https://docs.openrewrite.org/recipes/staticanalysis/commonstaticanalysis</a></div><div><br /></div><div><b>Örnek</b></div><div>Şöyle yaparız</div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div><plugin></div><div> <groupId>org.openrewrite.maven</groupId></div><div> <artifactId>rewrite-maven-plugin</artifactId></div><div> <version>5.23.1</version></div><div> <configuration></div><div> <activeRecipes></div><div> <recipe>org.openrewrite.staticanalysis.CommonStaticAnalysis</recipe></div><div> </activeRecipes></div><div> </configuration></div><div> <dependencies></div><div> <dependency></div><div> <groupId>org.openrewrite.recipe</groupId></div><div> <artifactId>rewrite-static-analysis</artifactId></div><div> <version>1.3.1</version></div><div> </dependency></div><div> </dependencies></div><div></plugin> </div></pre>
</div><div>Eğer proje çok büyükse sadece bazı şeyleri çalıştırmak için proje kök dizininde bir tane r<b>ewrite.yml</b> dosyası oluştururuz. Şöyle yaparız. Eğer proje multi-module ise yine en tepedeki dizine koymak lazım</div><div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;">---
type: specs.openrewrite.org/v1beta/recipe
name: orcun.CommonStaticAnalysis
displayName: Common static analysis issues
description: Resolve common static analysis issues discovered through 3rd party tools.
recipeList:
- org.openrewrite.staticanalysis.UseDiamondOperator</pre></div>
pom.xml şöyle olur.</div><div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div><plugin></div><div> <groupId>org.openrewrite.maven</groupId></div><div> <artifactId>rewrite-maven-plugin</artifactId></div><div> <version>5.23.1</version></div><div> <configuration></div><div> <activeRecipes></div><div> <recipe>orcun.CommonStaticAnalysis</recipe></div><div> </activeRecipes></div><div> </configuration></div><div> <dependencies></div><div> <dependency></div><div> <groupId>org.openrewrite.recipe</groupId></div><div> <artifactId>rewrite-static-analysis</artifactId></div><div> <version>1.3.1</version></div><div> </dependency></div><div> </dependencies></div><div></plugin> </div></pre></div><div><br /></div></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-29116108629211367332024-01-22T20:53:00.000-08:002024-01-22T20:53:16.214-08:00Project Panama - Bridge The Gap Between Java And Native Code<b>Giriş</b><div>Açıklaması <a href="https://medium.com/@AlexanderObregon/java-projects-loom-panama-and-valhalla-2a59b2e3fab2">şöyle</a></div>
<blockquote style="background-color: #eeeeee; border-bottom-color: initial; border-bottom-style: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: initial; border-right-style: initial; border-top-color: initial; border-top-style: initial; border-width: 0px 0px 0px 2px; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;">
<div>Project Panama represents a significant advancement in the Java ecosystem, primarily focusing on enhancing Java’s interaction with foreign APIs, particularly those written in languages like C and C++. Traditionally, Java used the Java Native Interface (JNI) to invoke foreign functions, but JNI had several limitations. Project Panama addresses these by removing the need to write native code wrappers in Java, replacing the ByteBuffer API with a more advanced Memory API, and introducing a secure, memory-efficient method to invoke native code from Java. The project comprises several key components, including the <b>Foreign-Function</b> and <b>Memory API</b>, the <b>Vector API</b>, and the <b>JExtract tool</b>.</div>
</blockquote>
<div><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-8688209490425209072024-01-19T22:47:00.000-08:002024-01-22T20:51:52.040-08:00 JEP-401 - Project Valhalla - Improve Java’s Memory Efficiency<b>Giriş</b><div>Java'nın kullandığı <b>Memory Model</b> özellikle <b>Integer[]</b> gibi yapılarda işlemcinin israf edilmesine sebep oluyor. Bunu gösteren bir şekil <a href="https://medium.com/@tomerr90/project-valhalla-javas-epic-quest-for-performance-immortality-a894db5e0577">burada</a></div><div><br /></div><div>Sebebi ise <a href="https://medium.com/@tomerr90/project-valhalla-javas-epic-quest-for-performance-immortality-a894db5e0577">şöyle</a>. </div>
<blockquote style="background-color: #eeeeee; border-bottom-color: initial; border-bottom-style: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: initial; border-right-style: initial; border-top-color: initial; border-top-style: initial; border-width: 0px 0px 0px 2px; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;">
<div>Accessing the value of an Integer (non-primitive) includes an extra memory access</div>
</blockquote>
<div>Çünkü her bir <b>Integer</b> için kullanılan <b>Metadata</b> nesnesi bellekte rastgele bir yerde duruyor</div><div>Bu da günümüzdeki modern işlemcilerde <b>CPU cache</b> israfına sebep oluyor</div><div><br /></div><div><b>Project Valhalla</b></div><div>İlk fikir 2014 yılında ortaya atıldı. Açıklaması <a href="https://medium.com/@tomerr90/project-valhalla-javas-epic-quest-for-performance-immortality-a894db5e0577">şöyle</a></div><div><blockquote style="background-color: #eeeeee; border-bottom-color: initial; border-bottom-style: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: initial; border-right-style: initial; border-top-color: initial; border-top-style: initial; border-width: 0px 0px 0px 2px; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;">... give the user the ability to flatten his objects and enjoy the performance of primitives in exchange for some limitations ...</blockquote><div>Kod olarak <a href="https://medium.com/@tomerr90/project-valhalla-javas-epic-quest-for-performance-immortality-a894db5e0577">şöyle</a></div></div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div>// Before</div><div>public class Point {</div><div> private final int x;</div><div> private final int y;</div><div>}</div><div><br /></div><div>// After</div><div>public primitive class Point {</div><div> private final int x;</div><div> private final int y;</div><div>}</div></pre>
</div><div><br /></div><div><br /></div><div><div><br /></div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-28557706934133688422024-01-07T22:28:00.000-08:002024-01-07T22:32:04.087-08:00GSON Kullanımı<b>Maven</b><div>Şu satırı dahil <a href="https://dzone.com/articles/mastering-json-handling-with-gson-in-java">ederiz</a></div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div><dependency></div><div> <groupId>com.google.code.gson</groupId></div><div> <artifactId>gson</artifactId></div><div> <version>2.8.9</version></div><div></dependency></div></pre>
</div><div><b>Gson Sınıfı</b></div><div><a href="https://gunceljava.blogspot.com/2016/11/gson-gson-snf.html">Gson</a> Sınıfı <b>toJson()</b> ile nesneyi JSON String'e çevirir. <b>fromJson()</b> ile JSON String'den nesneye çevirir</div><div><br /></div><div><b>@SerializedName Anotasyonu</b></div><div><a href="https://gunceljava.blogspot.com/2017/01/gson-serializedname-annotation.html">@SerializedName</a> Anotasyonu yazısına taşıdım</div><div><br /></div><div><b>@Expose Anotasyonu</b></div><div><a href="https://gunceljava.blogspot.com/2017/11/gson-expose-anotasyonu.html">@Expose</a> Anotasyonu yazısına taşıdım</div><div><br /></div><div><b>@Since Anotasyonu</b></div><div><a href="https://gunceljava.blogspot.com/2024/01/gson-since-anotasyonu-specify-version.html">@Since</a> Anotasyonu yazısına taşıdım</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-78475716758180800932024-01-07T22:25:00.000-08:002024-01-07T22:25:28.133-08:00Gson @Since Anotasyonu - Specify Version Information For Fields<b>Örnek</b><div>Şöyle <a href="https://dzone.com/articles/mastering-json-handling-with-gson-in-java">yaparız</a></div>
<pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div>import com.google.gson.annotations.Since;</div><div><div>import com.google.gson.annotations.Until;</div><div><br /></div><div>public class Product {</div><div> @Since(1.0)</div><div> private String name;</div><div> @Until(2.0)</div><div> private double price;</div><div><br /></div><div> // getters and setters</div><div>}</div></div></pre>
<div><br /></div><div><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-53472818550126349162024-01-02T22:25:00.000-08:002024-01-02T22:27:58.266-08:00Hikari API HikariDataSource Sınıfı<div><b>Giriş</b></div><div>Şu satırı dahil <a href="https://medium.com/@itwasneo/scale-your-db-with-kafka-connect-part-2-716edf8f2770">ederiz</a></div><div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><span style="color: #101094;">import</span> com.zaxxer.hikari.<span style="color: #2b91af;">HikariDataSource</span>;</pre></div><div><div><b>constructor</b></div><div><b>Örnek</b></div><div>Hikari sayfasındaki örnek <a href="https://github.com/brettwooldridge/HikariCP#frequently-used">şöyle</a></div><div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><span style="color: #2b91af;">HikariConfig</span> config = ...
<span style="color: #2b91af;">HikariDataSource</span> ds = <span style="color: #101094;">new</span> <span style="color: #2b91af;">HikariDataSource</span>(config);</pre></div><div><b>isClosed metodu</b></div></div></div></div><div>Sınıf şöyle</div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;">public class HikariDataSource extends HikariConfig implements DataSource, Closeable {
...
private final AtomicBoolean isShutdown = new AtomicBoolean();
...
}</pre></div><div>Metodun içi şöyle</div><div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;">public boolean isClosed() {
return isShutdown.get();
}</pre></div><div><br /></div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-40829747149105965162024-01-01T23:24:00.000-08:002024-01-01T23:24:40.074-08:00JEP 359 record ve Builder<b>Örnek</b><div><div>Elimizde şöyle bir kod <a href="https://dzone.com/articles/migrating-from-lombok-to-records-in-java">olsun</a></div>
<pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div>public record FilmWithRecord(String title, String director, int releaseYear) {</div><div><div> </div><div> public static class Builder {</div><div> private String title;</div><div> private String director;</div><div> private int releaseYear;</div><div><br /></div><div> public Builder title(String title) {</div><div> this.title = title;</div><div> return this;</div><div> }</div><div><br /></div><div> public Builder director(String director) {</div><div> this.director = director;</div><div> return this;</div><div> }</div><div><br /></div><div> public Builder releaseYear(int releaseYear) {</div><div> this.releaseYear = releaseYear;</div><div> return this;</div><div> }</div><div><br /></div><div> public FilmWithRecord build() {</div><div> return new FilmWithRecord(title, director, releaseYear);</div><div> }</div><div> }</div><div>}</div></div></pre>
<div><div>Kullanmak için şöyle <a href="https://dzone.com/articles/migrating-from-lombok-to-records-in-java">yaparız</a></div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div><div>// Example of using the builder:</div><div>FilmWithRecord film = new FilmWithRecord</div><div> .Builder()</div><div> .title("The Dark Knight")</div><div> .director("Christopher Nolan")</div><div> .releaseYear(2008)</div><div> .build();</div></div>
</pre><div><br /></div></div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-7639053619227653432023-12-26T02:30:00.000-08:002023-12-26T02:41:54.114-08:00Logback logback.xml FileAppender Tanımlama<b>Örnek</b><div>Şöyle <a href="https://medium.com/@manthapavankumar11/effective-logging-practices-for-spring-boot-applications-c1b382b28853">yaparız</a>. Burada farklı log seviyeleri farklı dosyalara gönderiliyor. <b>ch.qos.logback.classic.filter.ThresholdFilter</b> ve <b>ch.qos.logback.classic.filter.LevelFilter</b> kullanılıyor. </div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div><?xml version="1.0" encoding="UTF-8"?></div><div><configuration status="WARN"></div><div><br /></div><div> <property name="logging.error.file.name" value="error-log" /></div><div> <property name="logging.error.file.path" value="./"/></div><div> <property name="logging.file.name" value="info-log" /></div><div> <property name="logging.file.path" value="./"/></div><div><br /></div><div> <span style="color: grey;"><!-- Normal log appender --></span></div><div> <appender name="INFO_FILE" class="ch.qos.logback.core.FileAppender"></div><div> <file>${logging.file.path}/${logging.file.name}</file></div><div> <encoder></div><div> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></div><div> </encoder></div><div> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"></div><div> <level>INFO, DEBUG, TRACE</level></div><div> </filter></div><div> <filter class="ch.qos.logback.classic.filter.LevelFilter"></div><div> <level>ERROR, WARN</level></div><div> <onMatch>DENY</onMatch></div><div> <onMisMatch>NEUTRAL</onMisMatch></div><div> </filter></div><div> </appender></div><div><br /></div><div> <span style="color: grey;"><!-- Error log appender --></span></div><div> <appender name="ERROR_FILE" class="ch.qos.logback.core.FileAppender"></div><div> <file>${logging.error.file.path}/${logging.error.file.name}</file></div><div> <encoder></div><div> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></div><div> </encoder></div><div> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"></div><div> <level>ERROR, WARN</level></div><div> </filter></div><div> <filter class="ch.qos.logback.classic.filter.LevelFilter"></div><div> <level>INFO, DEBUG, WARN</level></div><div> <onMatch>DENY</onMatch></div><div> <onMisMatch>NEUTRAL</onMisMatch></div><div> </filter></div><div> </appender></div><div><br /></div><div> <root level="INFO"></div><div> <appender-ref ref="INFO_FILE"/></div><div> <appender-ref ref="ERROR_FILE"/></div><div> </root></div><div></configuration></div></pre>
</div><div>Açıklaması şöyle</div><div>
<blockquote style="background-color: #eeeeee; border-bottom-color: initial; border-bottom-style: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: initial; border-right-style: initial; border-top-color: initial; border-top-style: initial; border-width: 0px 0px 0px 2px; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;">
<div>- Trace < Debug < Info < Warn < Error < Fatal</div><div><br /></div><div>- <b>LevelFilter</b> filters events based on exact level matching. If the event's level is equal to the configured level, the filter accepts or denies the event, depending on the configuration of the onMatch and onMismatch properties.</div><div><br /></div><div>- The <b>ThresholdFilter</b> filters events below the specified threshold. </div>
</blockquote>
</div><div>1. <b>Normal appender</b> ThresholdFilter ile INFO, DEBUG, TRACE olaylarının altındakileri kabul etmez. </div><div><br /></div><div>2. <b>Error appender</b> ThresholdFilter ile ERROR, WARN olaylarının altındakileri kabul etmez.</div><div><br /></div><div><br /></div><div><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-57686587681231890452023-12-14T05:30:00.000-08:002024-01-12T01:20:01.564-08:00TestContainers LocalStackContainer Sınıfı - SQS İle Kullanım<div><b>Örnek</b></div><div>1. Şöyle yaparız. Burada SQS_ENDPOINT_STRATEGY path veriliyor. Böylece kuyruğa erişmek için üretilen URL <b>http://localhost:8701/queue/us-east-1/000000000000/myqueue </b>şeklinde oluyor. Eğer böyle yapmazsak <b>UnknownHostException</b> alırız</div><div>2. Eğer istenirse awslocal komutu container içinde çalıştırılabilir.</div><div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><span style="color: maroon;">@ClassRule</span>
<span style="color: #101094;">public static</span> <span style="color: #2b91af;">LocalStackContainer</span> container =
<span style="color: #101094;">new</span> <span style="color: #2b91af;">LocalStackContainer</span>(<span style="color: #2b91af;">DockerImageName</span>.parse(<span style="color: maroon;">"localstack/localstack:3.0.2"</span>))
.withServices(<span style="color: #2b91af;">LocalStackContainer</span>.<span style="color: #2b91af;">Service</span>.SQS)
.withEnv(<span style="color: maroon;">"SQS_ENDPOINT_STRATEGY"</span>, <span style="color: maroon;">"path"</span>); <span style="color: grey;">// Burası</span>
<span style="color: maroon;">@BeforeClass</span>
<span style="color: #101094;">public static void</span> beforeClass() {
container.execInContainer(<span style="color: maroon;">"awslocal"</span>,
<span style="color: maroon;">"sqs"</span>,
<span style="color: maroon;">"create-queue"</span>,
<span style="color: maroon;">"--queue-name"</span>,
<span style="color: maroon;">"myqueue"</span>);
}</pre></div><div>SQSClient ile kullanmak için şöyle yaparız. SQSClient <b>aws.accessKeyId</b> ve <b>aws.secretKey </b>değişkenlerini istiyor. Yoksa "Unable to load AWS credentials from any provider in the chain ..." hatası alırız</div></div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><span style="color: #101094;">void</span> insertData() <span style="color: #101094;">throws</span> <span style="color: #2b91af;">URISyntaxException</span> {
<span style="color: #2b91af;">System</span>.setProperty(<span style="color: maroon;">"aws.accessKeyId"</span>, container.getAccessKey());
<span style="color: #2b91af;">System</span>.setProperty(<span style="color: maroon;">"aws.secretKey"</span>, container.getSecretKey());
<span style="color: #2b91af;">SqsClient</span> sqs = <span style="color: #2b91af;">SqsClient</span>.builder()
.endpointOverride(container.getEndpointOverride(<span style="color: #2b91af;">LocalStackContainer</span>.<span style="color: #2b91af;">Service</span>.SQS))
.credentialsProvider(
<span style="color: #2b91af;">StaticCredentialsProvider</span>.create(
<span style="color: #2b91af;">AwsBasicCredentials</span>.create(container.getAccessKey(), container.getSecretKey())
)
)
.region(<span style="color: #2b91af;">Region</span>.of(container.getRegion()))
.build();
...
}</pre></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-90146617554398394392023-12-13T03:19:00.000-08:002023-12-13T03:36:27.442-08:00Lettuce - Redis Stream Örnekleri<div><b>xadd metodu</b></div><div>İmzası şöyle. Stream'e yeni veri ekler</div><div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><span style="color: #2b91af;">String</span> xadd(K key, <span style="color: #2b91af;">Map</span><K, V> body);</pre></div><div><b>Örnek</b></div></div><div>Bu örnekte <b>Lettuce</b> ile <b>Testcontainers</b> ile başlatılan <b>Redis Stream</b>'e veri yazılıyor. Örneğin bir kısmını <a href="https://redis.com/blog/getting-started-with-redis-streams-and-java/">Getting Started with Redis Streams and Java</a> yazısından aldım</div><div><br /></div><div>Maven için şu satırı dahil ederiz</div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div><span style="color: maroon;"><dependency></span></div><div><span style="color: maroon;"> <groupId></span><span>com.redis</span><span style="color: maroon;"></groupId>
<artifactId></span><span>testcontainers-redis</span><span style="color: maroon;"></artifactId>
<version></span><span>2.0.1</span><span style="color: maroon;"></version>
<scope></span><span>test</span><span style="color: maroon;"></scope>
</dependency>
<dependency>
<groupId></span><span>io.lettuce</span><span style="color: maroon;"></groupId>
<artifactId></span><span>lettuce-core</span><span style="color: maroon;"></artifactId>
<version></span><span>6.2.3.RELEASE</span><span style="color: maroon;"></version>
</dependency></span></div></pre></div><div>Şöyle yaparız. Burada <b>JUnit4</b> kullanıldığı için <b>@ClassRule</b> anotasyonu var.</div><div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><span style="color: #101094;">import</span> com.redis.testcontainers.<span style="color: #2b91af;">RedisContainer</span>;
<span style="color: maroon;">@ClassRule</span>
<span style="color: #101094;">public static final</span> <span style="color: #2b91af;">RedisContainer</span> container =
<span style="color: #101094;">new</span> <span style="color: #2b91af;">RedisContainer</span>(<span style="color: #2b91af;">DockerImageName</span>.parse(<span style="color: maroon;">"redis:6.2.6"</span>))
.withLogConsumer(<span style="color: #101094;">new</span> <span style="color: #2b91af;">Slf4jLogConsumer</span>(LOGGER).withPrefix(<span style="color: maroon;">"Docker"</span>));</pre></div><div>Veri ile doldururuz. Şöyle yaparız. Artık aboneler veriyi okuyabilir.</div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><span style="color: #101094;">import</span> io.lettuce.core.<span style="color: #2b91af;">RedisClient</span>;
<span style="color: #101094;">import</span> io.lettuce.core.api.<span style="color: #2b91af;">StatefulRedisConnection</span>;
<span style="color: #101094;">import</span> io.lettuce.core.api.sync.<span style="color: #2b91af;">RedisCommands</span>;
<span style="color: #101094;">void</span> insertData() {
<span style="color: #2b91af;">String</span> redisURI = container.getRedisURI();
<span style="color: #101094;">try</span> (<span style="color: #2b91af;">RedisClient</span> client = <span style="color: #2b91af;">RedisClient</span>.create(redisURI);
StatefulRedisConnection<String, String> connection = client.connect()) {
<span style="color: #2b91af;">RedisCommands</span><<span style="color: #2b91af;">String</span>, <span style="color: #2b91af;">String</span>> syncCommands = connection.sync();
<span style="color: #101094;">for</span> (<span style="color: #101094;">int</span> index = <span style="color: maroon;">0</span>; index < ITEM_COUNT; index++) {
<span style="color: grey;">// Redis Streams messages are string key/values in Java.</span>
<span style="color: #2b91af;">Map</span><<span style="color: #2b91af;">String</span>, <span style="color: #2b91af;">String</span>> messageBody = createMessageBody(index);
<span style="color: #2b91af;">String</span> messageId = syncCommands.xadd(
STREAM_NAME,
messageBody);
LOGGER.info(<span style="color: maroon;">"Message {} : {} posted"</span>, messageId, messageBody);
}
}
}
<span style="color: #2b91af;">Map</span><<span style="color: #2b91af;">String</span>, <span style="color: #2b91af;">String</span>> createMessageBody(int index) {
<span style="color: #2b91af;">Map</span><<span style="color: #2b91af;">String</span>, <span style="color: #2b91af;">String</span>> messageBody = <span style="color: #101094;">new</span> <span style="color: #2b91af;">HashMap</span><>();
messageBody.put(<span style="color: maroon;">"speed"</span>, <span style="color: #2b91af;">String</span>.valueOf(index));
messageBody.put(<span style="color: maroon;">"direction"</span>, <span style="color: maroon;">"270"</span>);
messageBody.put(<span style="color: maroon;">"sensor_ts"</span>, <span style="color: #2b91af;">String</span>.valueOf(<span style="color: #2b91af;">System</span>.currentTimeMillis()));
<span style="color: #101094;">return</span> messageBody;
}</pre></div></div><div><br /></div><div><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-44930683878717629592023-12-12T00:22:00.000-08:002023-12-12T00:43:02.261-08:00JDBC Sürücüsü Yazma<b>Giriş</b><div>Böyle bir şey ilk defa hazelcast-jdbc projesinin <a href="https://github.com/hazelcast/hazelcast-jdbc/tree/main/hazelcast-jdbc-core">hazelcast-jdbc-core</a> modülünde şahit oldum</div><div><br /></div><div>Bize gereken sınıflar şöyle</div><div><div>java.sql.Connection</div><div>java.sql.Driver</div><div>java.sql.DatabaseMetaData</div><div>java.sql.PreparedStatement</div><div>java.sql.ResultSet</div><div>java.sql.ResultSetMetaData</div><div>java.sql.Statement</div></div><div><br /></div><div><b>java.sql.DriverManager Sınıfı</b></div><div>java.sql.DriverManager sınıfından kalıtmaya gerek yok. Açıklaması <a href="https://www.infoworld.com/article/2074249/create-your-own-type-3-jdbc-driver--part-1.html">şöyle</a></div>
<blockquote style="background-color: #eeeeee; border-bottom-color: initial; border-bottom-style: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: initial; border-right-style: initial; border-top-color: initial; border-top-style: initial; border-width: 0px 0px 0px 2px; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;">
<div>The DriverManager class included with the java.sql package tracks the loaded JDBC drivers. The client application retrieves the desired database connections through the DriverManager class</div>
</blockquote>
<div><b>getConnection metodu</b></div><div>java.sql.DriverManager#getConnection("jdbc:...") metodu kendisine kayıtlı tüm Driver nesnelerine teker teker belirtilen JDBC adresini kabul edip etmediğini sorar. Kabul eden yani bağlantı açan ilk Driver nesnesini döndürür.</div><div><br /></div><div><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-64855000850992658612023-12-12T00:03:00.000-08:002023-12-12T00:06:44.436-08:00JPA TypedQuery Arayüzü ve Sayfalama<b>Giriş</b><div>Sayfalama şu çağrılar ile yapılır</div><div><div>.setFirstResult(offset)</div><div>.setMaxResults (pageSize)</div><div>.getResultList ()</div></div><div><br /></div><div><b>Örnek</b></div><div>Post nesnelerini çekmek için şöyle <a href="https://dzone.com/articles/jpa-criteria-with-pagination">yaparız</a></div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><code style="border: 0px; box-sizing: inherit; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;"><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">public List<Post> filterPosts(Integer size, Integer offset) {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Post> criteriaQuery = criteriaBuilder.createQuery(Post.class);
Root<Post> root = criteriaQuery.from(Post.class);
// Optional: Add selection criteria/predicates
// List<Predicate> predicates = new ArrayList<>();
// predicates.add(criteriaBuilder.equal(root.get("status"), "published"));
// CriteriaQuery<Post> query = criteriaQuery.where(predicates);
List<Post> postList = entityManager
.createQuery(criteriaQuery)
.setFirstResult(offset)
.setMaxResults(size)
.getResultList();
return postList;
}</span></code></pre><div>Şöyle <a href="https://dzone.com/articles/jpa-criteria-with-pagination">yaparız</a></div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><code style="border: 0px; box-sizing: inherit; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;"><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">int totalItemsCount(Predicate finalPredicate) {
try {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> criteriaQuery = criteriaBuilder.createQuery(Long.class);
Root<Post> root = criteriaQuery.from(Post.class);
// Optional: If joins are involved, you need to specify
// Join<Post, Comments> joinComments = root.join("comments");
return Math.toIntExact(
entityManager.createQuery(
criteriaQuery.select(criteriaBuilder.count(root)).where(finalPredicate))
.getSingleResult());
} catch (Exception e) {
log.error("Error fetching total count: {}", e.getMessage());
}
return 0;
}</span></code></pre></div></div><div><br /></div><div><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-37697880471325993282023-12-08T04:32:00.000-08:002023-12-08T04:45:03.824-08:00new BigDecimal() ve BigDecimal.valueOf() Farkı<div><b>Giriş</b></div><div>1. <b>new BigDecimal(double)</b> ile girdiğimiz değeri geri alamayabiliriz</div><div>2. <b>BigDecimal.valueOf()</b> ile girdiğimiz değeri geri alırız. </div><div><br /></div><div>Açıklaması <a href="https://raphaeldelio.medium.com/the-difference-between-new-bigdecimal-and-bigdecimal-valueof-f08a4b7ce36d">şöyle</a></div><div>
<blockquote style="background-color: #eeeeee; border-bottom-color: initial; border-bottom-style: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: initial; border-right-style: initial; border-top-color: initial; border-top-style: initial; border-width: 0px 0px 0px 2px; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;">
<div>It’s all about how doubles are stored in binary. For instance, if you do <b>new BigDecimal(0.1)</b>, you won’t just get<b> 0.1</b>. You’ll end up with a really precise value like <b>0.1000000000000000055511151231257827021181583404541015625</b>. It’s because <b>0.1</b> can’t be perfectly represented in binary.</div><div>...</div><div>That’s why <b>BigDecimal.valueOf</b> is often preferred. It’s more about what you see and expect. But if you need extreme precision, like in scientific calculations, then new BigDecimal is your go-to.</div>
</blockquote>
</div><div><b>1. new BigDecimal(doble) metodu</b></div><div>Açıklaması <a href="http://stackoverflow.com/questions/43931672/bigdecimal-adding-wrong-value">şöyle</a>. <b>BigDecimal</b> double ile yaratılırsa verdiğimiz sayıyı geri <b>alamayabiliriz</b><br /><blockquote style="background-color: #eeeeee; border-bottom-color: initial; border-bottom-style: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: initial; border-right-style: initial; border-top-color: initial; border-top-style: initial; border-width: 0px 0px 0px 2px; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;">When a double must be used as a source for a <b>BigDecimal</b>, note that this constructor provides an exact conversion; it does not give the same result as converting the double to a String using the Double.toString(double) method and then using the BigDecimal(String) constructor. To get that result, use the static valueOf(double) method.</blockquote></div><div><div dir="ltr" trbidi="on"><b>Örnek</b></div><div dir="ltr" trbidi="on">Şu kod farklı çıktı <a href="https://medium.com/@malvin.lok/do-you-really-know-how-to-use-bigdecimal-in-java-d1337f8642b3">veriyor</a>. Çünkü <b>BigDecimal.valueOf(double)</b> çağrısı double değeri <b>shortest decimal representation</b> kullanark String'e çeviriyor.</div><div dir="ltr" trbidi="on"><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, serif; margin: 0px; padding: 0px; white-space: inherit;"><span class="pun" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">@Test</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="pun" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">public void</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;"> testUsingBigDecimal(){
</span><span class="pun" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">BigDecimal</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;"> a = </span><span class="pun" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">new</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">BigDecimal</span><span class="pun" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">(0.01</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">);
</span><span class="pun" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">BigDecimal</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;"> b = </span><span class="pun" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">BigDecimal</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">.valueOf(</span><span class="pun" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">0.01</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">);
</span><span class="pun" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">System</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">.out.println(</span><span class="pun" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">"a = "</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;"> + a);
</span><span class="pun" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">System</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">.out.println(</span><span class="pun" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">"b = "</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;"> + b);
}
</span><span class="pun" style="border: 0px; color: grey; margin: 0px; padding: 0px;">//output
//a = 0.01000000000000000020816681711721685132943093776702880859375
//b = 0.01</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span></code></pre></div></div><div><b>Örnek</b><br /><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, serif; margin: 0px; padding: 0px; white-space: inherit;"><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">System</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">.</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">out</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">.</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">println</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">(</span><span class="kwd" style="border: 0px; color: darkblue; margin: 0px; padding: 0px;">new</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">BigDecimal</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">(</span><span class="lit" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">58.34</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">));</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span></code></pre>Bu kod çıktı olarak <b>58.340000000000003410605131648480892181396484375</b> sayısını verir.<br />Çünkü <b>58.34</b> sayısı double ile tam temsil <b>edilemez</b>.<br /><br /><b>Örnek</b><br /><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">BigDecimal</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> bd </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">new</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">BigDecimal</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">(</span><span class="lit" style="border: 0px; color: #7d2727; margin: 0px; padding: 0px;">0.7d</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">);</span></code></pre>Çıktı olarak şunu alırız.<br /><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"><span class="lit" style="border: 0px; color: #7d2727; margin: 0px; padding: 0px;">0.6999999999999999555910790149937383830547332763671875</span></code></pre></div><div><b>2. BigDecimal.valueOf() metodu</b></div><div>Açıklaması <a href="http://stackoverflow.com/questions/43931672/bigdecimal-adding-wrong-value">şöyle</a><br /><blockquote style="background-color: #eeeeee; border-bottom-color: initial; border-bottom-style: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: initial; border-right-style: initial; border-top-color: initial; border-top-style: initial; border-width: 0px 0px 0px 2px; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;">Note: This is generally the preferred way to convert a double (or float) into a BigDecimal, as the value returned is equal to that resulting from constructing a BigDecimal from the result of using Double.toString(double).</blockquote></div><div>valueOf() alt tarafta şuna benzer bir şekilde çalışıyor. Verilen double sayıyı String'e çevriliyor. String'e çevrimde <b>"shortest decimal representation"</b> kullanıyor. Böylece <b>0.015</b> aslında double ile <b>tam temsil</b> edilemese bile String'e çevrimde 0.015 çıktığı için <b>doğr</b>u BigDecimal değeri elde <a href="http://stackoverflow.com/questions/32831308/why-does-new-bigdecimal0-015-comparetonew-bigdecimal0-015-return-1">ediyoruz</a>.<br /><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"><span class="kwd" style="border: 0px; color: darkblue; margin: 0px; padding: 0px;">new</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">BigDecimal </span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">(</span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">Double</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">.</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">toString</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">(</span><span class="lit" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">0.015</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">))</span></code></pre><div><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;"><br /></span></code></div><b></b></div><div><b><br /></b></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-24946950985469044362023-12-06T02:28:00.000-08:002023-12-06T02:31:54.683-08:00JPA @OneToOne Bidirectional İlişki<div dir="ltr" trbidi="on"><b>Giriş</b></div><div dir="ltr" trbidi="on">OneToOne ilişki tek veya çift yönlü olabilir. Açıklaması <a href="https://blog.ippon.tech/boost-the-performance-of-your-spring-data-jpa-application/amp/?__twitter_impression=true">şöyle</a>.<br /><blockquote style="background-color: #eeeeee; border-bottom-color: initial; border-bottom-style: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: initial; border-right-style: initial; border-top-color: initial; border-top-style: initial; border-width: 0px 0px 0px 2px; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;">For this relationship type, the default data loading method is <b>EAGER</b>: every time you ask for A, the B will also be retrieved.</blockquote>Bu ilişki EAGER. Açıklaması <a href="https://stackoverflow.com/questions/27519399/why-is-the-jpa-fetchtype-eager-by-default-for-the-manytoone-relationship">şöyle</a><br /><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><code style="border: 0px; box-sizing: inherit; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;"><span class="typ" style="border: 0px; box-sizing: inherit; color: #2b91af; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">OneToMany</span><span class="pun" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">:</span><span class="pln" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> LAZY
</span><span class="typ" style="border: 0px; box-sizing: inherit; color: #2b91af; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">ManyToOne</span><span class="pun" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">:</span><span class="pln" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> EAGER
</span><span class="typ" style="border: 0px; box-sizing: inherit; color: #2b91af; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">ManyToMany</span><span class="pun" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">:</span><span class="pln" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> LAZY
</span><span class="typ" style="border: 0px; box-sizing: inherit; color: #2b91af; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">OneToOne</span><span class="pun" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">:</span><span class="pln" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> EAGER</span></code></pre></div><div dir="ltr" trbidi="on"><b>Bidirectional İlişki iki şekilde olabilir.</b></div><div dir="ltr" trbidi="on">1. Primary key ve foreign key farklı sütunlar</div><div dir="ltr" trbidi="on">2. Primary key ve foreign key aynı</div><div dir="ltr" trbidi="on"><br /></div><div dir="ltr" trbidi="on">İlişkinim çift taraflı olması için Parent tarafa mutlaka zaten <b>mappedBy</b> yazmak gerekiyor. Şeklen <a href="https://www.youtube.com/watch?v=GRV69QNSdVg">şöyle</a></div><div dir="ltr" trbidi="on"><div class="separator" style="clear: both;"><br /></div><div dir="ltr" trbidi="on"><br /></div><div dir="ltr" trbidi="on"><b>1. Primary key ve foreign key farklı sütunlar</b></div></div><div dir="ltr" trbidi="on">Child üzerinde <b>@JoinColumn</b> kullanır. Şeklen <a href="https://www.youtube.com/watch?v=GRV69QNSdVg">şöyle</a>. Burada her iki sütun için de indeks gerekiyor</div><div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEispkT_t_OqRcu7PRzdZ-bhA4QVT0jBiMgeh_EsvdgXQ7q57cLX3MfgsSBKJTHrjTezFA9pcVxCfDjWxY4C-OJogcvNygldjsbWW5hwnEGqEnEu14OTmOCqrx5eHqqbX0iIid6ZjRLqSIbSppz8wzCcraqDDfR1vbdasfyV1fvsADbjVG-rF7UBB2br/s890/uni_onetoone.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="515" data-original-width="890" height="370" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEispkT_t_OqRcu7PRzdZ-bhA4QVT0jBiMgeh_EsvdgXQ7q57cLX3MfgsSBKJTHrjTezFA9pcVxCfDjWxY4C-OJogcvNygldjsbWW5hwnEGqEnEu14OTmOCqrx5eHqqbX0iIid6ZjRLqSIbSppz8wzCcraqDDfR1vbdasfyV1fvsADbjVG-rF7UBB2br/w640-h370/uni_onetoone.png" width="640" /></a></div><div class="separator" style="clear: both;"><br /></div><div dir="ltr" trbidi="on"><br /></div><div dir="ltr" trbidi="on"><b>Örnek</b></div><div dir="ltr" trbidi="on">Şöyle <a href="http://stackoverflow.com/questions/32644033/one-to-one-relationship-hibernate-results-in-many-queries">yaparız</a>. <b>mappedBy</b> ile diğer sınıftaki alanı veriyoruz.<br /><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"><span class="lit" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">@Entity</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="lit" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">@Table</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">(</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">name </span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">"PERSON"</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">)</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: darkblue; margin: 0px; padding: 0px;">public</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="kwd" style="border: 0px; color: darkblue; margin: 0px; padding: 0px;">class</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">Person</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">{</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="lit" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">@OneToOne</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">(</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">mappedBy </span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">"person"</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">,</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> cascade </span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">CascadeType</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">.</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">ALL</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">)</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: darkblue; margin: 0px; padding: 0px;">private</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">DrivingLicense</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> drivingLicense</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">;</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">}</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="lit" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">@Entity</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="lit" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">@Table</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">(</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">name </span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">"DRIVING_LICENSE"</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">)</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: darkblue; margin: 0px; padding: 0px;">public</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="kwd" style="border: 0px; color: darkblue; margin: 0px; padding: 0px;">class</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">DrivingLicense</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">{</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="lit" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">@OneToOne</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="lit" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">@JoinColumn</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">(</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">name </span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">"PERSON_ID"</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">,</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> unique </span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="kwd" style="border: 0px; color: darkblue; margin: 0px; padding: 0px;">true</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">)</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: darkblue; margin: 0px; padding: 0px;">private</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">Person</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> person</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">;</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">}</span></code></pre><div dir="ltr" style="font-weight: bold;" trbidi="on">2. Primary key ve foreign key aynı</div><div dir="ltr" trbidi="on"><span>Child tarafta </span><b>@PrimaryKeyJoinColumn</b> kullanılır. <span>Şeklen </span><a href="https://www.youtube.com/watch?v=GRV69QNSdVg">şöyle</a><span>.</span></div><div dir="ltr" style="font-weight: bold;" trbidi="on"><div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN1sQeGXEgW3M0DsIWrlq4q3tdkCrT-v94vJ-24eMR168XHVgNV66qEBE9QxqhYEik1R3HlVHQf_5PDAdUMTlLygKx5rDz0pjN-WFenqU12H06-SKTxqc9GyZrre4c8y88yigLxGYFUkf2GOTPqhtMr4v1Ug7OEcIx8a-QEp9Xrw6K5JR9i2vvo43P/s1014/uni_onetoone.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="529" data-original-width="1014" height="334" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN1sQeGXEgW3M0DsIWrlq4q3tdkCrT-v94vJ-24eMR168XHVgNV66qEBE9QxqhYEik1R3HlVHQf_5PDAdUMTlLygKx5rDz0pjN-WFenqU12H06-SKTxqc9GyZrre4c8y88yigLxGYFUkf2GOTPqhtMr4v1Ug7OEcIx8a-QEp9Xrw6K5JR9i2vvo43P/w640-h334/uni_onetoone.png" width="640" /></a></div><br /><span style="font-weight: 400;"><br /></span></div><div dir="ltr" style="font-weight: bold;" trbidi="on">Örnek</div><div dir="ltr" style="font-weight: bold;" trbidi="on"><div style="font-weight: 400;">Burada <b>@PrimaryKeyJoinColumn</b> ile her iki sınıfın da aynı Id değerine sahip olması sağlanıyor. Parent tarafında şöyle yaparız</div><div style="font-weight: 400;"><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><code style="border: 0px; box-sizing: inherit; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;"><span class="pun" style="border: 0px; box-sizing: inherit; color: maroon; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">@Entity</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">
</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #101094; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">public class</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="pun" style="border: 0px; box-sizing: inherit; color: #2b91af; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">Employee</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #101094; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">{
</span><span class="pun" style="border: 0px; box-sizing: inherit; color: maroon; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">@Id</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">
</span><span class="pun" style="border: 0px; box-sizing: inherit; color: maroon; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">@GeneratedValue</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">(strategy = </span><span class="pun" style="border: 0px; box-sizing: inherit; color: #2b91af; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">GenerationType</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">.IDENTITY)
</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #101094; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">private</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="pun" style="border: 0px; box-sizing: inherit; color: #2b91af; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">Integer</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> id;
...
</span><span class="pun" style="border: 0px; box-sizing: inherit; color: maroon; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">@OneToOne</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">(mappedBy = </span><span class="pun" style="border: 0px; box-sizing: inherit; color: maroon; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">"employee"</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">, cascade = </span><span class="pun" style="border: 0px; box-sizing: inherit; color: #2b91af; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">CascadeType</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">.ALL)
</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #101094; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">private</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="pun" style="border: 0px; box-sizing: inherit; color: #2b91af; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">ParkingSpace</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> parkingSpace;
}<br /></span></code></pre>Child tarafında şöyle yaparız</div><div style="font-weight: 400;"><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><code style="border: 0px; box-sizing: inherit; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;"><span class="pun" style="border: 0px; box-sizing: inherit; color: maroon; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">@Entity</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">
public class </span><span class="pun" style="border: 0px; box-sizing: inherit; color: #2b91af; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">ParkingSpace</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> {
</span><span class="pun" style="border: 0px; box-sizing: inherit; color: maroon; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">@Id
@GeneratedValue</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">(strategy = </span><span class="pun" style="border: 0px; box-sizing: inherit; color: #2b91af; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">GenerationType</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">.IDENTITY)
</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #101094; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">private</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="pun" style="border: 0px; box-sizing: inherit; color: #2b91af; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">Integer</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> id;
...
</span><span class="pun" style="border: 0px; box-sizing: inherit; color: maroon; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">@OneToOne
@PrimaryKeyJoinColumn</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">
</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #101094; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">private</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="pun" style="border: 0px; box-sizing: inherit; color: #2b91af; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">Employee</span><span class="pun" style="border: 0px; box-sizing: inherit; color: #303336; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> employee;
}</span></code></pre></div></div><b>orphanRemoval = true</b><br />Yukarıdaki örnekte Person nesnesinin DrivingLicense alanı null yapılırsa DrivingLicense nesnesi de <a href="http://www.objectdb.com/java/jpa/persistence/delete">silinir</a>.<br /><div><br /><b>cascade Alanı</b></div><b>1. CascadeType.ALL Değeri</b><br /><div><b>CascadeType.ALL</b> eğer Person nesnesi silinirse ona bağlı olan DrivingLicense nesnesinin de otomatik olarak silinmesini sağlar. Ancak orphanRemoval'dan biraz farklıdır. <b>orphanRemoval</b> ile drivingLicense alanını <b>null</b> yapsak bile ehliyet nesnesinin silinmesi sağlanır. </div><div><br /></div><div><b>CascadeType.ALL</b> ile drivingLicense alanını <b>null</b> yaparsak aradaki bağı biz koparttığımız için DrivingLicense nesnesi veri tabanında kalır yani <a href="http://www.objectdb.com/java/jpa/persistence/crud">silinmez</a>.</div><div><br /></div><div><br /></div>Not : Eğer session.delete(entity); yaparsak DrivingLicense nesnesini silmeye çalışırsak "org.hibernate.<span style="color: blue;">ObjectDeletedException</span>: deleted object would be re-saved by cascade (remove deleted object from associations)" hatasını alırız.<br /><div><br />Bu hatanın sebebi OneToOne olan bir ilişkinin tek tarafını kırmaya çalışmamızdan kaynaklanıyor.<br /><br />Çözüm olarak OneToMany ilişki kullanılması yeterli.<br /><br /><b>fetchType Alanı</b></div><div>Lazy ise Hibernate 2 sorgu çalıştırır. Şeklen <a href="https://www.youtube.com/watch?v=GRV69QNSdVg">şöyle</a></div><div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAzkF2RusNxL6RP6s9YDg-c5_Khr1UoHjOcJjiZgXaqrIZOZBOy9jqzK_e2AygsN_MAiLkXIgJ7rjFQBpL8mA4b6DOSICe6vLzdfieOdnTaJOfmB1J9ncOk2LXB_BO7ieytX-vFXP9u1Ime633yWD24KItPNYPISFHLhORefC4Ui2LaVa7gWG4-Lbf/s1092/uni_onetoone_lazy.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="564" data-original-width="1092" height="330" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAzkF2RusNxL6RP6s9YDg-c5_Khr1UoHjOcJjiZgXaqrIZOZBOy9jqzK_e2AygsN_MAiLkXIgJ7rjFQBpL8mA4b6DOSICe6vLzdfieOdnTaJOfmB1J9ncOk2LXB_BO7ieytX-vFXP9u1Ime633yWD24KItPNYPISFHLhORefC4Ui2LaVa7gWG4-Lbf/w640-h330/uni_onetoone_lazy.png" width="640" /></a></div><br /><div><br /><b>optional Alanı</b><br />Açıklaması <a href="https://blog.ippon.tech/boost-the-performance-of-your-spring-data-jpa-application/amp/?__twitter_impression=true">şöyle</a>. Bu alanı <b>false</b> yapabiliyorsak yapmak lazım.<br /><blockquote style="background-color: #eeeeee; border-bottom-color: initial; border-bottom-style: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: initial; border-right-style: initial; border-top-color: initial; border-top-style: initial; border-width: 0px 0px 0px 2px; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;">When a @OneToOne or a @ManyToOne relationship is mandatory - that is, the entity must have its associated relationship - it is important to tell JPA that this relationship is not optional.<br />...<br />Adding optional = false information will allow JPA to be more efficient in creating its select queries because it will know that it necessarily has an address associated with a person. Therefore, it is good practice to always specify this attribute when defining mandatory relationships.</blockquote><br /></div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-23308423499876684612023-12-05T03:18:00.000-08:002023-12-05T03:26:35.545-08:00Apache Flink - KafkaSource Sınıfı<b>Örnek</b><div>Şöyle <a href="https://kavitmht.medium.com/building-a-real-time-data-streaming-pipeline-using-apache-kafka-flink-and-postgres-a22101c97895">yaparız</a>. Kafka topic'ten <b>city, temperature</b> değerlerini okur ve 1 dakikalık ortalamayı veri tabanına yazar</div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div>import org.apache.flink.api.common.eventtime.WatermarkStrategy;</div><div>import org.apache.flink.connector.jdbc.JdbcConnectionOptions;</div><div>import org.apache.flink.connector.jdbc.JdbcExecutionOptions;</div><div>import org.apache.flink.connector.jdbc.JdbcSink;</div><div>import org.apache.flink.connector.kafka.source.KafkaSource;</div><div>import org.apache.flink.connector.kafka.source.enumerator.initializer.OffsetsInitializer;</div><div>import org.apache.flink.streaming.api.datastream.DataStreamSource;</div><div>import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;</div><div>import org.apache.kafka.common.TopicPartition;</div><div><br /></div><div>import org.apache.flink.api.common.functions.AggregateFunction;</div><div>import org.apache.flink.api.java.tuple.Tuple2;</div><div>import org.apache.flink.streaming.api.datastream.DataStream;</div><div>import org.apache.flink.streaming.api.windowing.assigners.TumblingProcessingTimeWindows;</div><div>import org.apache.flink.streaming.api.windowing.time.Time;</div><div>import org.apache.flink.api.common.functions.MapFunction;</div><div><br /></div><div>public class Main {</div><div><br /></div><div> static final String BROKERS = "kafka:9092";</div><div><br /></div><div> public static void main(String[] args) throws Exception {</div><div> StreamExecutionEnvironment env = StreamExecutionEnvironmentalo.getExecutionEnvironment();</div><div> System.out.println("Environment created");</div><div> KafkaSource<Weather> source = KafkaSource.<Weather>builder()</div><div> .setBootstrapServers(BROKERS)</div><div> .setProperty("partition.discovery.interval.ms", "1000")</div><div> .setTopics("weather")</div><div> .setGroupId("groupdId-919292")</div><div> .setStartingOffsets(OffsetsInitializer.earliest())</div><div> .setValueOnlyDeserializer(new WeatherDeserializationSchema())</div><div> .build();</div><div><br /></div><div> DataStreamSource<Weather> kafka = env.fromSource(source,
WatermarkStrategy.noWatermarks(), "kafka");</div><div><br /></div><div> DataStream<Tuple2<MyAverage, Double>> averageTemperatureStream = kafka
.keyBy(myEvent -> myEvent.city)</div><div> .window(TumblingProcessingTimeWindows.of(Time.seconds(60)))</div><div> .aggregate(new AverageAggregator());</div><div><br /></div><div> DataStream<Tuple2<String, Double>> cityAndValueStream = averageTemperatureStream</div><div> .map(new MapFunction<Tuple2<MyAverage, Double>, Tuple2<String, Double>>() {</div><div> @Override</div><div> public Tuple2<String, Double> map(Tuple2<MyAverage, Double> input) {</div><div> return new Tuple2<>(input.f0.city, input.f1);</div><div> }</div><div> }); </div><div><br /></div><div> </div><div> cityAndValueStream.addSink(JdbcSink
.sink("insert into weather (city, average_temperature) values (?, ?)",</div><div> (statement, event) -> {</div><div> statement.setString(1, event.f0);</div><div> statement.setDouble(2, event.f1);</div><div> },</div><div> JdbcExecutionOptions.builder()</div><div> .withBatchSize(1000)</div><div> .withBatchIntervalMs(200)</div><div> .withMaxRetries(5)</div><div> .build(),</div><div> new JdbcConnectionOptions.JdbcConnectionOptionsBuilder()</div><div> .withUrl("jdbc:postgresql://docker.for.mac.host.internal:5438/postgres")</div><div> .withDriverName("org.postgresql.Driver")</div><div> .withUsername("postgres")</div><div> .withPassword("postgres")</div><div> .build()</div><div> ));</div><div> env.execute("Kafka-flink-postgres");</div><div> }</div><div>}</div></pre><b>Örnek</b></div><div>Şöyle <a href="https://kavitmht.medium.com/building-a-real-time-data-streaming-pipeline-using-apache-kafka-flink-and-postgres-a22101c97895">yaparız</a></div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div>import org.apache.flink.api.common.functions.AggregateFunction;</div><div>import org.apache.flink.api.java.tuple.Tuple2;</div><div><br /></div><div>// Aggregation function for average.</div><div>public static class AverageAggregator implements
AggregateFunction<Weather, MyAverage, Tuple2<MyAverage, Double>> {</div><div><br /></div><div> @Override</div><div> public MyAverage createAccumulator() {</div><div> return new MyAverage();</div><div> }</div><div><br /></div><div> @Override</div><div> public MyAverage add(Weather weather, MyAverage myAverage) {</div><div> myAverage.city = weather.city;</div><div> myAverage.count = myAverage.count + 1;</div><div> myAverage.sum = myAverage.sum + weather.temperature;</div><div> return myAverage;</div><div> }</div><div><br /></div><div> @Override</div><div> public Tuple2<MyAverage, Double> getResult(MyAverage myAverage) {</div><div> return new Tuple2<>(myAverage, myAverage.sum / myAverage.count);</div><div> }</div><div><br /></div><div> @Override</div><div> public MyAverage merge(MyAverage myAverage, MyAverage acc1) {</div><div> myAverage.sum = myAverage.sum + acc1.sum;</div><div> myAverage.count = myAverage.count + acc1.count;</div><div> return myAverage;</div><div> }</div><div>}</div></pre></div><div>Şöyle <a href="https://kavitmht.medium.com/building-a-real-time-data-streaming-pipeline-using-apache-kafka-flink-and-postgres-a22101c97895">yaparız</a></div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div>public static class MyAverage {</div><div><br /></div><div> public String city;</div><div> public Integer count = 0;</div><div> public Double sum = 0d;</div><div><br /></div><div> @Override</div><div> public String toString() {</div><div> return "MyAverage{" +</div><div> "city='" + city + '\'' +</div><div> ", count=" + count +</div><div> ", sum=" + sum +</div><div> '}';</div><div> }</div><div> }</div><div>}</div></pre><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-88229073174581893602023-12-05T02:58:00.000-08:002023-12-05T03:04:25.918-08:00Apache Flink - FlinkKafkaConsumer Sınıfı<div><b>Örnek </b><b>- FlinkKafkaConsumer + FileSink</b></div><div>Şöyle <a href="https://dzone.com/articles/superior-stream-processing-apache-flinks-impact-on">yaparız</a>. Burada Kafka'dan okunuyor ve bir HDFS sink'inine yazılıyor.</div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div>// Create a StreamExecutionEnvironment</div><div>StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();</div><div><br /></div><div>// Create a Kafka source</div><div>FlinkKafkaConsumer<String> kafkaConsumer = new FlinkKafkaConsumer<>(</div><div> "topic-name", </div><div> new SimpleStringSchema(), </div><div> kafkaProperties</div><div>);</div><div><br /></div><div>// Add the source to the environment</div><div>DataStream<String> stream = env.addSource(kafkaConsumer);</div><div><br /></div><div>// Process the data </div><div>DataStream<String> processedStream = stream.map(new ProcessingFunction());</div><div><br /></div><div>// Write the processed data to a Sink (e.g., HDFS)</div><div>StreamingFileSink<String> sink = StreamingFileSink</div><div> .forRowFormat(new Path("hdfs://output-path"), new SimpleStringEncoder<String>("UTF-8"))</div><div> .build();</div><div><br /></div><div>processedStream.addSink(sink);</div><div><br /></div><div>// Execute the Flink job</div><div>env.execute("Flink Data Lakehouse Job");</div></pre></div><div><b>Örnek - FlinkKafkaConsumer + MongoDBSink </b></div><div>Şöyle <a href="https://redpanda-data.medium.com/real-time-transaction-processing-with-redpanda-flink-and-mongodb-ebaa76bd2715">yaparız</a>. Burada Kafka'dan okunuyor ve bir Mongo sink'inine yazılıyor.</div><div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;">// Sets up the execution environment, which is the main entry point
// to build Flink applications.
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// Configure the Redpanda source
Properties kafkaProps = new Properties();
kafkaProps.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "redpanda-0:9092");
kafkaProps.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "flink-consumer-group");
// Create the Redpanda source connector
FlinkKafkaConsumer<String> kafkaConsumer =
new FlinkKafkaConsumer<>("financial-transactions",
new SimpleStringSchema(), kafkaProps);
// Add the Redpanda source to the execution environment
DataStream<String> transactionStream = env.addSource(kafkaConsumer);
// Configure the MongoDB sink
// Add the MongoDB sink to the transaction stream
transactionStream.addSink(new MongoDBSink());
// Execute the Flink job
env.execute("Fraud Detection App");<br /></pre></div><div><div>Mongo sink için şöyle <a href="https://redpanda-data.medium.com/real-time-transaction-processing-with-redpanda-flink-and-mongodb-ebaa76bd2715">yaparız</a>. </div><div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;">public class MongoDBSink extends RichSinkFunction<String> {
private static final Logger LOG = LoggerFactory.getLogger(MongoDBSink.class);
private transient MongoCollection<Document> collection;
@Override
public void open(Configuration parameters) {
// Create the MongoDB client to establish connection
MongoClientSettings settings = MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Collections.singletonList(new ServerAddress("mongo", 27017))))
codecRegistry(createCodecRegistry())
.build();
MongoClient mongoClient = MongoClients.create(settings);
// Access the MongoDB database and collection
// At this stage, if the MongoDB database and collection do not exist,
// they would automatically be created
MongoDatabase database = mongoClient.getDatabase("finance");
collection = database.getCollection("financial_transactions");
}
@Override
public void invoke(String value, Context context) {
// Consume the event from the Redpanda topic
LOG.info("Consumed event : " + value);
Document transactionDocument = Document.parse(value);
LOG.info("transactionDocument is : "+ transactionDocument);
// Optionally you can add fraud detection logic as an additional exercise task
// from your end here
// ...
// Insert into MongoDB collection
collection.insertOne(transactionDocument);
}
@Override
public void close() {
// Clean up resources, if needed
}
private CodecRegistry createCodecRegistry() {
// The method createCodecRegistry is a helper method that is used to create a
// CodecRegistry object for MongoDB.
// In MongoDB, a CodecRegistry is responsible for encoding and decoding Java
// objects to
// BSON (Binary JSON) format, which is the native format used by MongoDB to store
// and retrieve data.
return CodecRegistries.fromRegistries(
MongoClientSettings.getDefaultCodecRegistry(),
CodecRegistries.fromProviders(PojoCodecProvider.builder().automatic(true)
.build())
);
}
}</pre></div><div><b>Örnek</b></div><div>Şöyle <a href="https://medium.com/@AlexanderObregon/real-time-data-processing-with-java-frameworks-and-strategies-04622fbda6d7">yaparız</a></div><div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;">import org.apache.flink.api.common.serialization.SimpleStringSchema;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer;
import java.util.Properties;
public class KafkaFlinkIntegration {
public static void main(String[] args) throws Exception {
// Setting up the streaming execution environment
StreamExecutionEnvironment env = StreamExecutionEnvironment
.getExecutionEnvironment();
// Kafka consumer configuration
Properties properties = new Properties();
properties.setProperty("bootstrap.servers", "localhost:9092");
properties.setProperty("group.id", "test");
// Creating a data stream from Kafka
DataStream<String> stream = env
.addSource(new FlinkKafkaConsumer<>("test_topic",
new SimpleStringSchema(), properties));
// Processing the stream
stream.flatMap(new Splitter())
.print();
env.execute("Kafka Flink Integration Example");
}
}</pre></div><div><div>FlatMapFunction için şöyle <a href="https://medium.com/@AlexanderObregon/real-time-data-processing-with-java-frameworks-and-strategies-04622fbda6d7">yaparız</a></div><div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;">import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.util.Collector;
// Simple FlatMap function to split the data
public static class Splitter implements FlatMapFunction<String, String> {
@Override
public void flatMap(String value, Collector<String> out) throws Exception {
for (String word: value.split(" ")) {
out.collect(word);
}
}
}</pre></div></div></div></div><div><b>Örnek -Avro için </b><b>FlinkKafkaConsumer </b></div></div></div></div><div>Projeye Kafka ve Avro bağımlılıklarını eklemek gerekir. Şöyle <a href="https://medium.com/@databackendtech/flink-for-big-data-use-flink-to-consume-from-confluent-cloud-kafka-topic-f66855d89218">yaparız</a></div><div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
<version>${flink.version}</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-connector-kafka_${scala.binary.version}</artifactId>
<version>${flink.version}</version>
</dependency>
<dependency>
<groupId>io.confluent</groupId>
<artifactId>kafka-streams-avro-serde</artifactId>
<version>${confluent.version}</version>
</dependency>
<dependency>
<groupId>io.confluent</groupId>
<artifactId>kafka-streams-schema-registry-client</artifactId>
<version>${confluent.version}</version>
</dependency><br /></pre></div><div>Şöyle <a href="https://medium.com/@databackendtech/flink-for-big-data-use-flink-to-consume-from-confluent-cloud-kafka-topic-f66855d89218">yaparız</a></div></div><div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;">StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
Properties properties = new Properties();
properties.setProperty("bootstrap.servers", "<bootstrap.servers>");
properties.setProperty("security.protocol", "SASL_SSL");
properties.setProperty("sasl.mechanism", "PLAIN");
properties.setProperty("sasl.jaas.config", "<sasl.jaas.config>");
properties.setProperty("group.id", "<group id>");
properties.setProperty("auto.offset.reset", "earliest");
properties.setProperty("schema.registry.url", "<schema.registry.url>");
properties.setProperty(KafkaAvroDeserializerConfig.SPECIFIC_AVRO_READER_CONFIG, "true");
properties.setProperty(KafkaAvroDeserializerConfig.VALUE_SUBJECT_NAME_STRATEGY,
TopicRecordNameStrategy.class.getName());
FlinkKafkaConsumer<MyRecord> kafkaConsumer = new FlinkKafkaConsumer<>(
"<topic>",
new AvroDeserializationSchema<>(MyRecord.class, new Schema.Parser()
.parse(MyRecord.SCHEMA$)),
properties
);
kafkaConsumer.setStartFromEarliest();
env.addSource(kafkaConsumer)
.map(record -> {
// TODO: Add custom logic here
return record;
})
.print();
env.execute("Flink Kafka Consumer");<br /></pre></div><div><br /></div></div><div><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-17716477953328924342023-12-03T22:01:00.000-08:002023-12-03T22:01:53.527-08:00Java Cryptography Architecture (JCA)<b>Giriş</b><div>Açıklaması <a href="https://medium.com/@AlexanderObregon/secure-payment-processing-with-java-455a05b26ddf">şöyle</a></div>
<blockquote style="background-color: #eeeeee; border-bottom-color: initial; border-bottom-style: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: initial; border-right-style: initial; border-top-color: initial; border-top-style: initial; border-width: 0px 0px 0px 2px; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;">
<div>The Java Cryptography Architecture (JCA) is a key framework that offers a range of APIs for various cryptographic operations.</div>
</blockquote>
<div>JCA ile gelen sınıflar javax.crypto isim alanı altında. </div><div>Bazıları şöyle</div><div><div>javax.crypto.Cipher</div><div>javax.crypto.KeyGenerator</div><div>javax.crypto.SecretKey</div></div><div><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-56138159341405231752023-11-21T04:27:00.000-08:002023-11-21T04:31:53.540-08:00RxJava Observable.switchMap metodu - Yani flatMapLatest <b>Giriş</b><div>Açıklaması <a href="https://medium.com/digitalfrontiers/reactive-programming-the-hitchhikers-guide-to-map-operators-7d8bbc1d8465">şöyle</a>. Bu metodu eski ismi flatMapLatest, en son sonuç nesnesini dışarı <a href="https://stackoverflow.com/questions/28175702/what-is-the-difference-between-flatmap-and-switchmap-in-rxjava">verir</a></div><blockquote style="background-color: #eeeeee; border-bottom-color: initial; border-bottom-style: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: initial; border-right-style: initial; border-top-color: initial; border-top-style: initial; border-width: 0px 0px 0px 2px; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;">The <b>switchMap</b> operator must not be confused with <b>concatMap</b>, as it looks very similar at the first glance. However, it works by cancelling the previous inner subscriber whenever the outer publisher emits an item.</blockquote>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-34760194507592033822023-11-21T04:18:00.000-08:002023-11-21T04:33:35.266-08:00RxJava Observable.flatMapSequential metodu - Sonuç Sırasını Korur<b>Giriş</b><div>Açıklaması <a href="https://medium.com/digitalfrontiers/reactive-programming-the-hitchhikers-guide-to-map-operators-7d8bbc1d8465">şöyle</a></div>
<blockquote style="background-color: #eeeeee; border-bottom-color: initial; border-bottom-style: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: initial; border-right-style: initial; border-top-color: initial; border-top-style: initial; border-width: 0px 0px 0px 2px; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;">
<div>This operator eagerly subscribes to its inner publishers like flatMap, but queues up elements from later inner publishers to match the actual natural ordering and thereby prevents interleaving like concatMap.</div>
</blockquote>
<div><div dir="ltr" trbidi="on"><div dir="ltr" trbidi="on"><div dir="ltr" trbidi="on"><b>Örnek</b></div><div dir="ltr" trbidi="on">Şöyle <a href="https://stackoverflow.com/questions/24571491/what-is-the-difference-between-concatmap-and-flatmap-in-rxjava">yaparız</a>. Burada flatMapSequential ile çalıştırma paralel olsa bile çıktı sırası korunuyor</div><div dir="ltr" trbidi="on"><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div dir="ltr" trbidi="on">@Test
void test_flatMap() {
Flux.just(1, 2, 3)
.flatMap(this::doSomethingAsync)
//.flatMapSequential(this::doSomethingAsync)
//.concatMap(this::doSomethingAsync)
.doOnNext(n -> log.info("Done {}", n))
.blockLast();
}
private Mono<Integer> doSomethingAsync(Integer number) {
//add some delay for the second item...
return number == 2 ?
Mono.just(number).doOnNext(n -> log.info("Executing {}", n))
.delayElement(Duration.ofSeconds(1)) :
Mono.just(number).doOnNext(n -> log.info("Executing {}", n));
}</div></pre></div></div>Çıktı <a href="https://stackoverflow.com/questions/71971062/whats-the-difference-between-flatmap-flatmapsequential-and-concatmap-in-project">şöyle</a></div><div dir="ltr" trbidi="on"><div dir="ltr" trbidi="on"><div dir="ltr" trbidi="on"><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div dir="ltr" trbidi="on">// flatMap does not preserve original ordering, and has subscribed to all three elements
// eagerly. Also, notice that element 3 has proceeded before element 2.
2022-04-22 19:38:49,164 INFO main - Executing 1
2022-04-22 19:38:49,168 INFO main - Done 1
2022-04-22 19:38:49,198 INFO main - Executing 2
2022-04-22 19:38:49,200 INFO main - Executing 3
2022-04-22 19:38:49,200 INFO main - Done 3
2022-04-22 19:38:50,200 INFO parallel-1 - Done 2
// flatMapSequential has subscribed to all three elements eagerly like flatMap
// but preserves the order by queuing elements received out of order.
2022-04-22 19:53:40,229 INFO main - Executing 1
2022-04-22 19:53:40,232 INFO main - Done 1
2022-04-22 19:53:40,261 INFO main - Executing 2
2022-04-22 19:53:40,263 INFO main - Executing 3
2022-04-22 19:53:41,263 INFO parallel-1 - Done 2
2022-04-22 19:53:41,264 INFO parallel-1 - Done 3
//concatMap naturally preserves the same order as the source elements.
2022-04-22 19:59:31,817 INFO main - Executing 1
2022-04-22 19:59:31,820 INFO main - Done 1
2022-04-22 19:59:31,853 INFO main - Executing 2
2022-04-22 19:59:32,857 INFO parallel-1 - Done 2
2022-04-22 19:59:32,857 INFO parallel-1 - Executing 3
2022-04-22 19:59:32,857 INFO parallel-1 - Done 3</div></pre></div></div><br /></div><div dir="ltr" trbidi="on"><br /></div><div dir="ltr" trbidi="on"><br /></div><div dir="ltr" trbidi="on"><br /></div><div dir="ltr" trbidi="on"><br /></div><div dir="ltr" trbidi="on"><br /></div><div dir="ltr" trbidi="on"><br /></div><div dir="ltr" trbidi="on"><br /></div><div dir="ltr" trbidi="on"><br /></div></div><div><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-66217788782912100122023-11-21T04:14:00.000-08:002023-11-21T04:26:16.954-08:00RxJava Observable.concatMap metodu<div dir="ltr" trbidi="on"><b>Giriş</b></div><div dir="ltr" trbidi="on">Açıklaması <a href="https://medium.com/digitalfrontiers/reactive-programming-the-hitchhikers-guide-to-map-operators-7d8bbc1d8465">şöyle</a>. Yani concatMap dışarıdaki Observable ile gelen girdinin sırasını değiştirmez. Ayrıca bir nesnenin işi bitmeden bir sonrakine geçmez.</div><blockquote style="background-color: #eeeeee; border-bottom-color: initial; border-bottom-style: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: initial; border-right-style: initial; border-top-color: initial; border-top-style: initial; border-width: 0px 0px 0px 2px; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;"><div dir="ltr" trbidi="on">The concatMap operator is actually quite similar to the flatMap, except that the operator waits for its inner publishers to complete before subscribing to the next one.</div></blockquote><div dir="ltr" trbidi="on"><b>Örnek</b></div><div dir="ltr" trbidi="on">Şöyle <a href="https://stackoverflow.com/questions/24571491/what-is-the-difference-between-concatmap-and-flatmap-in-rxjava">yaparız</a>. Burada sıra korunuyor</div><div dir="ltr" trbidi="on"><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div dir="ltr" trbidi="on">@Test</div><div dir="ltr" trbidi="on">public void flatMapVsConcatMap() throws Exception {</div><div dir="ltr" trbidi="on"> System.out.println("******** Using flatMap() *********");</div><div dir="ltr" trbidi="on"> Observable.range(1, 15)</div><div dir="ltr" trbidi="on"> .flatMap(item -> Observable.just(item).delay(1, TimeUnit.MILLISECONDS))</div><div dir="ltr" trbidi="on"> .subscribe(x -> System.out.print(x + " "));</div><div dir="ltr" trbidi="on"><br /></div><div dir="ltr" trbidi="on"> Thread.sleep(100);</div><div dir="ltr" trbidi="on"><br /></div><div dir="ltr" trbidi="on"> System.out.println("\n******** Using concatMap() *********");</div><div dir="ltr" trbidi="on"> Observable.range(1, 15)</div><div dir="ltr" trbidi="on"> .concatMap(item -> Observable.just(item).delay(1, TimeUnit.MILLISECONDS))</div><div dir="ltr" trbidi="on"> .subscribe(x -> System.out.print(x + " "));</div><div dir="ltr" trbidi="on"><br /></div><div dir="ltr" trbidi="on"> Thread.sleep(100);</div><div dir="ltr" trbidi="on">}</div></pre>
</div><div dir="ltr" trbidi="on">Çıktı <a href="https://stackoverflow.com/questions/24571491/what-is-the-difference-between-concatmap-and-flatmap-in-rxjava">şöyle</a></div><div dir="ltr" trbidi="on"><div dir="ltr" trbidi="on"><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div dir="ltr" trbidi="on">******** Using flatMap() *********
1 2 3 4 5 6 7 <b>9 8 11 13 15 10 12 14</b>
******** Using concatMap() *********
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15</div></pre></div><div dir="ltr" trbidi="on"><div dir="ltr" trbidi="on"><b>Örnek</b></div><div dir="ltr" trbidi="on">Şöyle <a href="https://stackoverflow.com/questions/24571491/what-is-the-difference-between-concatmap-and-flatmap-in-rxjava">yaparız</a>. Burada sıra korunuyor</div><div dir="ltr" trbidi="on"><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div dir="ltr" trbidi="on">@Test
void test_flatMap() {
Flux.just(1, 2, 3)
.flatMap(this::doSomethingAsync)
//.flatMapSequential(this::doSomethingAsync)
//.concatMap(this::doSomethingAsync)
.doOnNext(n -> log.info("Done {}", n))
.blockLast();
}
private Mono<Integer> doSomethingAsync(Integer number) {
//add some delay for the second item...
return number == 2 ?
Mono.just(number).doOnNext(n -> log.info("Executing {}", n))
.delayElement(Duration.ofSeconds(1)) :
Mono.just(number).doOnNext(n -> log.info("Executing {}", n));
}</div></pre></div></div>
Çıktı <a href="https://stackoverflow.com/questions/71971062/whats-the-difference-between-flatmap-flatmapsequential-and-concatmap-in-project">şöyle</a></div><div dir="ltr" trbidi="on"><div dir="ltr" trbidi="on"><div dir="ltr" trbidi="on"><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div dir="ltr" trbidi="on">// flatMap does not preserve original ordering, and has subscribed to all three elements
// eagerly. Also, notice that element 3 has proceeded before element 2.
2022-04-22 19:38:49,164 INFO main - Executing 1
2022-04-22 19:38:49,168 INFO main - Done 1
2022-04-22 19:38:49,198 INFO main - Executing 2
2022-04-22 19:38:49,200 INFO main - Executing 3
2022-04-22 19:38:49,200 INFO main - Done 3
2022-04-22 19:38:50,200 INFO parallel-1 - Done 2
// flatMapSequential has subscribed to all three elements eagerly like flatMap
// but preserves the order by queuing elements received out of order.
2022-04-22 19:53:40,229 INFO main - Executing 1
2022-04-22 19:53:40,232 INFO main - Done 1
2022-04-22 19:53:40,261 INFO main - Executing 2
2022-04-22 19:53:40,263 INFO main - Executing 3
2022-04-22 19:53:41,263 INFO parallel-1 - Done 2
2022-04-22 19:53:41,264 INFO parallel-1 - Done 3
//concatMap naturally preserves the same order as the source elements.
2022-04-22 19:59:31,817 INFO main - Executing 1
2022-04-22 19:59:31,820 INFO main - Done 1
2022-04-22 19:59:31,853 INFO main - Executing 2
2022-04-22 19:59:32,857 INFO parallel-1 - Done 2
2022-04-22 19:59:32,857 INFO parallel-1 - Executing 3
2022-04-22 19:59:32,857 INFO parallel-1 - Done 3</div></pre></div></div><br /></div><div dir="ltr" trbidi="on"><br /></div><div dir="ltr" trbidi="on"><br /></div><div dir="ltr" trbidi="on"><br /></div><div dir="ltr" trbidi="on"><br /></div><div dir="ltr" trbidi="on"><br /></div><div dir="ltr" trbidi="on"><br /></div><div dir="ltr" trbidi="on"><br /></div><div dir="ltr" trbidi="on"><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-39114989983984173262023-11-16T23:47:00.000-08:002023-11-17T00:09:02.258-08:00Log4j2 Ayar Dosyası<div><b>Giriş</b></div><div><div>Log4J2 için kullanılan ayar dosyası belirli bir önceliğe göre aranıyor. Öncelik sıralaması <a href="https://logging.apache.org/log4j/2.x/manual/configuration.html#automatic-configuration">burada</a> tanımlı. Açıklaması şöyle</div><div><blockquote style="background-color: #eeeeee; border-bottom-color: initial; border-bottom-style: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: initial; border-right-style: initial; border-top-color: initial; border-top-style: initial; border-width: 0px 0px 0px 2px; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;"><div>1. Log4j will inspect the <b>"log4j2.configurationFile"</b> system property and, if set, will attempt to load the configuration using the <b>ConfigurationFactory</b> that matches the file extension. Note that this is not restricted to a location on the local file system and may contain a URL.</div><div>2. If no system property is set the properties <b>ConfigurationFactory</b> will look for <b>log4j2-test.properties</b> in the classpath.</div><div>3. If no such file is found the YAML ConfigurationFactory will look for <b>log4j2-test.yaml</b> or <b>log4j2-test.yml</b> in the classpath.</div><div>4. If no such file is found the JSON ConfigurationFactory will look for l<b>og4j2-test.json</b> or <b>log4j2-test.jsn</b> in the classpath.</div><div>5. If no such file is found the XML ConfigurationFactory will look for <b>log4j2-test.xml</b> in the classpath.</div><div>6. If a test file cannot be located the properties ConfigurationFactory will look for <b>log4j2.properties</b> on the classpath.</div><div>7. If a properties file cannot be located the YAML ConfigurationFactory will look for <b>log4j2.yaml</b> or <b>log4j2.yml</b> on the classpath.</div><div>8 . If a YAML file cannot be located the JSON ConfigurationFactory will look for <b>log4j2.json</b> or <b>log4j2.jsn</b> on the classpath.</div><div>9. If a JSON file cannot be located the XML ConfigurationFactory will try to locate <b>log4j2.xml</b> on the classpath.</div><div>10. If no configuration file could be located the DefaultConfiguration will be used. This will cause logging output to go to the console.</div></blockquote></div><div><b>1. DefaultConfiguration</b></div><div>Açıklaması <a href="https://medium.com/hello-java/mastering-java-logging-frameworks-with-examples-part-2-a5d6d039bafb">şöyle</a></div><blockquote style="background-color: #eeeeee; border-bottom-color: initial; border-bottom-style: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: initial; border-right-style: initial; border-top-color: initial; border-top-style: initial; border-width: 0px 0px 0px 2px; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;">Log4j 2 provides a default configuration that will be used if no custom configuration file is provided. This default configuration is designed to work in most situations, but it may not meet all of your specific logging needs.</blockquote><div><b>2. XML veya YAML Dosyası</b></div><div><div>Açıklaması <a href="https://medium.com/hello-java/mastering-java-logging-frameworks-with-examples-part-2-a5d6d039bafb">şöyle</a></div><blockquote style="background-color: #eeeeee; border-bottom-color: initial; border-bottom-style: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: initial; border-right-style: initial; border-top-color: initial; border-top-style: initial; border-width: 0px 0px 0px 2px; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;">If you choose to configure Log4j 2 using a <b>log4j2.xml</b> or <b>log4j2.yml</b> file, you can place the file in your application's classpath (in our case <b>main/java/resources</b>), in the root of your application's jar file, or in a directory specified by the <b>log4j.configurationFile</b> system property.</blockquote></div></div><div><b><br /></b></div><div><b>3. Kendi Dosyam</b></div><div><b>log4j2.configurationFile</b> ile belirtilir.</div><div><br /></div><b>Örnek - properties dosyası</b><div>Şöyle yaparız</div>
<pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div>java ... -Dlog4j2.configurationFile=mylog.properties</div></pre>
<div>Kodla şöyle yaparız</div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;">public static void main(String[] args) {
System.setProperty("log4j2.configurationFile", "file:///.../mylog.properties");
}</pre><div><br /></div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-59679795720401402562023-11-16T02:10:00.000-08:002023-11-16T02:15:27.897-08:00JDBC XAConnection Arayüzü<div><b>Giriş</b></div><div><div dir="ltr" trbidi="on">Şu satırı dahil ederiz </div><div dir="ltr" trbidi="on"><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><span style="color: #101094;">import</span> javax.sql.<span style="color: #2b91af;">XAConnection</span>;
</pre><div><a href="https://gunceljava.blogspot.com/2016/11/pooledconnection-arayuzu.html">PooledConnection</a> arayüzünden kalıtır. Açıklaması <a href="https://stackoverflow.com/questions/53975158/why-does-xaconnection-extends-pooledconnection">şöyle</a>.</div></div></div><blockquote style="background-color: #eeeeee; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-width: 0px 0px 0px 2px; color: #242729; font-family: arial, "helvetica neue", helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;"><b>XAConnection</b> extends <b>PooledConnection</b> because it serves a similar purpose: they are both a handle to the physical connection that is held in a connection pool (PooledConnection) or in the transaction manager (XAConnection). Transaction managers usually have a connection pool themselves (which may be exposed as a javax.sql.DataSource to the application code).</blockquote><div><div dir="ltr" trbidi="on">Bu arayüzü gerçekleştiren bazı sınıflar şöyle</div><div dir="ltr" trbidi="on"><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;">com.microsoft.sqlserver.jdbc.SQLServerXAConnection;
com.mysql.cj.jdbc.SuspendableXAConnection
org.h2.jdbcx.JdbcXAConnection;
org.postgresql.xa.PGXAConnection;</pre></div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-25819644334135122872023-11-13T23:53:00.000-08:002023-11-14T00:08:22.787-08:00JPA JPQL LEFT JOIN FETCH ve MultipleBagFetchException <div><b>Giriş</b></div><div>LEFT JOIN FETCH özellikle parent nesnede iki tane ilişki varsa problem olabiliyor. </div><div><br /></div><div><b>1. Set Döndürmek</b></div><div>Hibernate tarafından beklenen şey <b>Set</b> döndürmek. <b>Set</b> kullanırsak bile </div><div><b>1. Full Cartesian Product</b> problemi ortaya çıkar. </div><div>2. <b>Sayfalama</b> çalışmıyor</div><div><br /></div><div><div><b>Örnek- Sayfalama Hatası</b></div></div><div>Elimizde şöyle bir kod <a href="https://jskim1991.medium.com/spring-boot-exploring-spring-boot-3-with-querydsl-part-1-932ab4b9c115">olsun</a></div><div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;">@Entity
@Data
@NoArgsConstructor
@Table(name = "teams")
public class Team {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "team",
cascade = {CascadeType.PERSIST, CascadeType.MERGE}, orphanRemoval = true)
private Set<Member> members;
@OneToMany(mappedBy = "team",
cascade = {CascadeType.PERSIST, CascadeType.MERGE}, orphanRemoval = true)
private Set<Milestone> milestones;
// constructors, helper functions, etc ..
}
public interface TeamRepository extends JpaRepository<Team, Long> {
@EntityGraph(attributePaths = {
"members", "milestones"
})
Page<Team> findAll(Pageable pageable);
}</pre></div><div><div>Açıklaması <a href="https://jskim1991.medium.com/spring-boot-exploring-spring-boot-3-with-querydsl-part-1-932ab4b9c115">şöyle</a></div><div><div><blockquote style="background-color: #eeeeee; border-bottom-color: initial; border-bottom-style: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: initial; border-right-style: initial; border-top-color: initial; border-top-style: initial; border-width: 0px 0px 0px 2px; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;">When lookin at the response, it might lead you to believe that pagination is automatically handled when using the entity graph by passing in a Pageable to your query. <b>However, it will give you a warning indicating that pagination is being performed in memory</b>.</blockquote></div><div><div>Çıktı <a href="https://jskim1991.medium.com/spring-boot-exploring-spring-boot-3-with-querydsl-part-1-932ab4b9c115">şöyle</a></div><blockquote style="background-color: #eeeeee; border-bottom-color: initial; border-bottom-style: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: initial; border-right-style: initial; border-top-color: initial; border-top-style: initial; border-width: 0px 0px 0px 2px; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;">WARN 88609 --- [nio-8080-exec-3] org.hibernate.orm.query : HHH90003004: firstResult/maxResults specified with collection fetch; <b>applying in memory</b></blockquote></div></div><div><b>2. List Döndürmek</b></div></div></div><div><div>Bazen kodda ilişkiyi temsil etmek için Set yerine List kullanılıyor. Bu durumda </div><div><b>org.hibernate.loader.MultipleBagFetchException</b> diye bir exception alırız.</div><div>Açıklaması <a href="https://vladmihalcea.com/hibernate-multiplebagfetchexception/">şöyle</a></div><blockquote style="background-color: #eeeeee; border-bottom-color: initial; border-bottom-style: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: initial; border-right-style: initial; border-top-color: initial; border-top-style: initial; border-width: 0px 0px 0px 2px; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;">The reason why a MultipleBagFetchException is thrown by Hibernate is that duplicates can occur, and the unordered List, which is called a bag in Hibernate terminology, is not supposed to remove duplicates.</blockquote><div>Çözüm olarak 2 tane JPQL kullanılır. Açıklaması <a href="https://jskim1991.medium.com/spring-boot-exploring-spring-boot-3-with-querydsl-part-1-932ab4b9c115">şöyle</a></div></div><div><blockquote style="background-color: #eeeeee; border-bottom-color: initial; border-bottom-style: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: initial; border-right-style: initial; border-top-color: initial; border-top-style: initial; border-width: 0px 0px 0px 2px; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin: 0px 0px 10px; padding: 10px; quotes: none;">This can be solved if you use <b>Set</b> instead of <b>List</b>. If you really want to stick with <b>List</b>, then you would have to divide into two queries eagerly loading each child and merge in the application code. Therefore, it may require you to change some code if you need to load multiple child entities and the decision will depend on the feature acceptance criteria.</blockquote><div><br /></div></div><div><div><b>Örnek</b></div><div>Elimizde Post sınıfı için şöyle bir kod olsun. Burada PostComment ve Tag ilişkileri için List kullanılıyor.</div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div>@OneToMany(</div><div> mappedBy = "post",</div><div> cascade = CascadeType.ALL,</div><div> orphanRemoval = true</div><div>)</div><div>private List<PostComment> comments = new ArrayList<>();</div><div> </div><div>@ManyToMany(</div><div> cascade = {</div><div> CascadeType.PERSIST,</div><div> CascadeType.MERGE</div><div> }</div><div>)</div><div>@JoinTable(</div><div> name = "post_tag",</div><div> joinColumns = @JoinColumn(name = "post_id"),</div><div> inverseJoinColumns = @JoinColumn(name = "tag_id")</div><div>)</div><div>private List<Tag> tags = new ArrayList<>();</div></pre></div><div>Post nesnelerini çekmek için şöyle bir kod çalıştıralım. MultipleBagFetchException alırız</div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div>List<Post> posts = entityManager.createQuery("""</div><div> select p</div><div> from Post p</div><div> left join fetch p.comments</div><div> left join fetch p.tags</div><div> where p.id between :minId and :maxId</div><div> """, Post.class)</div><div>.setParameter("minId", 1L)</div><div>.setParameter("maxId", 50L)</div><div>.getResultList();</div></pre></div><div>Çözüm olarak 2 tane JPQL kullanılır. Şöyle <a href="https://vladmihalcea.com/hibernate-multiplebagfetchexception/">yaparız</a></div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><div>List<Post> posts = entityManager.createQuery("""</div><div> select distinct p</div><div> from Post p</div><div> left join fetch p.comments</div><div> where p.id between :minId and :maxId""", Post.class)</div><div>.setParameter("minId", 1L)</div><div>.setParameter("maxId", 50L)</div><div>.setHint(QueryHints.PASS_DISTINCT_THROUGH, false)</div><div>.getResultList();</div><div> </div><div>posts = entityManager.createQuery("""</div><div> select distinct p</div><div> from Post p</div><div> left join fetch p.tags t</div><div> where p in :posts""", Post.class)</div><div>.setParameter("posts", posts)</div><div>.setHint(QueryHints.PASS_DISTINCT_THROUGH, false)</div><div>.getResultList();</div>
</pre></div><div><b>Örnek</b></div><div>Elimizde şöyle bir kod <a href="https://stackoverflow.com/questions/66196630/build-criteria-api-query-to-avoid-multiplebagfetchexception">olsun</a></div><div><pre class="lang-java s-code-block hljs" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><code style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;"><span class="hljs-keyword" color="var(--highlight-keyword)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">public</span> <span class="hljs-class" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"><span class="hljs-keyword" color="var(--highlight-keyword)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">class</span> <span class="hljs-title" color="var(--highlight-literal)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">Lesson</span> </span>{
<span class="hljs-meta" color="var(--highlight-keyword)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">@Id</span>
<span class="hljs-keyword" color="var(--highlight-keyword)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">private</span> Long id;
<span class="hljs-comment" color="var(--highlight-comment)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">// ...other properties</span>
<span class="hljs-meta" color="var(--highlight-keyword)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">@OneToMany(mappedBy = "lesson", cascade = CascadeType.ALL)</span>
<span class="hljs-keyword" color="var(--highlight-keyword)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">private</span> List<Student> students;
<span class="hljs-meta" color="var(--highlight-keyword)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">@OneToMany(mappedBy = "lesson", , cascade = CascadeType.ALL)</span>
<span class="hljs-keyword" color="var(--highlight-keyword)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">private</span> List<Guest> guests;
<span class="hljs-comment" color="var(--highlight-comment)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">// ...constructors, getters and setters</span>
}</code></pre></div><div>Yine 2 tane JPQL kullanılır. Şöyle <a href="https://stackoverflow.com/questions/66196630/build-criteria-api-query-to-avoid-multiplebagfetchexception">yaparız</a></div><div><pre class="lang-java s-code-block hljs" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: 0px; margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><code style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;"><span class="hljs-meta" color="var(--highlight-keyword)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">@Repository</span>
<span class="hljs-keyword" color="var(--highlight-keyword)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">public</span> <span class="hljs-class" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"><span class="hljs-keyword" color="var(--highlight-keyword)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">class</span> <span class="hljs-title" color="var(--highlight-literal)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">LessonCriteriaRepositoryImpl</span> <span class="hljs-keyword" color="var(--highlight-keyword)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">implements</span> <span class="hljs-title" color="var(--highlight-literal)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">LessonCriteriaRepository</span> </span>{
<span class="hljs-meta" color="var(--highlight-keyword)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">@PersistenceContext</span>
<span class="hljs-keyword" color="var(--highlight-keyword)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">private</span> EntityManager entityManager;
<span class="hljs-function" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"><span class="hljs-keyword" color="var(--highlight-keyword)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">public</span> List<Lesson> <span class="hljs-title" color="var(--highlight-literal)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">findAll</span><span class="hljs-params" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">()</span> </span>{
<span class="hljs-comment" color="var(--highlight-comment)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">//build first query for fetching students</span>
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Lesson> criteriaQuery = builder.createQuery(Lesson.class);
Root<Lesson> lesson = criteriaQuery.from(Lesson.class);
lesson.fetch(<span class="hljs-string" color="var(--highlight-variable)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">"students"</span>, JoinType.LEFT);
criteriaQuery.select(lesson).distinct(<span class="hljs-keyword" color="var(--highlight-keyword)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">true</span>);
TypedQuery<Lesson> query1 = entityManager.createQuery(criteriaQuery);
List<Lesson> lessons = query1.getResultList();
<span class="hljs-comment" color="var(--highlight-comment)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">//build second query for fetching guests</span>
builder = entityManager.getCriteriaBuilder();
criteriaQuery = builder.createQuery(Lesson.class);
lesson = criteriaQuery.from(Lesson.class);
lesson.fetch(<span class="hljs-string" color="var(--highlight-variable)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">"guests"</span>, JoinType.LEFT);
criteriaQuery.select(lesson).distinct(<span class="hljs-keyword" color="var(--highlight-keyword)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">true</span>).where(lesson.in(lessons));
TypedQuery<Lesson> query2 = entityManager.createQuery(criteriaQuery);
<span class="hljs-keyword" color="var(--highlight-keyword)" style="border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">return</span> query2.getResultList();
}
}</code></pre></div></div><div><br /></div><div><br /></div><div><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-87418480171166699562023-11-08T22:57:00.011-08:002023-11-08T23:02:56.151-08:00AtomicReference İle Stack Gerçekleştirimi<div><b>Örnek</b></div><div>Şöyle <a href="http://stackoverflow.com/questions/37716360/why-do-we-need-to-compareandset-when-set-is-already-atomic-in-java">yaparız</a>. Burada bir Stack gerçekleştirimi var ve head ve next değerleri atanıyor</div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">public</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">class</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">MyConcurrentStack</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"><</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">T</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">></span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">{</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">private</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">AtomicReference</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"><</span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">Node</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">></span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> head </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">new</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">AtomicReference</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"><</span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">Node</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">>();</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">public</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">void</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> push</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">(</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">T t</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">)</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">{</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">if</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">(</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">t </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">==</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">null</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">)</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">{</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">return</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">;</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">}</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">Node</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"><</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">T</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">></span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> n </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">new</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">Node</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"><</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">T</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">>(</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">t</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">);</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">Node</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"><</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">T</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">></span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> current</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">;</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">do</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">{</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
current </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> head</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">.</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">get</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">();</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
n</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">.</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">setNext</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">(</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">current</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">);</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">}</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">while</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">(!</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">head</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">.</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">compareAndSet</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">(</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">current</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">,</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> n</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">));</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">}</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">public</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> T pop</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">()</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">{</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">Node</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"><</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">T</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">></span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> currentHead </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">null</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">;</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">Node</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"><</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">T</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">></span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> futureHead </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">null</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">;</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">do</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">{</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
currentHead </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> head</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">.</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">get</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">();</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">if</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">(</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">currentHead </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">==</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">null</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">)</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">{</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">return</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">null</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">;</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">}</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
futureHead </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> currentHead</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">.</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">next</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">;</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">}</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">while</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">(!</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">head</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">.</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">compareAndSet</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">(</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">currentHead</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">,</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> futureHead</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">));</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">return</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> currentHead</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">.</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">data</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">;</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">}</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">}</span></code></pre></div><div style="font-weight: bold;"><b>Örnek</b></div><div style="font-weight: bold;"><div style="font-weight: 400;">Elimizde şöyle bir kod <a href="https://medium.com/@trunghuynh/introduction-to-lock-free-algorithms-101-in-java-e5673b6e0d77">olsun</a></div><div style="font-weight: 400;"><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">public class StackNode<T> {
T data;
StackNode next;
public StackNode(T t) {
data = t;
next = null;
}
}<br /></span></code></pre></div></div><div>Şöyle <a href="https://medium.com/@trunghuynh/introduction-to-lock-free-algorithms-101-in-java-e5673b6e0d77">yaparız</a></div><div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">public class AtomicStack<T> {
private final AtomicReference<StackNode<T>> head = new AtomicReference<>();<br /> private final AtomicInteger count = new AtomicInteger(0);<br />
public int getCount() {
return count.get();
}
public T pop() {
StackNode<T> currentStackHead;
StackNode<T> newStackHead;
while(true) {
currentStackHead = head.get();
if(currentStackHead == null){
break;
}
newStackHead = currentStackHead.next;
if(head.compareAndSet(currentStackHead, newStackHead)) {
break;
} else {
LockSupport.parkNanos(1);
}
}
count.decrementAndGet();
return currentStackHead != null ? currentStackHead.data: null;
}
public void push(T obj) {
StackNode<T> newStackNode = new StackNode<>(obj);
while (true) {
StackNode<T> currentHead = head.get();
newStackNode.next = currentHead;
if (head.compareAndSet(currentHead, newStackNode)) {
break;
} else {
LockSupport.parkNanos(1);
}
}
count.incrementAndGet();
}
}</span></code></pre></div><div style="font-weight: bold;"><br /></div></div><div><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3019320326655415032.post-67776068153448681322023-11-01T05:13:00.007-07:002023-11-01T05:18:47.369-07:00JPA @OneToOne Unidirectional İlişki<div><b>Giriş</b></div><div><b>@JoinColumn</b> anotasyonuna sahip nesne child nesne olarak düşünülebilir</div><div><br /></div><div><b>Örnek</b></div><div>Şöyle <a href="https://springjavatutorial.medium.com/one-to-one-unidirectional-mapping-in-spring-boot-jpa-a7539b7e36b6">yaparız</a>. Address tablosundaki id sütünü primary key, Employee tablosundaki addrs_id sütünü da Address tablosuna foreign key olarak tanımlanır.</div><div><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;">@Entity
@Data
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
...
}
@Entity
@Data
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
...
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "addrs_id", referencedColumnName = "id")
private Address address;
}</code></pre></div><b>Örnek</b><br />Şöyle <a href="http://stackoverflow.com/questions/34466741/is-there-a-way-to-use-secondarytable-to-jump-multiple-tables">tanımlarız</a>.<br /><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"><span class="lit" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">@Entity</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="lit" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">@Table</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">(</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">name </span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">Membership_Profile</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">)</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: darkblue; margin: 0px; padding: 0px;">class</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">MembershipProfile</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">{</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">Long</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> moduleMembershipId</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">;</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">String</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> displayName</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">;</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="com" style="border: 0px; color: grey; margin: 0px; padding: 0px;">// Other properties if needed</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">}</span></code></pre>ve<br /><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"><span class="lit" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">@Entity</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: darkblue; margin: 0px; padding: 0px;">class</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">PokerProfile</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">{</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="lit" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">@OneToOne</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">(</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">fetch</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">=</span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">FetchType</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">.</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">LAZY</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">)</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="lit" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">@JoinColumn</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">(</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">name </span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="border: 0px; color: maroon; margin: 0px; padding: 0px;">"membershipId"</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">)</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">MembershipProfile</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> membershipProfile</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">;</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">...</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">}</span></code></pre>PokerProfile nesnesi JoinColumn ile hangi membership profile nesnesini ile ilişkili olduğunu bilir.<br /><br /><b>Örnek</b><br />ForeignKeyvermek için şöyle <a href="https://stackoverflow.com/questions/48169664/jpa-one-to-one-mapping-with-inheritance-2-queries-for-what-should-be-one">yaparız</a>.<br /><pre class="lang-js s-code-block hljs javascript" style="background-color: #eff0f1; border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;"><span class="lit" style="border: 0px; color: #7d2727; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">@Entity</span><span class="pln" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">
</span><span class="kwd" style="border: 0px; color: #101094; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">public</span><span class="pln" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="kwd" style="border: 0px; color: #101094; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">class</span><span class="pln" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="typ" style="border: 0px; color: #2b91af; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">MediaAnalysis</span><span class="pln" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="pun" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">{</span><span class="pln" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">
</span><span class="pln" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">
</span><span class="lit" style="border: 0px; color: #7d2727; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">@OneToOne</span><span class="pln" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">
</span><span class="lit" style="border: 0px; color: #7d2727; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">@JoinColumn</span><span class="pun" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">(</span><span class="pln" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">
name </span><span class="pun" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">=</span><span class="pln" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="str" style="border: 0px; color: #7d2727; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">"MED_ID"</span><span class="pun" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">,</span><span class="pln" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">
nullable </span><span class="pun" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">=</span><span class="pln" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="kwd" style="border: 0px; color: #101094; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">false</span><span class="pun" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">,</span><span class="pln" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">
foreignKey </span><span class="pun" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">=</span><span class="pln" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="lit" style="border: 0px; color: #7d2727; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">@ForeignKey</span><span class="pun" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">(</span><span class="pln" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">name</span><span class="pun" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">=</span><span class="str" style="border: 0px; color: #7d2727; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">"MEA_MED_FK"</span><span class="pun" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">)</span><span class="pln" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">
</span><span class="pun" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">)</span><span class="pln" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">
</span><span class="kwd" style="border: 0px; color: #101094; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">private</span><span class="pln" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="typ" style="border: 0px; color: #2b91af; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">Media</span><span class="pln" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"> media</span><span class="pun" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">;</span><span class="pln" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">
...
</span><span class="pln" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">
</span><span class="pun" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">}</span></code></pre><div><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;"><span class="pun" style="border: 0px; color: #303336; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"><br /></span></code></div><span style="font-size: large;"></span>Unknownnoreply@blogger.com0