JAVA関連のことを調べてみた2021年12月04日

JAVA関連のことを調べてみた2021年12月04日

JavaからRustを呼び出す

# 概要

JNAを使ってRustを呼び出す方法をまとめました。

# 前準備

まず、JNAのライブラリをmavenなりbuild.sbtなりに追加します。

“`build.sbt
scalaVersion := “2.13.6”
libraryDependencies += “net.java.dev.jna” % “jna” % “5.9.0”
libraryDependencies += “net.java.dev.jna” % “jna-platform” % “5.9.0”
“`

# JavaからRustを呼び出す

## Hello World的なプログラム

### Rustで共有ライブラリを作る

以下のようなプログラムを作成します。

“`main.rs
// #[no_mangle]を指定すると、コンパイル時にメソッド名を変更されないようすることができます。
#[no_mangle]
fn main() {
println!(“Hello, world!”);
}
“`

そして、(macの場合)以下のコマンドで共有ライブラリを作成します。

元記事を表示

Spring5.3 × WebLogic14cでJSFライブラリ関連でWebアプリケーションの起動に失敗した話

# 事象 サーバー起動時にWebアプリケーションの起動に失敗する

WebLogic14cをはじめて使った中でドハマリしたので、備忘録です。
過去にWebLogic11g、12cは使用したことがあります。

Spring5.3でWebアプリケーションを実装し、WebLogic14cへデプロイした際にこんなエラーに遭遇してしまいました。

“`
javax.faces.FacesException: Unable to find CDI BeanManager
“`

## 原因① JSFライブラリが不足していた

エラーの内容についていろいろと調べてみると、JSFライブラリが関連することがわかりました。
はじめはWebLogicに内包されているJSFライブラリではなく、Mavenセントラルリポジトリに公開されているものを使用してデプロイしたのですが、以下のような別のエラーに遭遇しました。

“`
java.lang.ClassCastException: class com.sun.faces.vendor.WebContainerInjectionProvider cannot

元記事を表示

Retrofit+OkHttpでAPIエラーの時のレスポンスの取得ではまった

この記事は[ラクスアドベントカレンダー](https://qiita.com/advent-calendar/2021/rakus)の3日目の記事です。
本来なら月末に今年やったことを振り返ってゆっくり書きたかったのですが、前半がぽっかり空いていたので愛社&奉仕精神に溢れる私はみんなが嫌がる12/3に名乗りを上げました!(明日と明後日も空いてるがね( ゚Д゚))

### はじめに
最近機能開発でRetrofitというものを使い始めていて非常に便利なライブラリなのですが、ハマりポイントもあったのでその辺の話を書いていこうと思います。

### 使い始めたきっかけ
Spring Bootで開発してるのでRestTemplateを使おうとしたのですが、将来のバージョンで非推奨になるとのことで別のライブラリを比較検討しました。
RestTemplateの後継はWebClientなんですが、そのためだけにSpring WebFluxは入れたくない…そこで更に調べてOkHttp + Retrofitが良さそうということで採用しました。

### OkHttp, Retrofitとは
Ok

元記事を表示

EclipseをMacにインストールする手順

今回はJava開発環境のEclipseをMacにインストールする手順を教えます✨

まずは下記のサイトからインストーラを入手します。
 :point_right: https://mergedoc.osdn.jp/
![スクリーンショット 2021-12-02 21.38.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346709/873fdd15-cd52-cd58-09fb-17f7aa55632a.png)

「Eclipse 2021 最新版」をクリック?
容量があるのであればMac版のJavaで「Full Edition」をダウンロードしましょう。
![スクリーンショット 2021-12-02 21.42.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346709/778e93af-f8be-af15-4422-40e37e34207f.png)

ダウンロードができたらファイル実行し、表示さ

元記事を表示

【Java】Caffeineでお手軽にローディングキャッシュ

## まえがき
・[Caffeine Cache](https://github.com/ben-manes/caffeine) をもう一段深堀り
・通常版は [【Java】Caffeineでお手軽にローカルキャッシュ](https://qiita.com/a__i__r/items/44e9b0aa934de26ba5bd)をご参考下さい。
・**ローディングキャッシュ(LoadingCache)**とは…
  ・**リクエストの際は既存のキャッシュにあるものを返し、裏側で新しいデータを読み込み格納しておく**キャッシュの事

#### 長所
・重い処理の影響をリクエストの際に受けない
・初回を起動時に読み込んでおけば、あとは良しなにしてくれる
#### 短所
・リクエストを返すと古い(現状の値ではない)値が取得される
  ・↑これを対処するにはScheduledExecutorServiceとかで定期的にロードするとかでしょうか
  ・定期的にロードするとリソース使うので一長一短な気がします
  ・バッチ等でテーブルにデータを入れるとか、起点となる処理が実行された際に裏で読み込むと

元記事を表示

Micronaut 3を使ってみる

# What’s?

[TIS Advent Calendar 2021](https://qiita.com/advent-calendar/2021/tis)に参加ということで。

2年ほど前にMicronaut 1.0で遊んでいたことがあるのですが、気づくと3.0を超えていたので、この機会に久しぶりに触ってみようかなと。

Home

Micronautとは、フルスタックのマイクロサービスやサーバーレスに向くと謳われているフレームワークです。

# 環境

今回の環境はこちらです。

“`shell
$ java –version
openjdk 11.0.11 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.20.04)
OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.20.04, mixed mode, sharing)

