Takunojiのプログラミング・プレイグラウンド(遊び場)

Javaプログラミングを基本にして、ゲーム作成に必要なことの調査結果、やったら面白そうなことなどを記載します。プログラミングのススメ的なことも記載します。プログラミングで楽しく遊ぶために色々と記載して行きます。

outputStyleSheetが効かない

<body>タグ内には

    <h:outputStylesheet library="css" name="head.css"/>

 

f:id:Takunoji:20160314212050p:plain

と記載しているが出力されたソースには"RES_NOT_FOUND"が出力されている

いろいろ試し、たどり着いたのがこのサイト、テンプレートファイルに記載するときに

注意が必要に成る。下記のようにfacetを記載すると解決した。

<f:facet name="last">

      <h:outpuStyleSheet library="css" name="head.css"/>

</f:face>

stackoverflow.com

 

関連ページ一覧

  1. Tomcatサーバーをセットアップする(Eclipse)
  2. Java Basic Swing〜オブジェクト指向〜
  3. Java Basic Swing Level 2〜オブジェクト指向2〜
  4. サンプル実装〜コンソールゲーム〜
  5. Java Basic インターフェース・抽象クラスの作り方
  6. Java Basic クラスとは〜Step2_1〜
  7. Java Basic JUnit 〜テストスイートの作り方〜

 

 

JSF1027: [null] JSF の ELResolver が JSP コンテナに登録されていません。

タイトルのエラー文言が原因だと思い込み、ELResolver関連の調査をしていたが

よく考えてみたら存在しないクラスをEL式で使用していました。

 

#{xxxx.getNum}... このクラスは使用していないので、削除したのでデプロイ時に参照されません、つまりビルドエラーでデプロイに失敗していました。。。。

persistent.xmlの書き方とテスト時の注意点

persistence.xml記述について

persistence.xmlの詳細

トランザクションタイプの指定について

persistence.xmlの詳細

 

JUnitと実際に起動するアプリケーションでpersistent.xmlを二つ用意する

・実際にソースでEntityManagerFactoryを作成するなどの方法

Eclipse Community Forums: EclipseLink » EclipseLink + RCP + OSGI Service: No Persistence provider for EntityManager

 

JUnit Testing with JPA

JUnitJPAでのテストを実行する

1.testgフォルダを切る

2.persistence.xmlにプロパティをしていしてDBへの接続情報を設定する

        <properties>

            <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>

            <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/postgres"/>

            <property name="javax.persistence.jdbc.user" value="DBのユーザー"/>

            <property name="javax.persistence.jdbc.password" value="パスワード"/>

            <property name="eclipselink.ddl-generation" value="none"/>

<!-- ここの部分でテーブルの自動Create, Dropなどを設定する -->

<property name="eclipselink.id-validation" value="NONE"/>

        </properties>

 

出力されたエラー

Internal Exception: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial

だが、解決方法がわからない。調査したが「appserv-rt.jar」を追加してやれば

プロパティを読み込んでくれるらしいのだが.........

予想、

1.persistence-unitの名前がテストでない方のxmlと被ってプロパティが読めない…

→関係なかった......

色々と調べたが、SystemPropertyを取得したり、設定を行う必要があるみたいだ....

参考サイト

https://blogs.oracle.com/randystuph/entry/injecting_jndi_datasources_for_junit

 

JUnitでのテスト時には、サーバーを起動しないためtaransaction-type="RESOURCE-LOCAL"での実行になる → EntityManagerFactoryの読み込みが変わる

テストクラスで、実装したものを使用して実行する

 

やっぱり、NoInitialContextExceptionがでる......

 

Mavenを使用しての単体テストではpropertyをソースから指定してやる。

persistence.xmlのプロパティを直接読み込む必要がある

PersistenceUnitProperties.プロパティ名を使用してPropertiesに値を設定→テスト

を繰り返したが.... ダメ

 

