【PrimeFaces】YesNoダイアログが開かない。(すぐ閉じる)

コマンドボタンをクリックして、YesNoダイアログを出したいが、押すとすぐに画面が閉じてかつYesの処理が実行されてしまう。

原因は二つ

  1. コマンドボタンの「ajax=”false” 」
    これは、ajax=trueもしくは未設定でOK。ファイルダウンロードを呼び出したいときにajax=falseでないといけない事象があってそれを流用したのが失敗。
  2. Yesボタンの「 onclick=”#{salesSummaryController.deleteRow()}”」
    これはactionListenerに設定しなければいけない模様。

<p:commandButton id=”deleteButton” icon=”ui-icon-trash” value=”選択行を削除”
onclick=”PF(‘dlgYesNo’).show();”
ajax=”false”
disabled=”#{empty salesSummaryController.selectedItem}”/>
<p:dialog widgetVar=”dlgYesNo”>
<p:outputLabel value=”選択行を削除します。よろしいですか?”/>
<br/>
<p:commandButton id=”cmdyes” value=”はい”
onclick=”#{salesSummaryController.deleteRow()}”
oncomplete=”PF(‘dlgYesNo’).hide()” styleClass=”ui-confirmdialog-yes” update=”:messages,:SalesSummaryListForm” />
<p:commandButton id=”cmdno” value=”いいえ” oncomplete=”PF(‘dlgYesNo’).hide()” update=”:SalesSummaryListForm” styleClass=”ui-confirmdialog-no” />
</p:dialog>

 

<p:commandButton id=”deleteButton” icon=”ui-icon-trash” value=”選択行を削除”
onclick=”PF(‘dlgYesNo’).show();”
disabled=”#{empty salesSummaryController.selectedItem}”/>
<p:dialog widgetVar=”dlgYesNo”>
<p:outputLabel value=”選択行を削除します。よろしいですか?”/>
<br/>
<p:commandButton id=”cmdyes” value=”はい”
actionListener=”#{salesSummaryController.deleteRow()}”
oncomplete=”PF(‘dlgYesNo’).hide()” styleClass=”ui-confirmdialog-yes” update=”:messages,:SalesSummaryListForm” />
<p:commandButton id=”cmdno” value=”いいえ” oncomplete=”PF(‘dlgYesNo’).hide()” update=”:SalesSummaryListForm” styleClass=”ui-confirmdialog-no” />
</p:dialog>

JAVAEEのJDBCレルム認証でログインエラー

「JAVAEEのJDBCレルム認証でログインエラー」

これ自体は別に起こっても問題ないのですが、ログを見てもいまいち根本原因がわからない。
なので、いろんな角度から原因を探っていくしかないのですが、とりあえず認証情報として渡している内容に齟齬はない。
で、2環境で一方はうまくいってもう一方がだめという状態だったので、とりあえず同じDBに接続して確認。
するとうまくいっていたほうもうまくいっていなかったので、realmの設定をとりあえずもう一回見てみたところ原因判明。

ユーザーマスタのテーブル名を変更して、片方しかrealmの参照DB設定を変更していなかったのが原因でした。

忘れたころに発生したらもしかしたら、調査の一助になるかもしれないのでメモ

 

Visualstudioのインストールで失敗したとき

インストール処理が長すぎて途中で処理が止まってしまい、インストールの継続も削除もできなくなってしまいました。
でサポートのフォーラムを調べたら「%ProgramData%\Microsoft\VisualStudio\Packages\」を削除しろとなっていたので削除したところインストールを最初から開始しなおすことができました。

(サポートページ)
https://developercommunity.visualstudio.com/content/problem/7587/after-failed-installation-cannot-repair-but-also-c.html

GitLabに公開鍵認証でssh接続する(けどなかなかできない!)

GitLabに公開鍵認証しようとしていろいろはまってしまったのでポイントだけまとめます。

※公式ドキュメントに誤りがあるので注意2016/7時点

  1. 秘密鍵の作成時にコメントを入れる。(これは公式ドキュメント通りなのではまってはいないが念のため)
    ssh-keygen -t rsa -C "{登録ユーザーのメールアドレス}"
  2. 秘密鍵をssh-addで登録する。
     $ssh-add ~/.ssh/id_rsa

    このとき「Could not open a connection to your authentication agent.」がでたら

     $ eval `ssh-agent`

    でエージェントを起動する。(普通にssh-agentでは環境変数の問題でちゃんと起動しないらしい。)

  3. configのuserに”git”を設定する!!
    ここが公式ドキュメントで間違っている模様。
    ユーザー名を指定しろとなっているが、それでは認証が通らない。

    #
    #Main gitlab.com server
    #
    Host gitlab.com
    RSAAuthentication yes
    IdentityFile ~/.ssh/id_rsa
    User git
    

 

上の3点をやればあとは普通につながる・・・はず。

Jacocoでレポートがファイルが出力されない。

NetBeansのプラグインで、Javaのテストカバレッジ取得ツールである「Jacoco」のプラグインをインストールした。
が!全然結果が出力されない。
色々調べたころ、
Mavenでテスト実行のための設定「maven-surefire-plugin」で、明示的にjacocoのレポート出力機能を呼び出すように記載を追加することで解決した。
※ほか人のサイトや、本サイトのサンプル見ても、そもそも「maven-surefire-plugin」のところは書いていなかったり、書いてあってもその設定なかったりするが・・・

テスト実行後に、プロジェクトを右クリック→コードカバレッジ→レポートを表示でレポート画面を開いても「テスト実行した?」というメッセージが出力される。
レポート画面の「全てのテストを実行」で実行しても同じ。
Jacocoを最新バージョン(この時は、0.7.7.201606060606)