$ mvn –version
Apache Ma

元記事を表示

ABC 229 参加してみました。(C問題まで)

初めまして。
茶色コーダーを目指して毎週コンテストに参加しています。

まだまだ先は長いですが、解けた問題を投稿していきたいと思います。
使用言語はJavaです。

#A問題
https://atcoder.jp/contests/abc229/tasks/abc229_a

####方針
 ”#”(黒マス)が3つ以上あれば、黒マスをどこに配置しても条件を満たします。
逆に黒マスが2つのみであれば、配置される位置によって判定が変わる。
具体的には黒マスが縦に並んでいるか、横に並んでいる場合は条件を満たす。
そうでない場合は条件を満たさないとします。

####コード
**標準入力と出力に関するコードは省略しています。**

“`main.java
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.NoSuchElementException;

public class Main {
public static void main(

元記事を表示

コマンドでcheckstyleをかける

https://github.com/checkstyle/checkstyle/releases/

上からcheckstyleのjarをダウンロードする

循環複雑度をシュッとかけるためのxml

“` xml







“`

おもむろに実行してみる

“` bash
ja

元記事を表示

JavaでOutOfMemoryError: GC Overhead limit exceededを穏当に解決した話

この記事は、[シアトルコンサルティング株式会社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/seattleconsulting)の3日目の記事です。
こんにちは、シアトルコンサルティングの長岡です。

## はじめに
業務で1000万件くらいのデータに対し、DB1のデータをマスタDBと比較し、一致したデータがあれば別名に変換しDB2へ出力するというようなプログラムを作成し実行した際に、OutOfMemoryError: GC Overhead limit exceededが発生し、現場メンバー揃って苦戦したのでその時のことを書いていこうと思います。

## OutOfMemoryError: GC Overhead limit exceededとは
Javaのヒープ領域にオブジェクトを割り当てるための十分な空間がない時に発生するエラーです。
冒頭でも触れた通り、処理すべきデータ量が膨大な時に頻発します。
JavaプロセスがGCの実行時間の98%以上を費やし、各実行で2%未満のヒープしか回復されない場合に、この

元記事を表示

Kotlinのエントリポイントの話

# はじめに

