outputStyleSheetが効かない
<body>タグ内には
<h:outputStylesheet library="css" name="head.css"/>
と記載しているが出力されたソースには"RES_NOT_FOUND"が出力されている
いろいろ試し、たどり着いたのがこのサイト、テンプレートファイルに記載するときに
注意が必要に成る。下記のようにfacetを記載すると解決した。
<f:facet name="last">
<h:outpuStyleSheet library="css" name="head.css"/>
</f:face>
関連ページ一覧
- Tomcatサーバーをセットアップする(Eclipse)
- Java Basic Swing〜オブジェクト指向〜
- Java Basic Swing Level 2〜オブジェクト指向2〜
- サンプル実装〜コンソールゲーム〜
- Java Basic インターフェース・抽象クラスの作り方
- Java Basic クラスとは〜Step2_1〜
- Java Basic JUnit 〜テストスイートの作り方〜
JSF1027: [null] JSF の ELResolver が JSP コンテナに登録されていません。
タイトルのエラー文言が原因だと思い込み、ELResolver関連の調査をしていたが
よく考えてみたら存在しないクラスをEL式で使用していました。
#{xxxx.getNum}... このクラスは使用していないので、削除したのでデプロイ時に参照されません、つまりビルドエラーでデプロイに失敗していました。。。。
persistent.xmlの書き方とテスト時の注意点
persistence.xml記述について
トランザクションタイプの指定について
JUnitと実際に起動するアプリケーションでpersistent.xmlを二つ用意する
・実際にソースでEntityManagerFactoryを作成するなどの方法
-
〜Java Basic関連〜
- Java Basic Level 1 〜Hello Java〜
- Java Basic Level2 〜Arithmetic Calculate〜
- Java Basic Level3 〜About String class〜
- Java Basic Level 4〜Boolean〜
- Java Basic Level 5〜If Statement〜
- Java Basic Summary from Level1 to 5
- Java Basic Level 6 〜Traning of If statement〜
- Java Basic Level8 〜How to use for statement〜
- Java Basic Level 8.5 〜Array〜
- Java Basic Level 9〜Training of for statement〜
- Java Basic Level 10 〜While statement 〜
- Java Basic Swing〜オブジェクト指向〜
- Java Basic Swing Level 2〜オブジェクト指向2〜
- サンプル実装〜コンソールゲーム〜
- Java Basic インターフェース・抽象クラスの作り方
- Java Basic クラスとは〜Step2_1〜
- Java Basic JUnit 〜テストスイートの作り方〜
JUnit Testing with JPA
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>
テスト実行、エラーなし!!!!
今までの苦労がーーーーー!!
まぁ勉強になったけどね⭐️
このサイトは参考になりました。
-
〜Java Basic関連〜
- Java Basic Level 1 〜Hello Java〜
- Java Basic Level2 〜Arithmetic Calculate〜
- Java Basic Level3 〜About String class〜
- Java Basic Level 4〜Boolean〜
- Java Basic Level 5〜If Statement〜
- Java Basic Summary from Level1 to 5
- Java Basic Level 6 〜Traning of If statement〜
- Java Basic Level8 〜How to use for statement〜
- Java Basic Level 8.5 〜Array〜
- Java Basic Level 9〜Training of for statement〜
- Java Basic Level 10 〜While statement 〜
- Java Basic Swing〜オブジェクト指向〜
- Java Basic Swing Level 2〜オブジェクト指向2〜
- サンプル実装〜コンソールゲーム〜
- Java Basic インターフェース・抽象クラスの作り方
- Java Basic クラスとは〜Step2_1〜
- Java Basic JUnit 〜テストスイートの作り方〜
総称型のキャスト
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の使い方
eclipseとmavenを使用した開発が便利なのはわかるがやり方と考え方が。。。
調べたのでまとめておく
参考サイト: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>
<!-- 追加したいライブラリ -->
<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
>
</
repository
>
</
distributionManagement
>
ここまで来て、エラーが解消できなかったが。。。
「Could not find artifact....」とのエラーは
<projectタグ直下の<argifactId>を修正し、faces-config.pagefllowファイルのcinfigfileの値を修正したら解消できました。
JPA Entity 自動生成 できない
プロジェクト・エクスプローラー→右クリック→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
まずインストール、eclipseを再起動....同じエラー..orz
ツールをインストールし直す(上記では必要そうなのを1つだけインストール)
参考にしたURLに似たものしか見当たらないので...
頭にJPAと付いているものをインストール、再起動... だがしかしダメ
エラーメッセージをよくよく見直す「not supported by Generic Platform」とある
プロジェクトのプロパティを開き「Platform」を確認「Generic」になってるので
「EclipseLink」に変更
プロジェクトを右クリック→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のサーバーライブラリが参照できなかった(↓)
結局のところは「ターゲットランタイム」のチェックが必要という事でした
[ウィンドウ]→[設定]→[ターゲットランタイム]で対象のサーバーランタイムにチェックを入れる
→OK
下記の通りパスがつながる