色々調べてみたところ、プラグイン自体は、結果ファイルを読み込んで表示するだけのようで、あとやってくれるのはインストール時にMavenのBuildプラグインにJacocoの設定を追加するくらい。
他の利用者のサイトを見るとそれだけで動いているように見えるんですが・・・
とりあえず、何か設定が足りないんだろうと思い、テストを何度も実行しながらコンソールを確認。

するとreportのところで
「Skipping JaCoCo execution due to missing execution data file」
というメッセージを発見。どうやらレポート作成しようとして、結果ファイルが見つからない=出力されていないということが判明。
でも、prepeare-agentのところでは
jacocoArgs set to -javaagent:C:/XXX\\0.7.7.201606060606\\org.jacoco.agent-0.7.7.201606060606-runtime.jar=destfile=C:XXXXXXX\\target\\coverage-reports\\jacoco-unit.exec
となっていて、設定はちゃんとできていそう。
じゃあそもそも実行されていないのかと思い、ググってみると、
「maven-surefire-plugin」の引数にjavacocoの呼び出し設定?のようなものを追加しているものがあったので真似してみた。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-surefire-plugin</artifactId>
 <version>2.16</version>
 <configuration>
 <argLine>${jacocoArgs} -Dfile.encoding=UTF-8</argLine>
</configuration>
 </plugin></pre>
<pre><!--カバレッジ用に追加-->
 <plugin>
 <groupId>org.jacoco</groupId>
 <artifactId>jacoco-maven-plugin</artifactId>
 <version>0.7.7.201606060606</version>
 <executions>
 <execution>
 <id>default-prepare-agent</id>
 <phase>test-compile</phase>
 <goals>
 <goal>prepare-agent</goal>
 </goals>
 <configuration>
 <propertyName>jacocoArgs</propertyName>
 <includes>
 <include>*</include>
 </includes>
 <destFile>${basedir}/target/coverage-reports/jacoco-unit.exec</destFile>
 </configuration>
 </execution>
 <execution>
 <id>default-report</id>
 <phase>prepare-package</phase>
 <goals>
 <goal>report</goal>
 </goals>
 <configuration>
 <dataFile>${basedir}/target/coverage-reports/jacoco-unit.exec</dataFile>
 </configuration>
 </execution>
 <execution>
 <id>default-check</id>
 <goals>
 <goal>check</goal>
 </goals>
 <configuration>
 <rules>
 <!--implementation is needed only for Maven 2--> 
 <rule implementation="org.jacoco.maven.RuleConfiguration">
 <element>BUNDLE</element>
 <limits>
 <!--implementation is needed only for Maven 2--> 
 <limit implementation="org.jacoco.report.check.Limit">
 <counter>COMPLEXITY</counter>
 <value>COVEREDRATIO</value>
 <!-- コンパイル時に確認する達成率 -->
 <minimum>0.10</minimum>
 </limit>
 </limits>
 </rule>
 </rules>
 <dataFile>${basedir}/target/coverage-reports/jacoco-unit.exec</dataFile>
 </configuration>
 </execution>
 </executions>
 </plugin>

上記の設定にすると無事、テスト終了後にレポートが出力されるようになりました。
ちなみに、default-checkというのはビルド時に、カバレッジの最低値を設定することで下回っていた場合にはビルドエラーにしてくれるという
設定。CIと連携したら役に立ってくるかな。

(参考)
mavenの設定内容
http://www.eclemma.org/jacoco/trunk/doc/maven.html

@EJBが効かない?

localで開発していたアプリをlinux状のglassfishで動かそうとしたところ、NullpointerExceptionが発生。

View生成直後に、javax.ejb.Statelessアノテーションをつけたクラスを@EJB
アノテーションをつけたフィールドにインジェクトしたクラスを呼び出そうとしたところで発生した模様。

ほかの個所と比較したところうまくいっているとことは@Injectアノテーションを使用していたので、同じく修正したところ、正常に動作した。

念のためバージョンを調べてみたら、あれ・・・?マイナーバージョンが違っていた・・・

ローカル環境  :  GlassFish Server Open Source Edition  4.1.1  (build 1)
サーバー環境 : GlassFish Server Open Source Edition  4.0  (build 89)

バージョンの違いかもしれない・・・

 

PrimeFacesのファイルダウンロード機能利用時の注意

Primefacesでファイルダウンロードボタンクリック時にダイアログが開かなかった。

<p:commandButton id="buttonDownload" actionListener="#{testController.download()}" ajax="true"
value="ダウンロードのみ" update=":Form">
<p:fileDownload id="dl" value="#{testController.downloadContent}"/>
</p:commandButton>

 

いろいろいじったところ、ボタンのajaxが有効な場合、ダイアログが開かない模様。

<p:commandButton id="buttonDownload" actionListener="#{testController.download()}" <strong>ajax="false"</strong>
value="ダウンロードのみ" update=":Form">
<p:fileDownload id="dl" value="#{testController.downloadContent}"/>
</p:commandButton>

 

これで開くようになりました。

NetBeansにH2DBの管理用プラグイン(GUIから起動、停止可能)を登録する方法

 

  1. netBeansメニューのツール>プラグインで設定タブを選択。
    以下のURLをアップデートセンターの構成に追加する
    http://kenai.com/projects/nbh2/downloads/download/Latest_NetBeans671/updates.xml
  2. 使用可能なプラグインタブを選択し「最新の確認」をクリック
  3. 検索ボックスに”H2″と入力すると「H2 Database Engine Support」がインストールされます。
  4. エディタに戻って「サービス(ウインドウ>サービス)」のデータベース欄にH2というアイコンが追加されていればOK