20200210のJavaに関する記事は4件です。

JMeter チートシート

JMeter とは

自動でブラウザ操作をするツール
主にラッシュテストに使う
ちょっとした操作ならpostman の方が優秀だが、
postman は複数スレッドを起動できないため、JMeterを使わざるおえない 

前提

JMeterのインストール先:c:\apache-jmeter-5.2.1

JMeter の起動(画面)

jmeter_view.bat
set JMETER_LANGUAGE=-Duser.language="ja" -Duser.region="JP"
c:\apache-jmeter-5.2.1\bin\jmeter.bat -H "プロキシホスト" -P "プロキシポート" -u "プロキシユーザー" -a "プロキシパスワード" -t honya_rush_test.jmx

1行目:日本語化
2行目:jmeterをviewモードで起動
 起動オプション
 -t:ブラウザ操作の設定を保存するファイル名。初回はファイルがないのでエラーになる

JMeter の設定(画面)

jmeter_view.png

外部から設定した方が便利な設定は、変数にする
書式:${__P(変数名)}

ここでは、スレッド数、Ramp-Up期間、ループ回数を変数にした。

JMeter の起動

起動するごとに日時フォルダを作成し、結果をまるっと保存する設定

jmeter_run.bat
set time_tmp=%time: =0%
set now=%date:/=%%time_tmp:~0,2%%time_tmp:~3,2%%time_tmp:~6,2%

set JMETER_LANGUAGE=-Duser.language="ja" -Duser.region="JP"
c:\apache-jmeter-5.2.1\bin\jmeter.bat -H "プロキシホスト" -P "プロキシポート" -u "プロキシユーザー" -a "プロキシパスワード" -n -t honya_rush_test.jmx -Jthread_count=100 -Jloop_count=100 -Jramp_up=100 -j %now%/jmeter.log -l %now%/jmeter.jtl -e -o %now%/report

1行目、2行目:日時フォルダ名の設定
4行目:日本語化
5行目:jmeterをバッチモードで起動
 起動オプション
 -t:viewモードで作成したファイル名
 -n:jmeterをバッチモードで起動
 -J変数名=値:viewモードで設定した外部設定にした変数に値を入れる
 -j:ログファイル名
 -l:テスト結果出力先ファイル名
 -e:レポートを出力する
 -o:テスト結果出力先フォルダ名

あとがき

-a がパスワード って、passwordの a かな?
-l がテスト結果ということは、もしかして leport??
-j がログファイル名?
genkai-3.gif

覚えられないオプションよりチートシート

おまけ

JMeterのインストール

java8 以上が必要

Apache JMeter 5.2.1 公式

 apache-jmeter-5.2.1.zip zipの直リン(2020/2/10現在)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【初心者向け】java -jar コマンドでJVM(-D)オプションが効かない、ライブラリがバグってるんじゃないかと言いたくなったとき。

背景

Java製のOSSや社内に閉じたライブラリを開発していると、こんな問い合わせを受けることが何度かあったので、せめてQiitaに書いておけばググって自己解決してくれるのではないかという淡い期待をこめて。

問い合わせはこんな感じ

パターン1

ライブラリのドキュメントには、-Dxxxx=yyyyを指定すると、xxxxオプションが有効になると書いてありますが、動作しません。ライブラリがバグってませんか?

パターン2

組み込みTomcat(またはJettyなど)を使用したjarを起動する際、JMXを有効にするために-Dcom.sun.management.jmxremoteやそのほかJMXのオプションをつけてますが、アプリケーションを起動してもJMXのポートがLISTENになりません。

組み込みTomcat(またはJettyなど)のパラメータ調整が必要でしょうか?

バグってるのはライブラリでもServletコンテナでもない

誤ったコマンド
java -jar zzzz.jar -Dxxxx=yyyy -Dcom.sun.management.jmxremote

一見特段問題なく見えるんですが、正しくは下記の通りです。

正しいコマンド
java -Dxxxx=yyyy -Dcom.sun.management.jmxremote -jar zzzz.jar 

要するに、-jarオプションの後にJVM引数を指定するなって話ですね:sweat:

ちなみに、java -helpコマンドで、ちゃんと順序は明示されています。言うまでもなく[options]がJVMオプションで、[args]がプログラムが処理するコマンドライン引数ですね。

$ java -help

使用方法: java [options] <mainclass> [args...]
           (クラスを実行する場合)
   または  java [options] -jar <jarfile> [args...]
           (jarファイルを実行する場合)
   または  java [options] -m <module>[/<mainclass>] [args...]
       java [options] --module <module>[/<mainclass>] [args...]
           (モジュールのメイン・クラスを実行する場合)
   または  java [options] <sourcefile> [args]
           (単一のソースファイル・プログラムを実行する場合)

 メイン・クラス、ソース・ファイル、-jar <jarfile>、
 -mまたは--module <module>/<mainclass>に続く引数は、メイン・クラスへの引数として
 渡されます。

... 以下、略

最後に

JVMオプションが効かない!?ってときは、他人を疑う前に、まずは自分の打ち込んだコマンドをご確認ください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Javaのメソッドと引数の関係を生化学式に解釈する

Javaをはじめたのですが、なかなか理解できないので自分なりの解釈で勉強します:ghost:

メソッドの定義

public static メソッド名 (引数リスト) {
 処理
}

メソッドの呼び出し

メソッド名(引数)

引数とメソッドの考え方

:point_up_tone1:引数=基質
:point_up_tone1:メソッド=酵素
と考える

public class Main {
 public static void main(String[] args){
  hello ("Java");
 }

 public static void hello (String name){
  System.out.println(name + "こんにちは");
 }
}

基質(引数)が酵素(helloメソッド)を活性化する(呼びだす)
活性部位(変数の型と順番)があわなきゃダメ:helmet_with_cross:→コンパイルエラーになっちゃう

622.jpg

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Minecraft Plugin開発(Java)

1.15.2-R0.1
Minecraft(JE)です
アイテムをドロップしたことを検知して、その数秒後にアイテムの名前を変更するコードを書きたいのですが、上手くいきません。
Bメソッドまで呼ばれていることを確認しましたが、Bメソッド内のitemStackの更新が上手くいかないようです。
Aメソッド内では問題なく名前の変更ができました。
回答お待ちしています

下記コード

    //省略//
    @EventHandler
public void onPlayerDrop(PlayerDropItemEvent e) {
    ItemStack itemStack = e.getItemDrop().getItemStack();
            Test test = new Test(itemStack);
            test.A();
    e.setCancelled(true);
}
    }

    public Test {
        java.lang.System.out.println("Test");
        JavaPlugin javaPlugin;
        ItemStack itemStack;
        public Test (ItemStack itemStack) {
              this.itemStack = itemStack;
        }

        public void A () {
            java.lang.System.out.println("A");
            itemStack.setDisplayName("testA");
            itemStack.setItemMeta(itemMeta);
            new BukkitRunnable() {
       @Override
          public void run() {
              B();
          }
           }.runTaskLater(javaPlugin, 5);
        }

        public void B () {
            java.lang.System.out.println("B");
            itemStack.setDisplayName("testB");
            itemStack.setItemMeta(itemMeta);
        }
    }
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む