読者です 読者をやめる 読者になる 読者になる

日々精進

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

プロジェクト参照の設定をbuild.gradle・settings.gradleにした後IntelliJからビルドするとNoClassDefFoundError

IT

原因はIntelliJがgradleタスクをキャッシュするためだった。 メニューのView > Tool Window > gradleからgradle paneを開き、refreshボタンをクリックしたら直った。 gradleの設定を変更したら、refreshボタンをクリックしないといけないのか。。必ずしないといけないわけではないけど、 taskが増えたり減ったりしたらrefreshした方がいいっぽい。

WASが開いているポート番号を調べる

IT

管理コンソールから「サーバー」-「サーバー・タイプ」-「WebSphere Application Servder」 - 「server1」 - 「ポート」を選択するとポートの一覧が表示される。 WC_defaulthostがHTTPのポート。

参考:

WAS 小ワザ集: 第4回:WASがオープンしているポート番号を調べる

シェルスクリプトをどこからでも実行出来るようにする

IT

shell.shというファイルに ant -lib libs/ とか書いてると、./libsフォルダが存在するところからしか実行出来なくなってしまう。 ./project/shell.sh のようにシェルがあるところ以外からもシェルスクリプトを実行出来るようにするためには、 以下のようにシェルスクリプトのパスを取得して使う。

script_dir_path=$(cd "$(dirname "$0")"; pwd)
ant -lib ${script_dir_path}/libs/

参考:

stackoverflow.com

qiita.com

ResultSetに特定のカラムが含まれているか、やカラムのメタデータを取得する

IT

以下のようにすると特定の名前のカラムがあるかどうかを判定出来る。

ResultSetMetaData rsMetaData = rs.getMetaData();
int numberOfColumns = rsMetaData.getColumnCount();

// get the column names; column indexes start from 1
for (int i = 1; i < numberOfColumns + 1; i++) {
    String columnName = rsMetaData.getColumnName(i);
    // Get the name of the column's table name
    if ("theColumn".equals(columnName)) {
        System.out.println("Bingo!");
    }
}

こういう感じでカラムの型もわかる。

    private static Integer getColumnType(ResultSet rs, String columnName) throws SQLException {
        ResultSetMetaData rsMetaData = rs.getMetaData();
        int numberOfColumns = rsMetaData.getColumnCount();

        for (int i = 1; i < numberOfColumns + 1; i++) {
            String name = rsMetaData.getColumnName(i);
            rsMetaData.getColumnType(i);
            // Get the name of the column's table name
            if (columnName.equals(name)) {
                return rsMetaData.getColumnType(i);
            }
        }
        return null;
    }

参考:

stackoverflow.com

HttpServletRequestから完全なURLを取り出す

IT

HttpServletRequestのgetRequestURLにはQueryStringが含まれていないので、以下のようにする必要がある。

public static String getFullURL(HttpServletRequest request) {
    StringBuffer requestURL = request.getRequestURL();
    String queryString = request.getQueryString();

    if (queryString == null) {
        return requestURL.toString();
    } else {
        return requestURL.append('?').append(queryString).toString();
    }
}

一発で取れるメソッドを用意してくれても良かったんじゃ無いかなぁ。。

参考:

stackoverflow.com

Salesforceで外部オブジェクトをApexからinsertする

IT

Salesforceの外部オブジェクトをApexからinsertする場合、普通のオブジェクトと同じようにinsertコマンドではできなかった。 Database.insertImmediateまたはDatabase.insertAsyncを使うとinsertできた。 Database.insertImmediate(sObject) Database.は省略不可で、insertImmediate(sObject)のみではエラーになった。

参考:

リリースノート