仕切り直し、下記のようにpersistence.xmlを書き直す。

<persistence-unit name="NoJta" transaction-type="RESOURCE_LOCAL">

        <jta-data-source>jdbc/プロジェクト名</jta-data-source>

        <class>エンティティクラス</class>

       <properties>

<property name="persistenceXmlLocation" value="META-INF/persistence.xml" />

            <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>

            <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/postgres"/>

            <property name="javax.persistence.jdbc.user" value="ユーザー名"/>

            <property name="javax.persistence.jdbc.password" value="パスワード"/>

            <property name="eclipselink.ddl-generation" value="none"/>

<property name="eclipselink.id-validation" value="NONE"/>

        </properties>

</persistence-unit>

 テスト実行、エラーなし!!!!

今までの苦労がーーーーー!!

 

まぁ勉強になったけどね⭐️

このサイトは参考になりました。

Eclipse Community Forums: EclipseLink » EclipseLink + RCP + OSGI Service: No Persistence provider for EntityManager

 

総称型のキャスト

List<? extends SampleIF> list = getSample();

***** ここでキャストを行いたい ******

下記のようなクラスへとキャストを行いたいがエラーがでる。

public class Customer implements SampleIF { ....}

 

>Cannot cast from Class<capture#1-of ? extends SampleIF> to SampleIF

 

現状、意図する解決策が見つからず、フツーにキャストを行う形でエラーを解消

 

ArrayList<Customer> cusList = new ArrayList<Customer>();

for (SampleIF smp : list) {

      Customer cus = (Customer) smp;

      cusList.add(cus);

}

うーむ、ラムダ式を使うべきだな,,,,

jpaのテストを実行したら、データが消えた

jpaでエンティティを作成しいざテスト...

エラーはないがデータが取得できない、0件取得だった

 

データはDBに登録したけれどはて?......

 

DBを確認する...データがない、DROPされてる?

 

persistence.xml

            <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>

のような記述をしていたので、実行後、見事にデータが吹っ飛んでしまったというわけです。下記のように修正

            <property name="eclipselink.ddl-generation" value="none"/>

データは無事だったが次は

[EL Warning]: 2016-02-06 21:13:22.41--UnitOfWork(2021601975)--Exception [EclipseLink-7197] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.ValidationException

。。。。

[jp.zenryoku.frw.entity.MenuMST@65bcf7c2], primary key [0]. Set descriptors IdValidation or the "eclipselink.id-validation" property.

javax.persistence.RollbackException: Exception [EclipseLink-7197] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.ValidationException

Exception Description: Null or zero primary key encountered in unit of work clone 

のようなエラーが...

https://www.eclipse.org/forums/index.php/t/476633/

このサイトを参照して、一応解決したが,,,英語が読めるとよいのだが......

 

 

 

Mavenの使い方

eclipsemavenを使用した開発が便利なのはわかるがやり方と考え方が。。。

 

調べたのでまとめておく

参考サイト:https://maven.apache.org/pom.html

 

1.mvn install コマンド

・pox.xmlに定義したライブラリをローカルリポジトリ(Mavenリポジトリ)

  にインストール→開発プロジェクトから参照できるようになる

*自分の作成するものに関しては全角表示

pom.xml----------------------------------------------------------------------

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<!-- このプロジェクトに関する情報 -->

<modelVersion>4.0.0</modelVersion>

<groupId>グループID</groupId>

<artifactId>アーティファクトID</artifactId>

<version>バージョン</version>

<packaging>出力するファイル形式(war, earなど)</packaging>

<description>説明書き</description>

<dependencies>

 

<!-- 追加したいライブラリ -->

<dependency>

<groupId>対象のライブラリグループID</groupId>

<artifactId>アーティファクトID</artifactId>

<version>バージョン</version>

</dependency>

</dependencies>

<repositories>

 

<!-- 参照するライブラリをインストールするリモートリポジトリ -->

<repository>

<!-- Primeface -->

