2015/09/02

ちょっとメモ

定期的にjolokiaからデータを抜いてファイル出力するデーモンプログラムを作る必要に迫られたので作ってみた。

とりあえず、ソースぺたり。

package jp.shibadog.daemon;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import javax.management.MalformedObjectNameException;

import org.jolokia.client.J4pClient;
import org.jolokia.client.exception.J4pException;
import org.jolokia.client.request.J4pReadRequest;
import org.jolokia.client.request.J4pReadResponse;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.Option;

public class DaemonTool {

public static SimpleDateFormat sdf1 = new SimpleDateFormat(
"yyyy/MM/dd:HH:mm:ss");

@Option(name = "-c", aliases = "--config", usage = "コンフィグファイルの指定")
private String confPath = "";

public static void main(String[] args) {
DaemonTool dt = new DaemonTool();
dt.execute(args);
}

private void execute(String[] args) {

if (!init(args)) {
System.exit(1);
}

if (this.confPath != null && !"".equals(this.confPath)) {
JSONParser parser = new JSONParser();
String s = null;
try {
BufferedReader br = new BufferedReader(new FileReader(new File(
this.confPath)));
StringBuilder sb = new StringBuilder();
String tmp = br.readLine();
while (tmp != null) {
sb.append(tmp);
tmp = br.readLine();
}
s = sb.toString();
System.out.println(s);
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}

Object obj;
try {
obj = parser.parse(s);
JSONObject json = (JSONObject) obj;
System.out.println("request-url=" + json.get("requestUrl"));
} catch (ParseException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
}
}

ScheduledExecutorService service = Executors
.newSingleThreadScheduledExecutor();

J4pReadRequest req;
try {
req = new J4pReadRequest("java.lang:type=Memory", "HeapMemoryUsage");
req.setPath("used");
String urlRoot = "http://localhost:7001/jolokia-war-1.3.1";
String hostname = getHostName(urlRoot);

service.scheduleAtFixedRate(new ExecuteMBeanGetter(hostname, urlRoot, req),
0, 5, TimeUnit.SECONDS);
} catch (MalformedObjectNameException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} finally {

}
}

private boolean init(String[] args) {
boolean ret = false;
CmdLineParser parser = new CmdLineParser(this);

try {
// parse options
parser.parseArgument(args);

System.out.println("Starting application...");
System.out.println("Configuration   : " + confPath);
// System.out.println("Server mode : " + isServer);
// System.out.println("Destination : " + dst);

// your code
ret = true;
} catch (CmdLineException e) {
// print usage.
System.out.println(e);
parser.printUsage(System.out);
System.exit(1);
}
return ret;
}

public String getHostName(String urlRoot) {
String res = null;
J4pClient j4pClient = new J4pClient(urlRoot);
try {
J4pReadRequest req = new J4pReadRequest("java.lang:type=Runtime", "Name");
J4pReadResponse resp = j4pClient.execute(req);
String tmp = resp.getValue();
res = tmp.substring(tmp.indexOf("@") + 1);
} catch (J4pException | MalformedObjectNameException e) {
System.out.println(e);
e.printStackTrace();
}
return res;
}

class ExecuteMBeanGetter implements Runnable {
private J4pReadRequest req;
private String urlRoot;
private String hostname;

public ExecuteMBeanGetter(String hostname, String urlRoot2, J4pReadRequest req2) {
setUrlRoot(urlRoot2);
setReq(req2);
setHostname(hostname);
}

@Override
public void run() {
J4pClient j4pClient = new J4pClient(getUrlRoot());
try {
J4pReadResponse resp = j4pClient.execute(getReq());
System.out
.println(DaemonTool.sdf1.format(resp.getRequestDate())
+ "," + getHostname() + "," + resp.getValue());
} catch (J4pException e) {
System.out.println(e);
e.printStackTrace();
}
}

public J4pReadRequest getReq() {
return req;
}

private void setReq(J4pReadRequest req) {
this.req = req;
}

public String getUrlRoot() {
return urlRoot;
}

private void setUrlRoot(String urlRoot) {
this.urlRoot = urlRoot;
}

public String getHostname() {
return hostname;
}

public void setHostname(String hostname) {
this.hostname = hostname;
}

}
}

2015/08/31

weblogicのコマンド操作(アンデプロイ)

さてさて、無事weblogicがインストールできたわけだが、今回の目的というのも、weblogic serverにjolokiaをデプロイしたら、いろいろ壊れて大変なことになったのでそれを直すため環境を作って調べているわけなのだ。

まずは、jolokiaとweblogicは相性が悪いのか?というところから確認。

。。。普通にデプロイできるし見えるじゃん。

