Webシステム開発の雑多なアウトプット

AWS、プログラム、OSS等を中心に良かった本も。

【Talend (Java)】Perl5Matcher と Perl5Compiler

tLibraryLoad で下記jarを指定。
jakarta-oro-2.0.8.jar

OnSubjebOK で tJava へ結ぶ。

import org.apache.oro.text.regex.MalformedPatternException;
import org.apache.oro.text.regex.Pattern;
import org.apache.oro.text.regex.Perl5Compiler;
import org.apache.oro.text.regex.Perl5Matcher;

String email="info@talend.com";

Perl5Matcher matcher = new Perl5Matcher();
Perl5Compiler compiler = new Perl5Compiler();
Pattern pattern=compiler.compile("^[\\w_.-]+@[\\w.-]+\\.[\\w]+$");
if(matcher.matches(email,pattern)) {
    System.out.println(email + " is a correct email address");}
else{
    System.err.println(email + " is an incorrect email address");
}



Perl5Matcherクラス

public boolean matches(java.lang.String input, Pattern pattern)

 文字列が、あるパターンに厳密にマッチしているかどうかを判定します。

Perl5Compilerクラス

public static final java.lang.String quotemeta(java.lang.String expression)

 文字列が渡された時に、元の文字列の各文字を文字通りに解釈するPerl5 正規表現を返却します。

【Java】文字列の文字コード変換

Stringの内部にあるのはchar型 (16進数で4桁) の配列であって、byte型 (16進数で2桁) の内部データは存在しません。
char型のまま16進数で出力する場合は次の通り。

String str = "123ABC漢字";
int len = str.length();

for (int i = 0; i < len; i++) {
    char c = str.charAt(i);
    System.out.println(Integer.toString*1;
}


・StringをUTF8のbyte配列に変換してから出力するなら以下になります。

try {
    String str = "123ABC漢字";
    byte[] b = str.getBytes("UTF8");
    int len = b.length;
    for (int i = 0; i < len; i++) {
        System.out.println(Integer.toString(b[i] & 0xFF, 16));
    }
    } catch (java.io.UnsupportedEncodingException e) {
        e.printStackTrace();
    }


*1:int)c, 16

どのような場合にポートの競合が発生するか

Linux では、bind() システムコールを起動して使用するポートを指定 しない場合、もしくは、引数のポート番号に 0 を指定して bind() システムコールを起動した場合、特定のポート番号の中から アプリケーションが使用するポート番号をカーネルが任意に割り当てる。

このため、あるアプリケーションがカーネルが割り当てたポート番号を 使用しているときに、他のアプリケーションがそのポート番号を指定して 使用しようとすると、ポート番号の競合が起こる。

カーネルが任意に割り当てるポート番号の範囲は、カーネルパラメータ (sysctlの結果.txt)の net.ipv4.ip_local_port_range にて 確認できる。

たとえば、 net.ipv4.ip_local_port_range = 1024 65000 となっている場合、カーネルが任意に割り当てるポート番号の範囲が 1024 ~ 65000 であることを意味する。

通信失敗時の切り分け

① lsof -u inms   OSのファイルディスクリプタの利用状況を取得することで、ファイルディスクリプタの枯渇が当事象   の原因でないかを確認します。

netstat –a   OSのネットワークリソース(接続状態やポートの状態など)の利用状況を取得することで、ネットワ   ークリソースの枯渇が当事象の原因でないかを確認します。

tcpdump port 19000   OSのネットワークの通信パケット情報のトレースを取得することで、当事象発生時にどのように接続   が行われ、接続の過程でどのようにエラーになったかを確認します。