<id>primefaces-repository</id>

<name>Primefaces repository</name>

<url>http://repository.primefaces.org</url>

</repository>

</repositories>

 

<!-- プラグイン -->

<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-dependency-plugin</artifactId>

<version>2.6</version>

<executions>

<execution>

<phase>validate</phase>

<goals>

<goal>copy</goal>

</goals>

<configuration>

<outputDirectory>${endorsed.dir}</outputDirectory>

<silent>true</silent>

<artifactItems>

<artifactItem>

<groupId>javax</groupId>

<artifactId>javaee-endorsed-api</artifactId>

<version>7.0</version>

<type>jar</type>

</artifactItem>

</artifactItems>

</configuration>

</execution>

</executions>

</plugin>

</plugins>

----------------------------------------------------------------------

2.mavenでのデプロイはdistributionManagementタグで追加

 <distributionManagement>
    <repository>
      <id>deploy-repository</id>
      <name>deployRepository</name>
      <url>file://${env.M2_HOME}/deployRepository</url>
    </repository>
  </distributionManagement>

 

ここまで来て、エラーが解消できなかったが。。。

「Could not find artifact....」とのエラーは

<projectタグ直下の<argifactId>を修正し、faces-config.pagefllowファイルのcinfigfileの値を修正したら解消できました。

 

JPA Entity 自動生成 できない

Eclipse

プロジェクト・エクスプローラー→右クリック→JPA Tools→TableからEntity生成

でEntityを自動生成しようとすると下記のようなエラーが出る

「Generate Tables from Entity is not supported by Generic Platform」

 

原因はよくわからないので、一からセットアップを行う

参考:JPA 2.0 with EclipseLink - Tutorial

2.もしかしたら、このプラグインだけでも良いかも?

Eclipse Mars.1 - http://download.oracle.com/otn_software/oepe/library/eclipse-mars.1

f:id:Takunoji:20160130103405p:plain

まずインストールeclipseを再起動....同じエラー..orz

 

ツールをインストールし直す(上記では必要そうなのを1つだけインストール

 

参考にしたURLに似たものしか見当たらないので...

頭にJPAと付いているものをインストール、再起動... だがしかしダメ

 

エラーメッセージをよくよく見直す「not supported by Generic Platform」とある

プロジェクトのプロパティを開き「Platform」を確認「Generic」になってるので

「EclipseLink」に変更

f:id:Takunoji:20160130110927p:plain

 

プロジェクトを右クリック→JPA Tools....と自動生成を行おうとすると

対象の画面が開く.....

Entityの自動生成ができました

Glassfish デプロイエラー WELD-001301

Glassfish4でサーバーを起動した時のエラー

 

cannot Deploy プロジェクト名

deploy is failing=Error occurred during deployment: Exception while loading the app : CDI deployment failure:WELD-001301: Annotation @org.glassfish.api.admin.RestEndpoints(value=[@org.glassfish.api.admin.RestEndpoint(path=osgi, useForAuthorization=false, description=Remote OSGi Shell Access, params=[], opType=POST, configBean=interface com.sun.enterprise.config.serverbeans.Domain)]) is not a qualifier. Please see server.log for more details.

 

以前も同じようなエラーが出たがメモをしていないかった

以前は、参照するJARファイルがなくてエラーになっていた.....

 

メモをしていなかったのでもう一度デバックを行う(涙)

 

.....原因は上記のようにJARファイルへの参照(ビルドパス)が足りない事でした

さらにはGlassfishのサーバーライブラリが参照できなかった(↓)

 

f:id:Takunoji:20160104221730p:plain

結局のところは「ターゲットランタイム」のチェックが必要という事でした

[ウィンドウ]→[設定]→[ターゲットランタイム]で対象のサーバーランタイムにチェックを入れる

OK

 

f:id:Takunoji:20160104222106p:plain

 

下記の通りパスがつながる

f:id:Takunoji:20160104222217p:plain