- 1. Java: WebSphereトラブルシューティング三種の神器について(HeapAnalyzer, TMDA, PMAT)
- 2. SpringBoot得意な方教えてください! BeanNotOfRequiredTypeExceptionが発生したときの原因と対処法。
- 3. 文字列の一致方法
- 4. インターフェースを実装するようにエンティティを修正したら動かなくなった話
- 5. コンピュータとオセロ対戦53 ~損失関数~
- 6. Centos8 LAMPPJ
- 7. よく使うSpring Boot の アノテーションまとめ
- 8. 「マイクロサービスパターン」の復習 1章 モノリシック地獄
- 9. JSFのサンプル
- 10. Effective Java 第3版まとめ(項目5)
- 11. フォルダ量産
- 12. Javaでの乱数記述の仕方
- 13. 【Jackson】AnnotationIntrospectorでJsonGetter同様の動作を実現する
- 14. auカブコム証券のkabuステーションREST APIで自前のトレイル注文を作ってみる(ツール完成編)
- 15. Javaプログラミングにおけるストリーム
- 16. (初心者向け)Spring Data JPAの基礎知識
- 17. [Docker][Java] Java プロセスのコンテナで jstat が採れない
- 18. 例外の学習
- 19. サーブレットJSPについて
- 20. Java開発環境を構築
Java: WebSphereトラブルシューティング三種の神器について(HeapAnalyzer, TMDA, PMAT)
IBM WebSphere(IBM Java)には、Javaのトラブルシューティングに利用できる、いくつかのツールがあります。本記事では、それらのツールを3つ紹介します。
# HeapAnalyzer
ヒープダンプを解析し、OutOfMemoryErrorなどのJavaメモリ上の問題を調査するためのツールです。ヒープダンプの解析結果をグラフィカルに表示することができ、ヒープを占めているオブジェクトを特定することなどができます。
https://www.ibm.com/support/pages/ibm-heapanalyzer
ただし、上記のURLに記載されている通り、現在は新機能の開発を終了してしまっているようです。このため、Java 8以降の実行環境では、現在も開発が続けられているEclipse Memory Analyzer Toolを利用していくべきかもしれません。
https://www.ibm.com/support/pages/eclipse-memory-analyzer-tool-dtfj-and-ibm-extensions
# Thread and M
SpringBoot得意な方教えてください! BeanNotOfRequiredTypeExceptionが発生したときの原因と対処法。
SpringBootのJUnitで『BeanNotOfRequiredTypeException』が発生しました。
結果的にはテストクラスに@ContextConfigurationを追加したら発生しなくなったんですが・・・“`
@ContextConfiguration
“`
詳しい経緯や僕が行なった対策は記事でまとめています。真因が特定できていないので、SpringBootのDIにすごく詳しい方、ご教示頂けると嬉しいです!
## 記事はこちらに移管しました
文字列の一致方法
文字列の一致方法をJavaで実装しました
“`Java
import java.util.Scannerpublic class Mojikensaku1 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println(“検索する文字を入力してください”);
String line1 = sc.nextLine();
System.out.println(“判定する文字を入力してください”);
String line2 = sc.nextLine();
//文字列検索結果フラグの定義
booloean flag1 = true;
//文字列検索チェック
flag1 = line2.contains(line1);
//文字列が含まれているかチェック ある場合は「DANGER」ない場合は
インターフェースを実装するようにエンティティを修正したら動かなくなった話
# はじめに(と原因)
Play FrameworkとEbeanを使用している環境で、エンティティに対して、
setterを宣言しているインターフェースを実装するように修正したら、
意図しない動きになった。原因は下記記事に記載されている。
https://qiita.com/fukushiw/items/64993db74e1454554b7c
> Play Framework のエンハンス
> (中略)
> エンティティに対して、getterとsetterがついていないものはそれをつけるようにします。
> その後で、エンティティのフィールド直接アクセスを、getter/setter経由になるように書き換えます。
>
> Ebean の エンハンス
> (中略)
> 遅延ローディングや楽観的ロックの制御等の目的で、getterやsetterソースコードが改変されます。Lombokを疑っていたが、Play FrameworkとEbeanでエンハンスしているとは…
# 修正前のコード
* エンティティ
“`java
@Entity
@Table(name = “H
コンピュータとオセロ対戦53 ~損失関数~
https://qiita.com/tt_and_tk/items/068f2afde6db637e189f
[前回](https://qiita.com/tt_and_tk/items/8bce5586efbf6a67f086)
# 今回の目標
損失関数を作成する。
# ここから本編
## Softmax
損失関数追加の前に、活性化関数としてソフトマックス関数を追加します。
その層のノード数をN、現在着目しているノード番号をiとおくと、“`math
\begin{align}
f(x_i)&=\frac{e^{x_i}}{\sum\limits_{n=1}^Ne^{x_n}}\nonumber \\
f'(x_i)&=\left\{\begin{aligned}
&f(x_i)(1-f(x_j))\ &if\ i=j\\
&-f(x_i)f(x_j)\ &if\ i\ne j
\end{aligned}\right.\nonumber
\end{align}
“`プログラム
“`Softmax.java
pa
Centos8 LAMPPJ
sudo vi 0S8.sh
“`
#追加で HTTP(80/tcp) と HTTPS(443/tcp) を許可しておきます
firewall-cmd –permanent –zone=public –add-port=3389/tcp
firewall-cmd –add-port=80/tcp –permanent
firewall-cmd –add-port=443/tcp –permanent
firewall-cmd –reload
firewall-cmd –list-all“`
sudo chmod u+x 0S8.sh
sudo ./0S8.shsudo vi 0S8LAMP.sh
“`
#apache:php:mysqlインストール
dnf remove -y php
dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
rpm –import http://rpms.remirepo.net/RPM-GPG-KEY-remi
dnf modul
よく使うSpring Boot の アノテーションまとめ
Java/Kotlinのフレームワークとして有名な、「Spring Boot」を仕事で使っています。
Spring Bootを使っていると、アノテーションと呼ばれる@マークで始まるタグのような目印が出てきて、最初は面食らいました。
よく使うアノテーションは比較的限られているので、それをまとめてみました。# Component アノテーション
## `@Component`
[Component (Spring Framework 5.3.18 API) – Javadoc](https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframework/stereotype/Component.html)
> アノテーション付きクラスが「コンポーネント」であることを示します。このようなクラスは、アノテーションベースの構成およびクラスパススキャンを使用する場合の自動検出の候補と見なされます。
他のクラスレベルのアノテーションも、コンポーネント、通常は特別な種類のコンポーネントを識別
「マイクロサービスパターン」の復習 1章 モノリシック地獄
## 1章 モノリシック地獄からの脱出
– モノリシック地獄
– マイクロサービスアーキテクチャの基本的な考え方
– マイクロサービスアーキテクチャの利点・欠点
– パターン言語とマイクロサービスアーキテクチャパターン
– マイクロサービスアーキテクチャと組織## モノリシック地獄
– 最初は、綺麗に設計できていれば開発もスムーズだけど、大きくなるにつれてそうもいかなくなる
– 変更の影響範囲が分からなくなるので、開発が遅くなる
– 一つのコードベースだと、常に不安定で、ビルドが通らない
– 自動テストをやっていても、テストに時間がかかる
– (垂直)スケーリングしづらい
– CPUが必要なモジュールもあれば、メモリが必要なモジュールもあるので## マイクロサービスアーキテクチャの基本的な考え方
– スケールキューブという考え方がある
– X軸:いわゆる水平スケーリング
– Z軸:パーティショニングによるスケーリング
– Y軸:機能分割によるスケーリング
– マイクロサービスアーキテクチャは、Y軸によるスケーリングを実現する– SOAの
JSFのサンプル
# 構成
– JsfTest
– src
– main
– java
– bean
– IndexBean.java
– InputBean.java
– webapp
– index.xhtml
– next.xhtml
– WEB-INF
– faces-config.xml
– web.xml
– pom.xml# pom.xml
“`
com.sun.faces
jsf-api
Effective Java 第3版まとめ(項目5)
# 項目5.資源を直接結び付けるよりも依存性注入を選ぶ
## 書かれている内容
* 多くのクラスが一つ以上の下層の資源に依存している
* たとえば、スペルチェッカーは辞書に依存している
* このようなクラスが静的なユーティリティやシングルトンで実装されていると、
柔軟性に欠けてテストできない(例えばテスト用の辞書を使うことができない)
* スペルチェッカーに辞書を変更するためのメソッドを追加すると、扱いにくく、間違いやすく、並行な環境では機能しない
* 新しいインスタンスを生成するときにコンストラクタに資源を渡す
* または、コンストラクタに資源ファクトリを渡す
* Supplierインタフェースは、ファクトリを表現するには最適
フォルダ量産
public static void main(String[] args) {
try{
for(int i=1;i<=作りたいフォルダ数;i++) { Path p = Paths.get("パス"+String.valueOf(i)); Files.createDirectory(p); } }catch(IOException e){ System.out.println(e); } }
Javaでの乱数記述の仕方
# Javaでの乱数の記述の仕方について
乱数の表記表には複数種類存在する。
#### 1.Random関数を用いた記述
Randomクラスは、疑似乱数を生成するためのクラスである。戻り値はint型であり、乱数のように見えるが、実際には一定の規則で生成されている数字。
Randomクラスを使用するには`java.util.Random`をimportする必要がある。
#### ソースコード
~~~Java
import java.util.Random;public class Main {
public static void main(String[] args) {
Random r = new Random();
int r = random.nextInt(➀);
//0以上➀未満までの間で乱数を取得する
}
}
~~~
import文も含めて1文にまとめることも可能である。`int r = new java.util.Random().nextInt(➀);`
また、コンストラクタに初期値(シード)を与えると、生成される疑似乱数列
【Jackson】AnnotationIntrospectorでJsonGetter同様の動作を実現する
# TL;DR
– `AnnotationIntrospector`には`JsonGetter`同様の動作を再現するための明示的なメソッドは用意されていない
– `findNameForSerialization`を実装することで、`JsonGetter`同様の動作を実現できる# 本文
## JsonGetterとは
`Jackson`では、名前が`getter`に当たるメソッドしかシリアライズ対象になりません。
一方、`JsonGetter`アノテーションを付与したメソッドは名前に関わらずシリアライズ対象となります。“`java
// シリアライズすると{“foo”:1,”bar”:2}が出力される
class Src {
public int getFoo() { return 1; }
@JsonGetter public int bar() { return 2; }
}
“`## やりたいこと
`Jackson`の挙動をカスタムして、特定条件で`JsonGetter`同様の動作をさせます。
今回は以下の`MyAnnotation`が設定されてい
auカブコム証券のkabuステーションREST APIで自前のトレイル注文を作ってみる(ツール完成編)
# はじめに
前記事
1. [auカブコム証券のkabuステーションREST APIをcurlで叩く](https://qiita.com/hiuchida/items/fcdd3d6ff921b386a37e)
2. [auカブコム証券のkabuステーションREST APIをjava(generated by the swagger code generator)で叩く](https://qiita.com/hiuchida/items/73b7fc846d4c9501ef2f)
3. [auカブコム証券のkabuステーションREST APIの残高照会をcurlとjavaで叩く](https://qiita.com/hiuchida/items/9eb5336755a3d1b1a3df)
4. [auカブコム証券のkabuステーションREST APIの残高照会から先物OPのdeltaを計算する](https://qiita.com/hiuchida/items/6e0d8d5114192bec1632)
5. [auカブコム証券のkabuステーションREST APIのテスト用モック
Javaプログラミングにおけるストリーム
## ストリーム (プログラミング)とは
メモリ領域やファイル、ネットワークに記載・格納されたデータを読み取る、
反対にそれらにデータを書き込むためのオブジェクトや、そのための機能を持つデータ型。
接続や切断、書き込みや読み込みなどを簡易な操作で行える。## InputStream/OutputStream
Javaのストリームオブジェクトで
データをバイナリ形式で読み取り/書き込みを行う。必ずしもバイナリデータをやり取りするわけではなく、
FileOutputStreamなど、ファイルへの文字の書き込みをバイナリで行う事もできる。## バッファリング
ストリームオブジェクトがストリーム処理を、
一定のデータ量でまとめて行う事で、処理性能を上げられる機能。
バッファリングをしない場合、ストリームは1バイトずつ行われるが、
バッファリングをすることで、ストリームを最大1024バイトずつ行える。
Javaでは、BufferedOutputStreamクラスがバッファリング機能を提供している。## Writer/Reader
J
(初心者向け)Spring Data JPAの基礎知識
現在学習しているSpring bootの中で、Spring Data JPAを利用する機会があったので、復習も兼ねて投稿します。
## Spring Data JPAとは
Spring bootでデータベースにアクセスできるライブラリ/フレームワークのこと。Spring Data JPAでは、JavaクラスとDBテーブルをつなぎ合わせてくれるHibernate(ハイバーネート)ライブラリを内部実装している。
## Spring Data JPAでDBを自動生成してみる
今回は練習も兼ねてMySQLとSpring Data JPAを繋げてみます。
## MySQLでデータベースの設定を行う。
### データベースの作成。
“`sql
create database db_sample;
“`
### ユーザーとパスワードの設定
“`sql
create user ‘username’@’localhost’ IDENTIFIED BY ‘password’;
“`
### 権限の設定
“`sql
GRANT ALL PRIVILEGES ON * . * TO ‘us
[Docker][Java] Java プロセスのコンテナで jstat が採れない
docker コンテナで動かしている Java プロセスの jstat を採る話。
以下のように実行してみると。。
“`
$ docker exec -t –user 1000 {container-id} jstat -gc 1
“`こんなエラーになりました。
“`
sun.jvmstat.monitor.MonitorException: 1 not found
at jdk.internal.jvmstat/sun.jvmstat.perfdata.monitor.protocol.local.PerfDataBuffer.(PerfDataBuffer.java:84)
at jdk.internal.jvmstat/sun.jvmstat.perfdata.monitor.protocol.local.LocalMonitoredVm.(LocalMonitoredVm.java:68)
at jdk.internal.jvmstat/sun.jvmstat.perfdata.moni
例外の学習
https://qiita.com/ts7i/items/d7f6c1cd5a14e55943d4
## 理解が深まったところ
– 多段の呼び出し階層への対応
### 検査例外
>Exceptionクラス配下のRuntime Exception以外のクラスが対象。
Javaがコンパイル時に検査を行う例外なので、try-catchで例外ハンドリングを行わないといけない。
何故このような仕様になっているかというと、検査例外は基本的に正しいプログラムを書いていても避けられない例外だからです。
例えば、ファイルが壊れたりしているとIOExceptionが起きますが、どれだけ頑張ってプログラムを書いてもファイルが壊れていたら防ぎようがありません。
同様にDB障害などでSQLExceptionが発生するのもプログラムではどうしようもありません。
そういった例外たちを集めて、「お前らがハンドリングを忘れないようにtry-catchの記述を強制させてやるぜ~」ってJavaがドヤ顔しているのが検査例外だと思えば良いでしょう。検査例外とは、呼び出し元に何らかの対処を強制する例外である。
対処し
サーブレットJSPについて
## サーブレットJSPの基本を学ぶ。
サーブレットJSP、業務でがっつり使ているが、UI的な。動的な画面表示のようなことは全くイメージもついていないので、ここで触っておく。
>TomcatにはWebサーバー機能はありますが、ApacheのWebサーバーとしての性能(高速処理、安定性)と同等にはなりません。
>WebサーバーとしてならApacheを使うのが一般的です。
>そこでHTMLや画像などの静的なコンテンツは処理速度が高速なApacheに処理させ、Javaサーブレットで作成された動的コンテンツをTomcatに処理させます。まずは、ApatcheとApatche Tomcatの違いについてだが、Apatcheは静的コンテンツなどの配信や、動的リクエストの振り分け?などに特化しており、Tomcatは。その動的リクエストをうまくさばくことができるものである。名前は似ているが、やっていることは別物であることは覚えたい。
TomcatにもApatcheの機能があるということで、覚えやすくなるのではと思う。
### 全体のイメージ図![image.png](https://qi
Java開発環境を構築
## Java実行環境を構築
### Javaをインストールする
まずはJavaをインストールする。職場で使用しているので、Amazon Corretto 11 をインストールする。
公式のドキュメントから、Windows_×64のJDK .msiをダウンロード。https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-11-ug/windows-7-install.html
※自動でJAVA_HOMEとPATHを通してくれているようだ。
もし、PATHが通っていなかったらPATHを通す。
https://www.javadrive.jp/start/install/index4.html#section3
https://qiita.com/sta/items/63e1048025d1830d12fd
インストールされているかを確認。
“`cmd
C:\Users\User1>java –version
openjdk 11.0.13 2021-10-19 LTS
OpenJDK Runtime En