JavaEE(JSF+JavaBean+EJB+JTA)でアプリを製作しているのですが、EJBの部分のjunitができないことが判明しました。
正確に言うとラムダ式を使うと不具合がでます。原因としてはラムダ式はJava8担ってから搭載されたものです。
JavaEEがまだ8に対応したものがでていないのでこの部分で不具合が出てしまうようですね。
ちなみにラムダ式を使わなければ以下の記述でテストが可能です。
1 pom.xmlの冒頭にあるプロパティ設定に、 glassfish.embedded-static-shell.jar という名前のプロパティ名を定義し、値に glassfish.embedded-static-shell.jar の実在の場所を記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<dependency> <groupId>org.glassfish.main.extras</groupId> <artifactId>glassfish-embedded-static-shell</artifactId> <version>4.1</version> <scope>system</scope> <systemPath>${glassfish.embedded-static-shell.jar}</systemPath> </dependency> //scopeの"system"というのは、実際の動作環境のことのようです。 <properties> <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <glassfish.embedded-static-shell.jar>C:/Users/Norio/GlassFish_Server/glassfish/lib/embedded/glassfish-embedded-static-shell.jar</glassfish.embedded-static-shell.jar> </properties> |
2 次にmysqlの依存関係をpom.xmlに定義
1 2 3 4 5 6 7 |
</properties> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.23</version> <scope>test</scope> </dependency> |
3 GlassFishのドメインルート(データベース接続場所を管理している場所)を記述したプロパティをハッシュに入れて、読み込む
1 2 3 4 5 6 7 8 9 10 11 12 |
/** * Test of create method, of class ProductListFacade. */ @Test public void testCreate() throws Exception { System.out.println("create"); Product entity = null; Map<String, Object> props = new HashMap<>(); props.put("org.glassfish.ejb.embedded.glassfish.instance.root", "C:\\Users\\Norio\\GlassFish_Server\\glassfish\\domains\\domain1"); EJBContainer container = javax.ejb.embeddable.EJBContainer.createEJBContainer(props); ProductListFacade instance = (ProductListFacade)container.getContext().lookup("java:global/classes/ProductListFacade"); |
propの部分ですが、GlassfishのDBのクラスを管理している部分のリンクを張っておかないといけません。
これで一応junitでテストができます。ただしJava7以下限定ですが・・・(汗)