では次に、壊れちゃったweblogicを修復するためにweblogicのコマンドからアンデプロイの手段を調べる。

コマンドの公式リファレンスはこちら。
http://otndnld.oracle.co.jp/document/products/wls/docs92/deployment/wldeployer.html#wp1008316

さてはて、どうやら、Java上で動くweblogic.Deployerというものが存在するらしい。
このツールはオプションで接続情報を設定し、サブコマンドでいろいろ操作ができるというものの様子。

では早速、アンデプロイのコマンドはどんなものになるかというと。

java weblogic.Deployer -adminurl http://localhost:7001 -username weblogic -passowerd weblogic -stop jolokia
java weblogic.Deployer -adminurl http://localhost:7001 -username weblogic -passowerd weblogic -undeploy jolokia

という感じらしい。

という感じらしい、というのも、weblogic.Deployerが見つからずうまく動いてくれないため確認できなかったからである(ぉ

でも、調べているうちに、コマンドの使い方がわかったので、一旦OKとしようと思う。

この甘さ加減が問題だな。

以上。

MacOSのJDKインストール場所

ひっさしぶりに投稿。

といっても大した話ではなく。

MacでJDKのインストール場所がわからないという、超初歩的な話。


/Library/Java/JavaVirtualMachines

上記パス配下に入るらしい。

dmgでパッケージインストールしてもJAVA_HOMEが設定されなかったので、WebLogicのzipインストールをしようとして困ったので調べてみた。

と言っても、WebLogicのREADMEに書いてあるっていうね。

ほぼフリーみたいなもんなんだから、技術力あげなきゃね。。。

以上。

2013/04/09

C#で拡張メソッドをつか

仕事中に同僚が発見した便利そうな技を紹介

といっても、人のブログに乗ってたやつだけども。

http://d.hatena.ne.jp/siokoshou/20080124#p1

何をしようとしたかというと、Enumで宣言したエラーコードをもとにエラーメッセージを返す処理を書きたく、うまい変換手段を考えてた。
Enumで宣言したコードからToStringでEnumにひもづく文字列を取得するというもの。

拡張メソッドというやつが便利すぎるので今後取り入れたいと思う。

まぁ、そんだけ。

2013/04/05

SSMS IntelliSenseが言うことを聞かない時の対処


DBのオブジェクト構造を変更したとき、新しいオブジェクトでインテリセンスが効かなかったりする。
何かをきっかけに効くようになるため、放置していたが、ちょこちょこストアドやらビューやらを作ったり消したりしていると結構わけわからなくなるので調べてみた。

http://msdn.microsoft.com/ja-jp/library/ms173434.aspx

どうやら、ローカルキャッシュを持っているようで、これを更新することで最新の状態でインテリセンスを効かすことができるようだ。

方法としては以下の2パターン

1.[編集] → [IntelliSense] → [ローカルキャッシュの更新]
2.Shift + Ctrl + R

どちらも、クエリエディタが開いているときに操作可能な様。

まぁ、メニュー漁れよの一言だとは思うが。。。忘れそうなので記載する。

2013/03/05

C# Listからオブジェクトの要素を検索する


久々の更新

2回以上探したロジックなので自前でのっけます。

C# List<T>からオブジェクトの要素を検索する

オブジェクトのコレクションからオブジェクトのプロパティやらフィールドをキーに検索する方法について。

抽出方法として2点見つけた。
1.List<T>.Findとデリゲートで抽出
2.Linqを使って抽出

2.はイマイチLinqを理解していないためパス(ぇ

てわけで、お気楽に1.を記載

まずは、MSDN
http://msdn.microsoft.com/ja-jp/library/x0b5b5bc.aspx

Find以外にもFindAllだのFindLastだのがあるようだ。
目的に応じて使い分ければよし。

で、使い方については以下の通り。

※ Dataクラスにはプロパティ「ID」があるものとする。


例:ID=1であるDataオブジェクトをDatasコレクションから抽出する
int localID = 1; Data data = Datas.Find( delegate(Data d) { return d.ID == localID; } );
同様に複数とりたかった場合はFindAllを使えばいいし、Indexが一番大きいオブジェクトを取得したければ、FindLastを使えばよいということ。

いやぁ便利だねぇデリゲート。

他のやりたいこともそのうち追加しとこう

備忘録
・オブジェクトリストを一発ソート
・オブジェクトリスト内の存在確認

2012/12/29

とりあえず、めも

クロームが重くてかなわない。。。

検索して一番最初に出てくるのがキャッシュフォルダをRAMディスクにしてしまうという方法

忘れると悪いので、やり方が書いてあるブログのアドレスをぺたぺた
http://blog.livedoor.jp/beta2ch/archives/1097587.html

とりあえず、以上。