[WLS, FMW] WebLogic Server 12.1.3 on JDK 8

原文はこちら。
https://blogs.oracle.com/WebLogicServer/entry/weblogic_server_12_1_3

WebLogic Server 12.1.3がJava SE 8での動作検証が済み、動作が保証されました。2年ほど前にこの検証をはじめましたが、製品コードだけでなく、バイトコード操作のためのASM、Java開発ツールのEclipseといった様々な3rdパーティツールにも変更が必要でした。Windows、Linux、Solarisの64bitプラットフォームで、HotSpot JDK8 Update 20以降の組み合わせでサポートされます。あなたはのMaxPermSizeをコマンドラインで正しく設定しなければならない時代は終わりました(JDK8が無視します)。この動作認定は、WebLogic Server固有のものであって、特に明記しない限り、他のOracleソフトウェアは対象ではありません。

新しいJava SE 8の機能をこのエントリですべて記述しません(知りたい方は以下のリンクをどうぞ)が、これからは人気のある機能、具体的にはLamda式や、JSPを含む、アプリケーションのデフォルトメソッドといったものが使えるようになります。
What's New in JDK 8
http://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html
Lambda式を使った簡単なサーブレットのサンプルを以下につけておきます。

Java SE 8には、新しいJDBC 4.2のAPIがあり、JDBC 4.2をサポートするJDBCドライバは、Java SE 8上で動作するWebLogic Server 12.1.3でサポートします。WebLogic Server 12.1.3に同梱されているDerby 10.10ドライバはJDBC 4.2でテストしています(詳細は以下をどうぞ)。
JDBC 4.2-only features
http://db.apache.org/derby/docs/10.10/ref/rrefjdbc4_2summary.html
ベンダーインターフェースのAPIがアプリケーションに対して透過的に見えるよう、WebLogic ServerデータソースはDynamic Proxyを使います。JDK8の新しいデフォルトメソッドとDynamic Proxyの組み合わせによって、WebLogic ServerがJDBC 4,2をサポートする上で変更は不要でした。すべては、JVMとベンダーのJDBCドライバで行われます。今後、JDBC4.2に関する詳細情報を別のエントリでご紹介する予定です。.

統合が必要な領域は、Java EE Concurrency Features(JSR 236)、Java SEでのfork/joinとparallel streams機能です。現時点で、WebLogic Server 12.1.3はfork/joinやparallel streams機能を使うアプリケーションをサポートしないため、WebLogic Serverアプリケーションをビルドする際にはこれらの機能を使わないようにしなければなりません。この制限の理由は、 fork/joinスレッドプールが使うスレッドがWebLogic Serverが管理対象とするスレッドでないからです。セキュリティやトランザクションステートを含め、スレッドの状態が適切に作成されない可能性があるため、これらのスレッドで実行されるワークはすべて、WebLogic ServerやJava EEのファシリティを利用できない可能性があります。さらに、おそらく過度にスレッドを使用するため、これらのスレッドは、WebLogic Serverワークマネージャのスレッド管理機能によって制御されることはありません。
JDK8では数多くのセキュリティ面で機能強化が図られました。無制限強度の新しいJava暗号化拡張ポリシーJCEポリシー・プラットフォーム(Unlimited Strength Java(TM) Cryptography Extension Policy Files for the Java(TM) Platform, Standard Edition Runtime Environment 8)をインストールする必要があるかもしれませんが、JDK8用のJCE Unlimited Strength Jurisdiction Policy Filesは以下からダウンロードできます。
Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8 Download
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
開発に際してJDK8の機能を利用したい場合、お気に入りのIDEの最新版にアップグレードしたくなるかもしれません。一般的に、多くのツールがすでにJDK8をサポートするようになっていますが、jarjar(ASM 4の組込み版で、JDK8では動作しません)だけが、まだアップデートされていません。Java 8はEclipse Keplerのアップデート、Eclipse Luna(4.4)で利用いただけます。OracleはOEPEとして知られているOracle Enterprise Pack for Eclipse(12.1.3.1.1、現在12.1.3.2)を出荷していますが、これはLunaをベースとしており、JDK7、JDK8をサポートしています。詳細は以下のリンクをどうぞ。
Oracle Enterprise Pack for Eclipse (12.1.3.2)
http://www.oracle.com/technetwork/developer-tools/eclipse/downloads/index.html)
Oracle製品の開発でEclipseをお使いになる場合、「Oracleのミドルウェア、モバイル、データベースおよびクラウド·プラットフォームを活用できる、Eclipseの開発者のための比類のないデベロッパー・エクスペリエンス」のために、OEPEをお試しください。

WebLogic Server 12.1.3のドキュメントのWhat’s NewにJDK8サポートに関する詳細情報が記載されました。
What's New in Oracle WebLogic Server
Supported Configurations
http://docs.oracle.com/middleware/1213/wls/NOTES/index.html#NOTES193
最新のHotSpot SE 8 JVMをダウンロードし、新機能を試してみてください。

Calculator.java servlet:
import java.io.IOException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(
  name = "Calculator",
  urlPatterns = "/calculator"
)
public class Calculator extends HttpServlet implements Servlet {
  protected void doGet(HttpServletRequest request,
  HttpServletResponse response) throws ServletException, IOException {
    doPost(request, response);
  }

  protected void doPost(HttpServletRequest request,
  HttpServletResponse response) throws ServletException, IOException {
    Integer number1 = Integer.valueOf(request.getParameter("number1"));
    Integer number2 = Integer.valueOf(request.getParameter("number2"));
    String operator = request.getParameter("operator");

    Calculator myCalc = new Calculator();
    IntegerMath multiplication = (num1, num2) -> num1 * num2;
    IntegerMath division = (num1, num2) -> num1 / num2;
    IntegerMath addition = (num1, num2) -> num1 + num2;
    IntegerMath subtraction = (num1, num2) -> num1 - num2;

    Integer result = 0;
    switch(operator) {
    case("+"):
      result=myCalc.operatorBinary(number1,number2,addition);
      break;
    case("-"):
      result=myCalc.operatorBinary(number1,number2,subtraction);
      break;
    case("*"):
      result=myCalc.operatorBinary(number1,number2,multiplication);
      break;
    case("/"):
      result=myCalc.operatorBinary(number1,number2,division);
      break;
    }
    request.setAttribute("result", result);
    request.getRequestDispatcher("calculator.jsp").forward(request, response);
  }

  interface IntegerMath {
    int operation(int number1, int number2);
  }
  public int operatorBinary(int number1, int number2, IntegerMath op) {
    return op.operation(number1, number2);
  }
}

calculator.jsp
<form id="calculator" action="calculator" method="post">
  <p>
  First number <input name="number1" type="text"/>
  <select name="operator">
    <option value="*"> * </option>
    <option value="/"> / </option>
    <option value="+"> + </option>
    <option value="-"> - </option>
  </select>
  Second number <input name="number2" type="text"/>
    <button type="submit"> Calculate </button>
  </p>
  <p> Result: <span id="result">${result}</span></p>
</form>

なお、My Oracle Supportで、ダウンロードが必要かもしれない、2件のバグに対応するパッチが提供されています。
  • Patch 18729264 - JAVA8 JDT GA MAY FAIL WITH JDK8 RUNTIME AND "-SOURCE" / "-TARGET" LESS THAN 1.8
  • Patch 18428696 - EJBGEN HAS REFERENCES TO SUN.MIRROR.APT, WHICH GOES AWAY IN JDK8

0 件のコメント:

コメントを投稿