Java EE 7 検証環境をつくる Maven を使って Jar を集めてロギングする
Java EE 7 検証環境をつくるシリーズも、すこしづつ野望に近づいている。。。はず
- Java EE 7 を試すために CentOS に GlassFish をインストール
- Ubuntu に GlassFish v4 による Java EE 7 検証環境をつくる
- Ubuntu に Spring Tool Suite を入れて Java EE 7 検証環境をつくる
- Java EE 7 検証環境をつくる REST Webサービス
- Java EE 7 検証環境をつくる EJB編
- Java EE 7 検証環境をつくる MySQL へのjdbc接続をGlassFish v4 に作成
後一歩で、JPAにてが届くところまでやってきた。
いよいよ JPA!
の前に、小休止。
ここまで、Spring Tool Suite を使って作成した、Maven プロジェクトの Spring MVC と通常のEclipseのプロジェクトの Dynamic Web プロジェクトなどが、混在していてあまりまとまってない。
だいたい動くようになってきたので、プロジェクトの構成をきれいにしておこう。
「Java EEのearファイル形式はMavenの天敵である」「eclipseのWTPとの相性が非常に悪い」とのことなので、すべてのプロジェクトをMaven側に寄せようと思ったのだが、止めて、Maven は依存性のあるライブラリ収集ツールとして使おう。
1.Maven
1.1 インストール
Ubuntuでここまで検証しているが、Ubuntuには、以下のコマンドでインストールできる。
- $ sudo apt-get install maven2
インストールできた。確認。
- $ mvn --version
- Apache Maven 2.2.1 (rdebian-10)
- Java version: 1.7.0_45
- Java home: /usr/lib/jvm/java-7-oracle/jre
- Default locale: ja_JP, platform encoding: UTF-8
- OS name: "linux" version: "3.11.0-12-generic" arch: "amd64" Family: "unix"
1.2 Jar 収集プロジェクトの作成
目的は、pom.xml に記述した依存性に従って、Jarを集めてくること。
コマンドだけで集めてこれるとよいのだが、できなさそうなので そのためのプロジェクト jarget を任意のディレクトリに作成する。
- $ mvn archetype:create -DgroupId=info.typea.jarget -DartifactId=jarget
jarget ディレクトリが作成され、その中に pom.xml が作成されるので、pom.xml があるディレクトリで作業を行う。
- $ cd jarget
つぎのようなことができる。
コマンド | 内容 |
mvn compile | コンパイル |
mvn test | テスト |
mvn package | パッケージの作成 |
mvn deploy | デプロイ |
mvn clean | 作業を削除 |
先ずは、ロギング用のライブラリを収集したいので、生成されたpom.xml に、以下<!—logging –> を追記する。(distributionManagement はデプロイ 用に記述)
- <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>info.typea.jarget</groupId>
- <artifactId>jarget</artifactId>
- <version>1.0-SNAPSHOT</version>
- <packaging>jar</packaging>
- <name>jarget</name>
- <url>http://maven.apache.org</url>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
- <distributionManagement>
- <repository>
- <id>deploy-repository</id>
- <name>deployRepository</name>
- <url>file:///home/piroto/work/maven/jarget/deploy</url>
- </repository>
- </distributionManagement>
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>runtime</scope>
- </dependency>
- <!-- logging -->
- <dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-classic</artifactId>
- <version>1.1.1</version>
- <scope>runtime</scope>
- </dependency>
- </dependencies>
- </project>
依存ライブラリの取得
- $ mvn dependency:copy-dependencies
出力先のディレクトリを指定
- $ mvn dependency:copy-dependencies -DoutputDirectory=lib
収集できた!
2.ロギングの設定
2.1 Jarの配置
必要なJarが集まったのでロギングの設定を行う。
ロギングライブラリは、EARに含めるプロジェクト全体で利用するので、EARに持たせる。
EARプロジェクトのEarContent\lib の下に、収集したjarをすべて置く。
2.2 logback.xml の配置
ログ設定用の logback.xml をクラスパスが通っているところに置く。
- <?xml version="1.0" encoding="UTF-8"?>
- <configuration>
- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <encoder>
- <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
- </encoder>
- </appender>
- <logger name="info.typea" level="INFO"/>
- <root level="debug">
- <appender-ref ref="STDOUT" />
- </root>
- </configuration>
logback.xml は、命名ルールとか場所とかどのファイルが有効になるかがちょっとややこしい。
logbackは設定ファイルをクラスパス上から以下の順に探索する。
logback.groovy
logback-test.xml
logback.xml
BasicConfiguratorで初期化(メッセージは、コンソールに転送される)
2.3 ロギングしてみる
EJBにログを仕込んで実行
- package info.typea.tallarico.ejb;
- import javax.ejb.LocalBean;
- import javax.ejb.Stateless;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- /**
- * Session Bean implementation class GreetEjb
- */
- @Stateless
- @LocalBean
- public class GreetEjb {
- private static Logger logger = LoggerFactory.getLogger(GreetEjb.class);
- /**
- * Default constructor.
- */
- public GreetEjb() {
- // TODO Auto-generated constructor stub
- }
- public String getGreet() {
- logger.info("logging success!!");
- return "Hello EJB!";
- }
- }
おーロギングされたー! OKOK!
継続的デリバリー読みたいな。