日々精進

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

IT

WAS Libertyのheap dumpを取得する

IT

wlp/bin/server dumpで取得出来るが、OutOfMemoryが発生している時に実行してもエラーになってしまった。 server.xmlと同じフォルダにjvm.optionsファイルを配置し、内容を以下にするとOOMが発生した時に自動的にheap dumpを吐いてくれるので便利。 -Xmx1024…

JUnitを実行すると「Class Not Found Exception」エラー

IT

Mavenがどうもちゃんと動いてないのが原因っぽい。 EclipseからプロジェクトをCleanしたあと、mvn clean installを実行すると直った。 参考: stackoverflow.com

Salesforceの開発者コンソールでマウスを使って画面をスクロールするとスクロール位置がぴょんぴょんジャンプしてスクロールできない

IT

これは既知のバグで、2017 summerバージョンで直るらしい。 こんな基本的な不具合が残ったままリリースされるのがSalesforceクオリティ。 参考: Developer Console jumping when using mouse scroll

Salesforceで設定ファイルを使いたい

IT

JavaEEアプリだと、propertiesファイルを使って設定を管理したりするけど、 Salesforceの場合は同じことをカスタム設定を使って行う。 設定種別の「階層」というのは何かといういと、一つの項目で組織のデフォルト値を各プロファイル・ユーザの値を それぞれ…

Sun JavaではデフォルトではAESを使用出来ない

IT

AESはメジャーなアルゴリズムなので結構意外だった。 アメリカの法律によって規制されてるかららしい。 jarを入れ替えれば使えるようになるんだけどね。やり方は以下参照。 qiita.com

Mac用のIBM JDKが見付からない

IT

探したけど全然見付からない。なんでだ。。 以下によると、単独では配布されてなくて、他のプロダクトと一緒に配布されてるらしいが、WAS Libertyとかには入ってなかった。 dW:Java:IBM Java Runtimes and SDKs:IBM JDK for OSX - IBM Java Runtimes and SDK…

dockerコンテナでsudoを使えるようにする

IT

以下を実行すると使えるようになる。いきなりinstallしようとしてもエラーになるので先にupdateする apt-get update && apt-get -y install sudo 参考: stackoverflow.com

実行ファイルを実行すると「cannot execute binary file: Exec format error」エラー

IT

原因はOSに対応してないバイナリを実行しようとしているため。 Linux用バイナリをMacで実行してるとか、32bit用を64bit環境で実行してるとか。 参考: yatta47.hateblo.jp

JavaでKeyStore#getEntryを実行すると「UnrecoverableKeyException」エラー

IT

原因はIBM JavaとSun JavaはKeyStoreの互換性がないこと。 IBMのJDKに含まれるkeytoolで作成したkeystoreをSun JDKを使ったアプリから読み込もうとしていたのでだめだった。 JDKのメーカーを合わせると直った。 参考: stackoverflow.com

cpコマンドで強制上書きする

IT

cp -fで確認なしで上書き出来るだろうと思ったら出来なかった。。 cpにエイリアスを設定してるの忘れてた。 このような場合、以下のようにyesコマンドを使うと上書き確認を自動化できる。 yes | cp foo bar yesコマンド初めて知った。。こんなんあるんだ。 …

typescriptのEnumにメソッドを定義する

IT

正確にはEnumにメソッドがはえたように見せる、だけど。。 以下のように、Enumと同じ名前のnamespaceを定義し、そこにメソッドを定義することで Enumにメソッドを定義したように見せられる。 enum Weekday { Monday, Tuesday, Wednesday, Thursday, Friday, …

IntelliJでimport文を*でまとめないようにする

IT

他のIDEを使っている人と設定が合っていなかったので、編集する度にimport文のところに 差分が出てうっとうしかった。 Settings > Code Style > Java > Imports > Class count to use import with ‘*’ この値を大きな数字にしておけばまとめられない。 参考:…

SQLのPreparedStatementをログに出す

IT

SQLは以下のような形で作っておき、これと?に埋めるデータをDBライブラリのメソッドに渡すことが多い。 SELECT ... FROM ... WHERE id = ? この値を?に埋めた後の文字列はDB側でも存在しないらしいので、埋めた後の文字列をログに出すことは出来ない。 なの…

ApexからAccountを作成すると「UNKNOWN_EXCEPTION, portal account owner must have a role: []」エラー

IT

原因はAccountのオーナーとして設定したユーザにRoleが設定されていなかったため。 Account a = new Account(); a.OwnerId = user.Id; // このユーザのRoleが設定されていなかった ユーザにRoleを設定すると直った。 参考: tyoshikawa1106.hatenablog.com

Googleスプレッドシートでセルがいくつかの文字列のうち一つに一致しているかどうかを判定する

IT

以下のようにORを繋げて書くのダルいのでもっと簡単に書ける方法を探した。 =INDIRECT("status!$A:$BH"),COLUMN(),FALSE)="A" OR INDIRECT("status!$A:$BH"),COLUMN(),FALSE)="B" OR ... REGEXMATCH関数を使って正規表現でマッチさせるのが良さそう。例は以…

