Java EE 7 検証環境をつくる Maven を使って Jar を集めてロギングする

Java EE 7 検証環境をつくるシリーズも、すこしづつ野望に近づいている。。。はず

  1. Java EE 7 を試すために CentOS に GlassFish をインストール
  2. Ubuntu に GlassFish v4 による Java EE 7 検証環境をつくる
  3. Ubuntu に Spring Tool Suite を入れて Java EE 7 検証環境をつくる
  4. Java EE 7 検証環境をつくる REST Webサービス
  5. Java EE 7 検証環境をつくる EJB編
  6. 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 デプロイ (distributionManagement を記述)
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

収集できた!

collect_jars

2.ロギングの設定

2.1 Jarの配置

必要なJarが集まったのでロギングの設定を行う。

ロギングライブラリは、EARに含めるプロジェクト全体で利用するので、EARに持たせる。

EARプロジェクトのEarContent\lib の下に、収集したjarをすべて置く。

log_jars_on_ear

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!";
    }

}

logging_success

おーロギングされたー! OKOK!

継続的デリバリー読みたいな。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です