日々精進

新しく学んだことを書き留めていきます

Apexからデバッグログを出しているのに、デバッグログ一覧に何も表示されない

Apexコード中でSystem.debug(‘’)をつかってログを出すと、 設定>環境>ログ>デバッグログ にあるデバッグログ一覧からログが見られるはず・・なんだけど、どうしても表示されない。 以下を参考に設定ちゃんとしてるはずなのに表示されない。

たいていのことは、「気合い」と「根性」で乗り越えられるものだ!!:【salesforce】【Apex】ログがでないゼイ。。。

Help | Training | Salesforce

なんでや・・とまじで困っていたが、ふとLightning ExperienceからSalesforce Classicに表示を切り替えてみると、 デバッグログ一覧の上に「Load New Logs」ボタンが・・これを押すとログが表示された。 LEXだとすべて削除ボタンしかないのに・・Salesforceでの開発はほんとつらみ。

Servletでファイルを読み込み、レスポンスとして返したら文字化けした

最初はHTTPヘッダの文字コード指定がだめなのかと思ったが、そうではなかった。 原因はファイルを読み込む際に文字コードを指定していなかったこと。ファイルから読み込む時点でもう文字化けしていた。 以下のように読み込み時に文字コードを指定したら直った。

BufferedReader b_reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));

参考:

tohokuaiki.hateblo.jp

dockerのWAS Libertyコンテナを使ってデバッグ実行をする方法

以下を参考に、WAS Libertyコンテナを動かすと、 wlp/bin/server run コマンドでWASが起動されるのでデバッグ実行できない。

https://hub.docker.com/_/websphere-liberty/

最初、dockerはコンテナ作成時に、コンテナ起動時に実行するコマンド(DockerfileのCMDで指定されているコマンド)を上書き出来る ので、以下のようにしてwlp/bin/server debugに上書きすればうまくいくのではと思ったがだめだった。

docker run -it -d -p 9080:9080 -p 9443:9443 -p 7777:7777 -p 9060:9060 websphere-liberty /opt/ibm/wlp/bin/server debug

最初にrunした時は問題無いが、一度stopした後startした場合、WASが7777ポートは掴んでいるがアプリサーバとしては動いていないという謎の状態になってしまう。 結局、以下のように起動時にはシェルだけ動かすようにして、その後ログインしてWASを起動するようにした。

docker run -it -d -p 9080:9080 -p 9443:9443 -p 7777:7777 -p 9060:9060 websphere-liberty /bin/bash
docker exec -it <container name> bash
/opt/ibm/wlp/bin/server debug

WAS liberty profileにデプロイしたアプリのcontext rootが想定と違う

普通は、app.warをdropinsフォルダに置くと、 http://localhost:9080/app/ のようにファイル名から.warを取った部分がcontext rootになるのに、そうならないアプリがあった。 原因は、そのwarの中にibm-web-ext.xmlがあったから。 context rootは以下の優先順位で決まる。

server.xml ファイル内の context-root
application.xml (EAR アプリケーションの場合)
ibm-web-ext.xml (Web アプリケーションの場合)
server.xml ファイル内のアプリケーションの name (Web アプリケーションの場合)
Manifest.MF (WAB アプリケーションの場合)
Liberty プロファイルの「dropins (ドロップイン)」ディレクトリーに対する相対ディレクトリー名または相対ファイル名

この仕様は知らなかった。。

参考:

IBM Knowledge Center

Dockerfileのデバッグ方法

Dockerfileを作っている時に、 docker build . が途中で失敗し原因を調査する際の手順。

  • docker ps -a でビルド失敗したコンテナを調べ、 docker commit でそのコンテナのイメージを作る
  • docker run --rm -it <imagename> /bin/bash でイメージからコンテナを作り、そこにログインする

以下のサイトを見た方が手順わかりやすいのでこちらを参照して下さい。

gendosu.jp

dockerコンテナでlsofなど基本的なコマンドが全然使えず困った

ubuntuのコンテナを作っても、nanoもviもlsofも使えず困った。 以下のようにして自分でインストールする必要がある。

apt-get update
apt get install nano vi lsof

Docker用に最小限のパッケージしか入れてないんだろうけど、 基本的なやつは最初から入れて欲しい。。

参考:

www.linuxquestions.org

Antでビルド時にコマンドライン引数を受け取って文字列置換する

なぜ今更Antでビルドしないといけないのか。。と思いつつ。 以下のようにpropertyタグを定義し、ant -Dserver_type=“test” のようにして文字列を渡す。 replacefilterタグでテンプレートの文字列を置換できる。

<project name="SimpleAnt" default="compile">
    <property name="server_type" />
    <target name="create.conf">
      <copy file="src/main/resources/logback.xml.template" tofile="src/main/resources/logback.xml" overwrite="true" />
      <replace file="src/main/resources/logback.xml" encoding="UTF-8">
        <replacefilter token="@SERVER_TYPE@" value="${server_type}"/>
      </replace>
    </target>
</project>

参考:

qiita.com

blogs.yahoo.co.jp