GoogleスプレッドシートのIMPORTRANGEは条件付き書式ではうまく動かない

IT

条件付き書式を判定する数式の中にIMPORTRANGEを入れてもなかなか正しく書式が反映されず困った。 セルに条件付き書式で使っているのと同じ関数を入れて実行すると条件付き書式も更新されることがあった。 どうも条件付き書式の数式は実行の優先順位が低い感…

WAS Libertyを起動すると「CWWKC2262E: /WEB-INF/web.xml デプロイメント記述子で、サーバーは 3.1 バージョンおよび http://xmlns.jcp.org/xml/ns/javaee 名前空間を処理できません」エラー

IT

原因はweb.xmlのバージョンが3.1だから。 今回はweb.xmlが無くても大丈夫だったので削除して解決した。 参考: IBM Knowledge Center

Javaで列挙型に任意の文字列を使う

IT

以下のようにprivateコンストラクタを定義して、コンストラクタにEnumに持たせたいデータを渡す。 public enum Channel { EMPLOYEE("employee"), AGENT("agent"), CUSTOMER("customer"), ; private final String text; private Channel(final String text) {…

Salesforce Migration Toolを実行すると「Invalid username, password, security token; or user locked out」エラー

IT

原因はログイン先URLを間違えていることだった。 ログイン先の組織がsandboxの場合は build.propertiesの sf.serverurl = https://login.salesforce.com を sf.serverurl = https://test.salesforce.com にしないといけない。 もっとわかりやすいエラーメッ…

Salesforceのカスタムオブジェクトにインデックスを追加するのは結構ハードルが高い

IT

カスタムオブジェクトの項目は以下の項目であれば自動的にインデックスが作成されるがそれ以外にインデックスを 付けようとするとサポートに連絡して付けて貰わないといけない。 プライマリ キー(Id、Name、および、Owner 項目) 外部キー(参照 または 主…

Salesforceの各種制限のリファレンス

IT

SalesforceにはApexのガバナ制限以外にも、色んな制限がある。 以下の資料にまとめがあるので適宜参照する必要がある。 http://resources.docs.salesforce.com/206/19/ja-jp/sfdc/pdf/salesforce_app_limits_cheatsheet.pdf 制限の値などはちょくちょく変わ…

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

IT

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

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

IT

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

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

IT

以下を参考に、WAS Libertyコンテナを動かすと、 wlp/bin/server run コマンドでWASが起動されるのでデバッグ実行できない。 https://hub.docker.com/_/websphere-liberty/ 最初、dockerはコンテナ作成時に、コンテナ起動時に実行するコマンド(Dockerfileの…

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

IT

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

Dockerfileのデバッグ方法

IT

Dockerfileを作っている時に、 docker build . が途中で失敗し原因を調査する際の手順。 docker ps -a でビルド失敗したコンテナを調べ、 docker commit でそのコンテナのイメージを作る docker run --rm -it <imagename> /bin/bash でイメージからコンテナを作り、そこ</imagename>…

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

IT

ubuntuのコンテナを作っても、nanoもviもlsofも使えず困った。 以下のようにして自分でインストールする必要がある。 apt-get update apt get install nano vi lsof Docker用に最小限のパッケージしか入れてないんだろうけど、 基本的なやつは最初から入れて…

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

IT

なぜ今更Antでビルドしないといけないのか。。と思いつつ。 以下のようにpropertyタグを定義し、ant -Dserver_type=“test” のようにして文字列を渡す。 replacefilterタグでテンプレートの文字列を置換できる。 <project name="SimpleAnt" default="compile"> <property name="server_type" /> <target name="create.conf"> </target></property></project>

IntelliJでビルドすると「Cannot start compilation: the output path is not specified for module・・・」エラー

IT

原因はモジュールをビルドした時のビルド成果物を保存するパスが設定されていないため。 プロジェクト設定画面で以下を設定すると直った。 Module settings > Project > Project compiler output にoutと入力する Modules > Paths > Inherit project〜 にチ…

Javaからホスト名を取得する方法

IT

InetAddress.getLocalHost().getHostName() と Runtime.getRuntime().exec("hostname") のどちらでも取得出来るが、 InetAddress.getLocalHost().getHostName() の方が環境が変わっても正しく動く可能性が高い。 参考: stackoverflow.com