【Eclipse】Tomcat サーバーエラー

突然サーバーエラーでシステムに繋がらなくなりました。

コンソールに出ているエラーは

SystemRuntimeException:  [Ljava.lang.Object;@ba4a46[{○○○-sqlmap.xml}]
at .util.MasterList.getMasterList(java:73)
at gamen.login(java:257)
at gamen(java:171)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.struts.beanaction.ActionInvoker.invoke(.java:16)
at org.apache.struts.beanaction.DefaultActionInterceptor.intercept(.java:5)
at org.apache.struts.beanaction.BeanAction.execute(:246)
at org.apache.struts.action.RequestProcessor.processActionPerform(.java:431)
at org.apache.struts.action.RequestProcessor.process(.java:236)
at org.apache.struts.action.ActionServlet.process(1196)
at org.apache.struts.action.ActionServlet.doGet(:414)

Caused by: ZzzSystemRuntimeException:  [Ljava.lang.Object;@1ee970[{○○○-sqlmap.xml}]
at sql.SqlMapClientFactory.create(SqlMapClientFactory.java:126)

みたいな感じです。
フレームワークiBatisを使用しているのですが、どうやらsql-mapがみれていない様子。

環境変数で解決!

sql-mapファイルは存在していることを確認しているので
他をあたろうと現状を整理する。

Listenerは上がっていて、Oracleには接続できている。
selectなどでDBはみれる。

JavaからOracleに接続できないのかと思い、JDBC
接続可能か試す。

// Oracle JDBC Driverのロード
Class.forName("oracle.jdbc.driver");
// Oracleに接続
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:Oracle", "ユーザー", "パス");
// ステートメントを作成
Statement stmt = conn.createStatement();
// 問合せの実行
ResultSet rset = stmt.executeQuery("select * from table");

// 問合せ結果の表示
while (rset.next()) {
// 列番号による指定
System.out.println(rset.getString(1) + "\t" + rset.getString(2));
//System.out.println(rset.getString(1));
}
// 結果セットをクローズ
rset.close();
// ステートメントをクローズ
stmt.close();
// 接続をクローズ
conn.close();

上記の結果はちゃんとselectした結果がかえって来るんですよね~

はて、お手上げ状態です。

動いているマシンといろいろ比較した結果
PCの環境設定に違いがあることがわかりました。

マイコンピューターを右クリック → プロパティ → システムの詳細設計 → 環境変数 を開きます。

f:id:topvalue:20180216225040j:plain

ここのシステム環境変数にシステムのHOMEが足りなかったんですね

HOMEを追加してやれば無事サーバーエラーがなくなりました。

しかし環境変数を追加してもまだエラーが解消されないPCが
いるので、戦いは続きそうです・・・

【カメラ】ふるさと村

寺家ふるさと村に行ってきました。

青葉台にふるさと村なるところがあるというので

カメラかついで行ってきました。

ふるさと村リンク↓

http://jikehurusatomura.in.coocan.jp/

 

青葉台駅からバスで約20分ぐらいでしょうか「鴨志田団地」で下車します。

f:id:topvalue:20180203202119j:plain

少し歩くと開けた場所にでて、もう目の前は一面田んぼでした。

f:id:topvalue:20180203202220j:plain

f:id:topvalue:20180203202310j:plain

f:id:topvalue:20180203202340j:plain

f:id:topvalue:20180203202414j:plain

暗くなってしまうと遭難しそうになるので、時間と相談して早めに切り上げましょう(笑)。

f:id:topvalue:20180203202454j:plain

f:id:topvalue:20180203202612j:plain

水車は趣があっていいですね。

f:id:topvalue:20180203202644j:plain

 

f:id:topvalue:20180203202720j:plain

田園風景は大好きなので大満足でした!

お帰りの際はバスの時間にきおつけましょう。

 

 

【Powershell】Gitログの送信

マージ履歴を見ることで進捗を確認したり、他の人が何をしたのか
確認したいことってありますよね。
そこでソース管理をGitでしている場合マージ履歴をメールで送ってくれるバッチを作ってみました。

#Gitログの作成
cd C:\Users\ #ワークスペースのパス
git log --name-only --encoding=sjis > develop_log.csv

if($LastExitCode -eq 0){
    # 宛先メールアドレス
    $to = "メールアドレス"
    # 送信元メールアドレス
    $from = "git@log.com"
    # SMTPサーバー(IP、ホスト名どちらでも)
    $smtp = "メールサーバー"
    #添付ファイルq
    $File='C:\Users\ワークスペースのパス\develop_log.csv'
    # 件名
    $subject = "Gitログの送信"
    # 本文
    [string]$body = @()
    $body += "前日のGitログを送信します。"
    #メール送信    
    Send-MailMessage -To $to -From $from  -Attachments $File -SmtpServer $smtp -Subject $subject -Body $body -Encoding ([System.Text.Encoding]::UTF8)
    echo 送信成功
}

Gitを導入するとGitのコマンドを使用できるので、それを利用して
git logを出力します。

まず、ワークスペースの場所に移動する。
git log を出力。(sjisで出力)

git logを出力し終わらないうちにメールが送信されてしまう
ことがあるため、$LastExitCodeで前の処理が終了したかを判断しています。

このバッチをタスクマネージャーで朝一回起動するようにして
昨日までのマージ履歴を確認するようにしています。

【Windows】ようこそからログインが進まない

もともと起動が遅いパソコンがあったのですが、ログイン画面で

IDとパスワードを入力してようこそが表示されてからいっこうに進まないことが

ありました。

f:id:topvalue:20180131203026j:plain

 

もう1時間ほどほっておいたのですが、まったく進まないので

調べてみたら ユーザープロファイルが破損している可能性がありますとあるではありませんか!!

まさか!!

そうなると新規にアカウントを作りなおさないといけないみたいです。

Windowsの「ようこそ」から進まない場合の対処方法 | パソコントラブル情報をピックアップ

 

最近新規にアカウントを作り直したんですが、その時にデータを移行するのが

とてもめんどくさかったんですよね・・・

だからアカウントは作り直したくない!

時間かかるし!

 

いろいろ調べたのですがアカウントが壊れているといった情報しか

見つからなかったため、もう電源を落として再起動しました。

 

再起動させたときにwindowsを通常起動するを選ぶといつもどうりログインすることができました。

 

困ったときの再起動ですね。

 

【Oracle】Case式の条件でLikeをつかう

Case式の条件でLikeは使えるのだろうかと思い
調べてみました。

そこでOracleのCase式について調べてみると
www.shift-the-oracle.com

使えるやん!!
IS NULLや IN  Likeも記述可能となってます。

そこで目的の使いかたができました。

CASE  
 WHEN  CODE LIKE 'A%' THEN 'Aコード'
 WHEN  CODE LIKE 'S%' or SAGYOU_CODE LIKE 'E%' THEN 'SEコード' 
 WHEN  CODE LIKE 'L%' THEN 'Lコード'
 WHEN SUBSTR(CODE,5,1) = 'K' or SUBSTR(CODE,5,1) = 'M' THEN 'KMコード'
 WHEN BUNYA_CODE = '1' THEN '1分野 '
 WHEN BUNYA_CODE = '2' AND  (SELECT A,Code FROM ATable  A WHERE A.JUCHUNO = SUBSTR(A.CODE,0,8)) < 35 THEN '個別分野コード' 
 WHEN BUNYA_CODE = '2' AND  (SELECT A,Code FROM ATable  A WHERE A.JUCHUNO = SUBSTR(A.CODE,0,8)) > 36 THEN '専門分野コード' 
 ELSE 'その他'
END as コード区分


Likeどころかサブクエリまで条件に入れられるなんて
Case式凄すぎません?
Thenの後ろにもサブクエリをいれることが可能。

そもそもCase式が使えるのは
Oracle 9以降みたいですね。

【Powershell】ファイルをカウントする

特定のファイル名をカウントするやりかたです。

#ファイルに含まれている文字列
$target = "探す文字列"
$targetPath = "フォルダまでのパス"
$filecount = dir $targetPath | ? {$_.Name -like "$target*"}.count

カウントしたいファイルがあるフォルダの一覧を表示して
$targetの数をカウントしています。
? は whereエイリアスで、パイプで渡すときに条件をつけています。

しかし上記の方法だとカウントしたいファイルが1件だった場合
カウントされません。
結果でnullが返ってくる。
そこで

#ファイルに含まれている文字列
$target = "探す文字列"
$targetPath = "フォルダまでのパス"
$filecount = @(dir $targetPath | ? {$_.Name -like "$target*"}).count

カウントの前に@をつけてやります。
そうすると結果が1件としてかえってきます。

どうもcountした結果が1件だった場合
配列としてではなく単一のオブジェクトとして認識されるため
1がかえってこないようです。

powershell v3.0からは@をつけなくても正しくcountの結果がかえってくるようです。