21 Haziran 2023 Çarşamba

HttpClient Sınıfı İle Connect Pool - HttpClient API

Giriş
Açıklaması şöyle
The Java 11 HttpClient has an internal connection pool. By default, it is unlimited in size.
Açıklaması şöyle
The JDK 11 ConnectionPool checks the jdk.httpclient.connectionPoolSize system property when initializing and defaults to 0 (unlimited).
Örnek
Şöyle yaparız
HttpClient client = HttpClient.newBuilder()
    .connectionPool(ConnectionPool.newBuilder()
        .maxConnections(50)
        .build())
    .build();

20 Haziran 2023 Salı

HttpClient Sınıfı İle POST

Giriş
Java 11 ile artık HttpsURLConnection, HttpURLConnection sınıfları yerine HttpClient kullanılıyor. Burada bazı örnekler var.

Örnek
Şöyle yaparız. Burada String verisi POST yapılıyor ama cevap önemli değil, dikkate alınmıyor 
HttpRequest httpRequest = HttpRequest.newBuilder()
  .uri(URI.create(basePhoneHomeUrl))
  .timeout(Duration.ofMillis(TIMEOUT))
  .POST(HttpRequest.BodyPublishers.ofString(requestBody, StandardCharsets.UTF_8))
  .build();

try {
  HttpClient httpClient = HttpClient.newBuilder()
    .connectTimeout(Duration.ofMillis(TIMEOUT))
    .build();

    httpClient.send(httpRequest, HttpResponse.BodyHandlers.discarding());
} catch (Exception ignored) {
  ...
}
Örnek
Şöyle yaparız. Burada JSON verisi POST yapılıyor ve cevap dikkate alınıyor
HttpResponse<String> postData(String jsonStr, String endpoint, String accessToken) throws Exception { HttpClient httpClient = HttpClient.newHttpClient(); HttpRequest httpRequest = HttpRequest.newBuilder() .header("Content-Type", "application/json") .header("Authorization", "Bearer " + accessToken) .uri(URI.create("https://...")) .POST(HttpRequest.BodyPublishers.ofString(jsonStr)) .build(); HttpResponse<String> httpResponse = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString()); return httpResponse; }

RecordingStream Sınıfı - Flight Recorder - Java 11 İle Geliyor

Giriş
Şu satırı dahil ederiz
import jdk.jfr.consumer.RecordingStream;
Örnek
Şöyle yaparız
import jdk.jfr.consumer.RecordingStream;

public static void main(String[] args) {
  try (var rs = new RecordingStream()) {
    rs.onEvent("jdk.GarbageCollection", event ->
      System.out.format("Garbage collection: %s, duration: %dns%n", event.getEndTime(), event.getDuration())
  );

    rs.startAsync();
    Thread.sleep(60_000);
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
}
Açıklaması şöyle
In this example, we create a RecordingStream, define an event handler for garbage collection events, start the stream asynchronously, and keep the application alive for 60 seconds to observe the events.

HttpResponse Sınıfı - Java 11 İle Geliyor - HttpClient API

Giriş
Şu satırı dahil ederiz
import java.net.http.HttpResponse;
body metodu
 HttpResponse.BodyHandlers.ofString() veya bir türevi ile cevap çözüldükten sonra cevabın içeriğine body() metodu ile erişebiliriz
Örnek
Şöyle yaparız
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient httpClient = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder()
  .uri(URI.create("https://api.example.com/data"))
  .GET()
  .build();

HttpResponse<String> response = httpClient .send(request, HttpResponse.BodyHandlers.ofString());

System.out.println(response.statusCode());
System.out.println(response.body());

JEP 323 - Improved var Handling

Giriş
Lambda içinde değişkene tip yerine var kullanılabilir.

Örnek
Şöyle yaparız
// Pre-Java 11
Function<String, Integer> preJava11Func = (String s) -> Integer.parseInt(s) + 10;

// Java 11
Function<String, Integer> java11Func = (var s) -> Integer.parseInt(s) + 10;

JEP 330 - Running Java Files Directly - Java 11 İle Geliyor

Giriş
Java 11'den itibaren derlemeden bazı dosyaları çalıştırmak mümkün. Açıklaması şöyle. Artık .class dosyası oluşmuyor.
Since Java 11, java FileName.java compiles and runs FileName.java; however, compilation happens "behind the scenes", without explicitly producing corresponding .class file. Instead, it directly loads corresponding byte-code into the JVM instance.
Örnek
Elimizde şöyle bir kod olsun.
public class Myclass {
 public  static void main(String[] args){
    System.out.println("hello world");
  }
}
Eskiden şöyle yapardık
javac hello.java
java hello
Şimdi sadece şöyle yaparız.
$ java hello.java
$ hello world
Örnek
Şöyle yaparız
java --source 21 --enable-preview MyAwesomeApp.java


19 Haziran 2023 Pazartesi

Javafaker

Maven
Şu satırı dahil ederiz
<dependency>
  <groupId>com.github.javafaker</groupId>
  <artifactId>javafaker</artifactId>
  <version>1.0.2</version>
</dependency>
Örnek
Şöyle yaparız
Faker faker = new Faker(Locale.FRANCE);

String teamName = faker.team().name();

faker.address().city();
faker.address().zipCode();
faker.address().streetAddress();

faker.name().firstName();
faker.name().lastName();

faker.date().birthday(18, 38);
faker.random().nextInt(0, 20)
faker.random().nextBoolean()