この記事は[Kotlinアドベントカレンダー](https://qiita.com/advent-calendar/2021/kotlin)の参加記事です。

皆さん、Kotlin使っていますか?

コアの設計はJavaに大きな影響を受けたKotlinですが、その言語仕様はJavaと大きく異なる部分が少なくありません。
今回はそんなKotlinの特徴の一つ、エントリポイントについてお話しようと思います。

## TL;DR
– Kotlinの`main`メソッドはコンパイル時特殊クラスに突っ込まれる
– `main`メソッドをそのままクラスの静的メソッドとして書くことはできない
– `companion object`はそれ自体が独立クラスとしてコンパイルされる
– `@JvmStatic`でクラスの静的メソッドを登録する

## 前提知識

1. KotlinはJava同様にJVM用Javaバイトコード(.classファイル)にコンパイルされる。
– JavaもKotlinも`main()`というメソッドをエントリポイントとして起動する。
– Javaは全てのメソッ

元記事を表示

データ分析基盤・DataLakeを作成するツールとしてのEmbulk

この記事はエイチーム引越し侍 / エイチームコネクトの社員による、[Ateam Hikkoshi samurai Inc.× Ateam Connect Inc. Advent Calendar 2021](https://qiita.com/advent-calendar/2021/hikkoshizamurai-connect) 3日目の記事です。

## はじめに
今日は、最近のお仕事で触ることになる可能性が高いEmbulkについて書きます。
*触ることになる*とあるようにEmbulkを使い始めるソフトウェアエンジニアによる記事です。説明に至らない点があったり間違っていたりするかもしれません。その際は[編集リクエスト](https://help.qiita.com/ja/articles/qiita-edit-request)なりコメントなりでご指摘いただけたら幸いです。

何に使うかですが、データ分析基盤、DataLake作成におけるETL処理のために使います。ちなみにETLはExtract、Transform、Loadの略でデータを抽出、変換・加工、ロード(Output)する

元記事を表示

App Service にて Tomcat の設定ファイルを変更してカスタムエラーページを構成する方法

#はじめに
[Microsoft Azure Tech Advent Calendar 2021](https://qiita.com/advent-calendar/2021/microsoft-azure-tech “Microsoft Azure Tech Advent Calendar 2021”) の 2 日目の記事です。本稿では、App Service を Tomcat で運用する上で知っていると役立つ Tips を紹介します。

[App Service](https://docs.microsoft.com/ja-jp/azure/app-service/overview “App Service の概要”) は Windows、Linux、Docker コンテナ(カスタム コンテナー)の Web アプリケーションを Azure 上にホストすることができる PaaS です。Java/Tomcat をスタックとする App Service のリソースを作成する方法については当記事では割愛するため、[公式ドキュメント](https://docs.microsoft.com/

元記事を表示

java 練習問題5-4 (12/2)

calcTriangleAreaメゾットで
三角形の面積(bottom と height)求めて返す
calcCircleAreaメゾットで
円の面積(半径 radius)求めて返す

“`java
public class Main {
public static void main(String[] args) {
double triangleArea = calcTriangleArea(10.0, 5.0);
System.out.println(“三角形の面積:” + triangleArea + “平方cm”);
double circleArea = calcCircleArea(5.0);
System.out.println(“円の面積:” + circleArea + “平方cm”);
}
public static double calcTriangleArea(double bottom, double height) {
double area = (bottom * height) / 2;

元記事を表示

すっきりjavaでわからなかったとこ5−13

#戻り値が配列の時
“`java
public class Main {

public static int[] makeArray(int size) {
//int[]で配列を作る
  int[] newArray = new int[size];
  for (int i = 0; i < newArray.length; i++ ) {  newArray[i] = i;   }  return newArray; } public static void main(String[] args) { //makeArray(3)を実行して int[] array = makeArray(3); //結果を int i をarrayに変換する for (int i : array) { System.out.println(i); } } } ```

元記事を表示

Javaのラムダ式とStreamAPIとは

## 前提

以降の説明で表示するソースは全て [GitHub](https://github.com/thirdplay/java-stream) に上げてあります。


## 本記事の目的
`Java8` で追加された機能(関数型プログラミング・ラムダ式・Stream)というものについて、
難しい説明を極力省き、下記のような記述を読みこなせるようになるのが目標です。

“`java
persons.stream()
.filter(p -> p.getAge() >= 30)
.forEach(p -> System.out.println(p.getName()));
“`


## ラムダ式とは
インターフェースに `抽象メソッド` を1つだけ定義したものを `関数型インターフェース` と呼びます。
この `関数型インターフェース` の実装を、とことん簡潔に記述するのがラムダ式です。


たとえば、こんなインターフェースがあるとします。

“`java:Sample01.java
interface Iface1 {
pu

元記事を表示

midPointとIGA

今年もこの季節がやってまいりました。本年もOpenStandiaでAdvent Calendarを書いていきます。今年は特にテーマは決めずOpenStandiaのメンバが興味のある技術について25日間書いていきますのでよろしくお付き合いください!

# midPointについて
ということで、1日目はmidPointの話題です。midPointについては、一昨年のAdvent Calendar、昨年のAdvent Calendar、その他、折に触れて、OpenStandiaメンバが記事投稿しているのでご存知の方も多いかもしれません。

2019年のAdvent Calendar
https://qiita.com/advent-calendar/2019/midpoint-by-openstandia

2020年のAdvent Calendar
https://qiita.com/advent-calendar/2020/nri-openstandia

また、最近ですと、クラウドネイティブさん主催の須藤あどみん対談でご紹介させてもらって知って頂いた方もいるかもしれません。

202

元記事を表示

Javaのマルチスレッド実装例(後編)(排他制御編)

この記事は、[シアトルコンサルティング株式会社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/seattleconsulting)の2日目の記事です。
こんにちは、シアトルコンサルティングの長岡です。

## はじめに
前回はプログラムをマルチスレッドで実行してみました。
[Javaのマルチスレッド実装例(前編)](https://qiita.com/Ryooooo/private/c4fdffa50ad31c972bad)
今回はマルチスレッドでプログラムを実行した際の注意点として上げられる、排他制御について書いていこうと思います。
今回も前回同様駆け出しエンジニアの方達にも理解できる内容となっております!

## なぜ排他制御が必要なのか?
前回の記事でも書きましたが、マルチスレッドの処理で同じオブジェクトにアクセスしてしまうと同じフィールドの値を書き換えてしまう為、最終的に期待した値が帰ってこないことがあります。
その為、同じオブジェクトにアクセスする場合はsynchronizedを使用し、排他制御を

元記事を表示

JavaでKotlinと同じくらい安全なコードを書く(後編)

この記事は`Kotlin Advent Calendar`の2日目の記事です。

https://qiita.com/advent-calendar/2021/kotlin

# 前書き
この記事は[JavaでKotlinと同じくらい安全なコードを書く(前編)](https://qiita.com/wrongwrong/items/9b1a5c4f76128b43fa3e)の続きです。

前編では`Java`で安全性を高めるための工夫として、以下の4点を書きました。

– `null`を安全に取り扱う
– メソッド・クラス・変数を基本的に変更できないようにする
– `Collection`を読み取り専用にする
– 一致を安全に判定する

後編では、これらが`Kotlin`でどのような表現になるかと、`Java`で実現した場合と比べた簡単さについて書きます。

# nullを安全に取り扱う
`Kotlin`では、`nullable`な場合型に`?`を付けます。

“`kotlin:Kotlin
// fooはnon-null, barはnullable、戻り値はnon-null
fun

元記事を表示

JavaからC言語を呼び出す

# 概要

JNAを使ってC言語を呼び出す方法をまとめました。

# 前準備

まず、JNAのライブラリをmavenなりbuild.sbtなりに追加します。

“`build.sbt
scalaVersion := “2.13.6”
libraryDependencies += “net.java.dev.jna” % “jna” % “5.9.0”
libraryDependencies += “net.java.dev.jna” % “jna-platform” % “5.9.0”
“`

# JavaからC言語を呼び出す

## Hello World的なプログラム

### C言語で共有ライブラリを作る

以下のようなプログラムを作成します。

“`hoge.c
#include

void hoge() {
printf(“ほげぇ\n”);
}
“`

そして、以下のコマンドで共有ライブラリを作成します。

“`sh
gcc -dynamiclib -o libhoge.dylib hoge.c
“`

### Java側の実装

Java

元記事を表示

テーブル更新時エラー 未完成

コンソールアプリケーション:社員情報管理アプリ

![Something went wrong]()

“`DBController.java

//更新機能
public static void Javadoc_update(String empId ,String empName_up, String gender_up, String birthday_up, String deptId_up)
throws ClassNotFoundException, SQLException {
Connection connection = null;
PreparedStatement preparedStatement = null;

try {

//DBに接続
connection = DBManager.getConnection();

preparedStatement = connection.prepareStatement(ConstantSQL.SQL_UPDATE1);

preparedSta

元記事を表示

OTHERカテゴリの最新記事