[Java, Security] A Bug in Kerberos used by Java's HTTP

原文はこちら。
https://blogs.oracle.com/wangwj/entry/a_bug_in_kerberos_used

先頃JDK-802835が直接報告されて初めて、Oracle Forumのスレッドに気付きました。ごめんなさい。
Java SE Ver 7 Uxx locking out domain user account failing Kerberos PreAuth
https://community.oracle.com/thread/2547044
JWS doesn't get authenticated when using kerberos auth proxy (JDK-8028351)
https://bugs.openjdk.java.net/browse/JDK-8028351
調査の結果、このバグはJava SE 7u60とJava SE 8で修正されます。遅すぎる解決でないことを願っています。
Windows認証を控えるWebページは実際のところKerberosならびにNTLMで保護されており、クライアントがサポートするどちらの認証スキームでもアクセス可能です。JDK 7では、ドメインに参加している(正確には以下をご覧下さい)WindowsマシンではKerberosが標準で動作するため、常にKerberos認証をまず最初に試行します。ところが、allowtgtsessionkeyというレジストリキーを設定していない場合、Javaはログインにパスワードを必要とします。
allowtgtsessionkey Registry Key
http://www.javaactivedirectory.com/?page_id=93
(JAASを直接プログラミングしていないかぎり)このパスワードを入手する方法はないので、Javaは空パスワードで試行します。当然ながらKDC(Windowsドメインコントローラ)はこの試行を拒否し、複数回試行すると当該ユーザーをブロックします。
スレッドでは .java.login.config のトリックについて言及されています。Javaはファイルを使いたいけれども見つけることができない場合、ログインの試行を全くせずに失敗します。このバグレポートには、Kerberosの事前認証の無効化が回避策との記載があります。この場合、暗号化されたタイムスタンプを送信しないので、KDCはクライアントが正しいパスワードを持っていることを知る機会がありません。
いずれにせよ、Kerberos認証は常に失敗し、JavaはNTLM認証にフォールバックするため、Webページには到達します。しかし、恐ろしい事に、空のパスワードの場合は、最初はアクセスしてページを読むことができますが、何度もアクセスすると、最終的にアカウントがブロックされてしまい、NTLM認証も機能しなくなってしまいます。

[Database] Oracle Multitenant Infograhpic

原文はこちら。
https://blogs.oracle.com/databaseinsider/entry/oracle_multitenant_infograhpic

様々なお客様がOracle Multitenantがもたらす多くのメリットを認識し始めています。
下図をご覧いただくと、Oracle Multitenantで劇的に統合の集積度をどれほど向上させるのかがおわかりいただけます。
Infographic on Oracle Multitenant (PDF)
http://www.oracle.com/us/products/database/oracle-multitenant-infographic-1961308.pdf
しかも、多くのデータベースを一つのまとめるにあたってアプリケーションを全く変更する必要はありません。みなさまの場合、Oracle Multitenantでの初期の体験はどんな感じでしたか?
http://www.oracle.com/us/products/database/oracle-multitenant-infographic-1961308.pdf

[Java] Java EE 8 Community Survey - The Final Part!

原文はこちら。
https://blogs.oracle.com/theaquarium/entry/java_ee_community_survey_part

"I do have to pick my priorities. Nobody can do everything."
(Ray Kurzweil)
先頃実施したJava EE 8コミュニティアンケートの結果がまとまりました。
Results  from  the  Java  EE  8  Community
https://java.net/projects/javaee-spec/downloads/download/JavaEE8_Community_Survey_Results.pdf
以前お約束したように、この調査の最終フェーズは、最も頻繁に機能を要求されたもののうち、その優先順位を教えてもらう機会です。
しかし、その調査は、どれが重要でどれが重要でないかといったことだけではなく、相対的な重要性とリソースに関するものです。このリストにある全てを次回のリリースで提供することはできませんし、このリストにないものでリリースが必要になるものも出てくるでしょうが、このリストにあるアイテムに対し、限りあるリソースをどう割り振るべきかを皆様に教えてほしいのです。
そんなわけで、本日、最後のアンケートを立ち上げました(パート3)。
Java EE 8 Community Survey - Features Prioritization
https://glassfish.java.net/survey 
アイデアは非常に簡単です。我々はあなたに100ポイント付与しますので、提案された改善点(既存の仕様改善、完全な新機能や新技術)のどれが重要と思っているか、をお知らせいただきたいのです。ある「必須」の改善点があって、それがあなたにとって重要であれば、それに対したくさんのポイント、最大100ポイントまでを割り当てて下さい。唯一のルールは、一つ以上の提案された改善点に対し、100ポイントを配分しなければならない、ということです。99ポイントでも101ポイントでもだめです、100ポイント全て使って下さい。
これらの技術的な改善点の全てが難易度の点で同等であるとは限らない、ということは言及しておくべきでしょう。あるものは比較的実装が簡単ですが、別のものは明らかに検討や作業がもっと必要でしょう。 また、Java EE開発者コミュニティからのインプットが我々にとって非常に重要であるにも関わらず、これらの結果が結合されていないのです。そのため、戴いた全てのフィードバック、それはあなたのフィードバックだけではなく、さまざまなJaav EEライセンシーや専門家グループのメンバーなどからのインプット全体のバランスを取る必要があります。
最後に、Java EEの進化に寄与・影響を与える別の方法があることを思い出すのによい機会です。是非既存の専門家グループ(Expert Group)プロジェクトに参加してください。
Java EE Platform Specification
https://java.net/projects/javaee-spec/pages/Home 
是非Java EE 8で重要と考えてらっしゃるものをお知らせ下さい。
Oracle Java EEチームを代表して、皆様のご協力をどうぞよろしくお願いします。

[Database, Support] Read database performance troubleshooting note!

原文はこちら。
https://blogs.oracle.com/performance-and-qtune/entry/read_database_performance_troubleshooting_note

SR(Service Request、サポート依頼)をあげる前にこのデータベース性能のトラブルシューティングに関するサポート文書を読んでおきましょう。
Using the Database PerformanceTroubleshooting Assistant (TA) when logging an SR (My Oracle Support Community)
https://community.oracle.com/message/12154750
[訳注]
これだけだと何のことかわからないのでちょっと補足します。
My Oracle Supportの以下のページで、データベースパフォーマンスに関わるよくある問い合わせとその解決策をウィザード形式で探し出せるようになっています。
Troubleshooting Assistant: Troubleshooting Performance Issues (Doc ID 1543445.2)
https://support.oracle.com/rs?type=doc&id=1543445.2

[Security] Top 10 solution documents for OWSM and OAG/OEG

原文はこちら。
https://blogs.oracle.com/proactivejavadevelopment/entry/top_5_owsm_and_oag

以下にご紹介するのは、直近の4半期にOracle Web Services Manager (OWSM) と Oracle API Gateway (OAG/OEG)に関するSRに対し、ソリューションとして提供されたトップ10のドキュメントです。
1481062.1 Enterprise Manager Cannot Invoke WS Policy Manager When Managed Servers SSL Port Is Enabled
Oracle Fusion Middleware Webサービスのためのセキュリティおよび管理者ガイド 11g リリース1(11.1.1.7)
ポリシー・マネージャに接続できない
http://docs.oracle.com/cd/E51625_01/web.1111/b56247/diagnosing.htm#BABHEHHI
Oracle® Fusion Middleware Security and Administrator's Guide for Web Services 11g Release 1 (11.1.1.6)
Unable to Connect to the Policy Manager
http://docs.oracle.com/cd/E23943_01/web.1111/b32511/diagnosing.htm#BABHEHHI
このドキュメントでは、OWSMの自動検索機能はデフォルトでSSLを使って接続を試行しようとすることを説明しています。
1548712.1 Security Patch Error - Patch 16262532
この問題は、前提条件となるパッチがないために発生しています。
1586714.1 OAG 11.1.2.1 Enterprise Manager Grid Control Plug-in Not Collecting Data When Using Https
これはプラグインの制限事項で、将来のリリースで対応する予定です。Enhancement Request 1675548が提出されていますが、現時点では、この機能がどのバージョンで含まれるかはわかりません。
1540873.1 Poor Performance When Using OWSM Without Message Encryption
このメッセージ本体を最初にOWSMが解析し、その後Webサービススタックが再度解析します。両方がメッセージ本体の各要素を解析します。
1569900.1 OWSM Error Message: WSM-02120 ... Connection refused; No available router to destination
WebLogicドメインの config/fmwconfig/policy-accessor-config.xml でPolicy AccessorのURLを間違って設定したか、一貫しないSSL設定によって、OWSMが壊れる可能性があります。
1574074.1 Security Violation: User: 'OracleSystemUser' has insufficient permission to access EJB wsm-pmserver-wls.jar
「'OracleSystemUser' はwsm-pmserver-wls.jarにアクセスするための権限がありません」というメッセージは、以下の事柄が原因です。
  • OracleSystemUserが環境に存在しない、もしくは、正しいグループメンバーシップを有していない
  • ポリシーにアクセスする際にOWSMが利用するロールが変更され、その変更が正しく実行されていない
  • ドメイン全体の管理ポートが構成され、OracleSystemUserには管理権限がない
1587522.1 Error Message "Attempted to remove a WLSExeucutionContext from the current WorkContextMap" When Using OWSM
この問題はWebサービスリクエストを実行中に新しいコンテキストを構成した際に現れます。
1535635.1 How To Create A Custom Policy Based On "oracle/wss10_x509_token_with_message_protection_service_policy" And Apply It To A BPEL Composite That Calls A Simple WebService In Another Domain? Then Create A Pair Of New Policies
本書は、異なるドメインにあるWebサービスを呼び出すBPELコンポジットの設定、実装のためのサンプルのみを提供することを目的としています。
942623.1 How to Change Default Password for the Admin Account in OWSM 10g
1572265.1 Error Appears In Gateway Log Caused From Tcp Probes
TCPプローブによってこのメッセージが発生しています。これらのTCPプローブは、ハードウェアロードバランサ由来の可能性があります。TCPプローブはソフトウェアTCPプローブ由来の場合もあります。

[JavaFX] Dynamical layouts in FX

原文はこちら。
https://blogs.oracle.com/jfxprg/entry/dynamical_layouts_in_fx

JavaFXのレイアウトコードを引き継いでから、私は、動的レイアウト(Dynamical Layouts)に関連するバグ報告があり、多くの人々が実装に苦労されていることに気付きました。動的レイアウトとは、レイアウトPane(layout Pane)が子のサイズ変更や位置を決めるだけでなく、取得したサイズによっては子のリストを操作するものです。

標準Layout Paneにおける典型的な流れは以下の通りです。
  1. 親ペインがprefWidth/prefHeightを呼び出す。preferred sizeは現在の子とPaneプロパティや制約の組み合わせから計算される。
  2. 親が実際の幅や高さを割り当てる
  3. レイアウトを幅や高さ、手順1で使ったものと同じ子のセットで計算する
Dynamical Paneは以下のような流れになっています。
  1. preferred sizeは、固定もしくはPaneプロパティもしくは(子を作成するベースとなる)アイテムによって変化する
  2. 親は実際の幅や高さを割り当てる
  3. レイアウトを幅や高さから計算し、それに応じて子を作成する
固定サイズの長方形を有する簡単な動的Paneは以下のように実装できます。
private class GrowingPane extends Pane {

        private static final int PREF_NUMBER = 2;
        private static final int RECTANGLE_SIZE = 50;
        private static final int PADDING = 10;

        @Override
        protected double computePrefWidth(double height) {
            return PREF_NUMBER * RECTANGLE_SIZE + (2 + PREF_NUMBER - 1) * PADDING;
        }

        @Override
        protected double computePrefHeight(double width) {
            return RECTANGLE_SIZE + 2 * PADDING;
        }


        @Override
        protected void layoutChildren() {
            final double w = getWidth();

            getChildren().clear();
            // count the number of Rectangles that will fit
            final int num = (int) (w - PADDING) / (RECTANGLE_SIZE + PADDING);

            int curX = PADDING;
            // Do the layout
            for (int i = 0; i < num; ++i) {
                Rectangle rec = new Rectangle(RECTANGLE_SIZE, RECTANGLE_SIZE, Color.LIGHTGREEN);
                getChildren().add(rec);
                rec.relocate(curX, PADDING);
                curX += RECTANGLE_SIZE + PADDING;
            }

        }
    }

今度はもっと洗練されたバージョン、固定サイズではないボタンを持つ場合を見てみましょう。このサンプルのために、Buttonテキストを生成しています。後続の各ボタンのテキストは倍のサイズになっています。computePrefWidth/computePrefHeightの違いに注意してください。
private class GrowingPane2 extends Pane {

        private static final int PREF_NUMBER = 2;
        private static final String BASE_STRING = "A";
        private double prefWidth = -1;
        private double prefHeight = -1;
        private static final int PADDING = 10;

        @Override
        protected double computePrefWidth(double height) {
            if (prefWidth == -1) {
                computePrefSize();
            }
            return prefWidth;
        }

        private void computePrefSize() {
            String str = BASE_STRING;

            prefHeight = snapSpace(2 * PADDING + computeHeight());

            prefWidth = PADDING;
            for (int i = 0; i < PREF_NUMBER; ++i) {
                prefWidth += computeWidthForString(str) + PADDING;
                str += str;
            }
            prefWidth = snapSpace(prefWidth);

        }

        private double computeHeight() {
            Button b = new Button(BASE_STRING);
            getChildren().add(b);
            b.applyCss();
            double result = b.prefHeight(-1);
            getChildren().remove(b);
            return result;
        }

        private double computeWidthForString(String str) {
            Button b = new Button(str);
            getChildren().add(b);
            b.applyCss();
            double result = b.prefWidth(-1);
            getChildren().remove(b);
            return result;
        }

        @Override
        protected double computePrefHeight(double width) {
            if (prefHeight == -1) {
                computePrefSize();
            }
            return prefHeight;
        }


        @Override
        protected void layoutChildren() {
            final double w = getWidth();

            getChildren().clear();

            double widthLeft = w - PADDING;
            double curX = PADDING;
            String s = BASE_STRING;

            while(widthLeft >= PADDING) {
                double bw = computeWidthForString(s);
                if (bw + PADDING > widthLeft) {
                    break;
                }
                Button b = new Button(s);
                getChildren().add(b);
                b.applyCss();
                s += s;

                b.autosize();
                b.relocate(curX, PADDING);
                curX += bw + PADDING;
                widthLeft -= bw + PADDING;
            }

        }
    }

現実には、ボタンやその他諸々をアイテムリストや他のモデルを基にして生成し、このモデルの変化によって計算されたサイズを無効にしたいということがあるかと思います。

計算を見てみると、preferred sizeを計算する前に、子の追加や削除、 applyCss() を呼び出していたことにお気付きかもしれません。これは、Layout Passの後にCSS Passを実行するため、Layout Passで子を変更するためには、すべての新しいノードに対し、明示的にCSS Passを実行する必要があります。CSSは、コンテキスト(シーングラフにおける位置)に依存しますので、まず最初に子を追加する必要があります。もちろん、絶対的に正確であるために、子を正しい位置に追加し、計算終了時にリストをクリアする必要があります。

[Java] Java SE 8 Date and Time

原文はこちら。
http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html

Why do we need a new date and time library?

Java開発者の長年の悩みの種に、通常の開発者のdateとtimeのユースケースに対するサポートが不十分な点があります。
例えば(java.util.DateのとSimpleDateFormatterなどの)既存のクラスは、スレッドセーフではなく、ユーザーにとって同時実行の問題が発生し得ます。平均的な開発者が日付処理コードを記述する場合、この問題に対応できないでしょう。
日付と時間のクラスには、APIの設計が非常に貧弱なものがあります。例えば、 java.util.Dateの年(year)は、 1900年から始まりますが、月(month)は0から、そして日(days)は1から始まり、あまり直感的ではありません。こうした問題の結果、Joda-Timeのようなサードパーティの日付と時刻のライブラリの人気につながっています。
これらの問題に対処し、JDKのコアでよりよいサポートを提供するため、新しい日付と時間のAPIをJava SE 8で設計し、前述の問題を解消しています。
JSR 310の下、Joda-Timeの作者であるStephen ColebourneとOracleが共同でこのプロジェクトを主導しました。新しいJava SE 8のパッケージ java.time でご利用いただけます。

[訳注]
原文では月が1から、日が0からスタートとありますが、さすがにそれはどうよ、ということで修正して日本語にしています。

Core Ideas

この新しいAPIは3つの主要なアイデアから生まれています。
  • Immutable-value classes(不変値クラス)
    Javaの既存のフォーマッタの重大な弱点の一つとして、スレッドセーフでない点があります。これは、スレッドセーフな方法で利用したり、日付処理コードの日々の開発で並行性の問題を検討する必要があり、開発者にとって負担になります。新しいAPIでは、すべてのコアクラスは不変で、明確に定義された値を表すようにすることでこの問題を回避します。
  • Domain-driven design(ドメイン駆動設計)
    新しいAPIはDateTimeの様々なユースケースを詳細に表すクラスを使い、そのドメインを非常に正確にモデル化しており、その点で、以前の非常に劣っていたJavaライブラリとは異なっています。例えば、java.util.Dateはタイムラインのインスタンス(UNIXエポックからの経過時間(ミリ秒)のラッパー)を表しますが、toString()メソッドを呼び出すと、タイムゾーンを含んだ結果を返すため、開発者を混乱させてしまいます。
    ドメイン駆動設計を重視したことで、明快さと分かりやすさという長期的なメリットを提供していますが、以前のAPIからJava SE 8に移植する場合、アプリケーションの日付のドメインモデルの検討が必要になるかもしれません。
  • Separation of chronologies(年代・年号の分離)
    この新しいAPIを使うと、様々なカレンダーシステム(必ずしもISO-8601に従う必要はありません)を使い、世界のいろいろな地域、例えば、日本やタイの人々のニーズをサポートすることができます。標準的な年代だけ扱う必要のあるほとんどの開発者に追加の負担をかけずに、こうしたことが実現できます。

LocalDate and LocalTime

この新しいAPIを利用する際におそらく最初に遭遇するクラスは、LocalDateLocalTimeでしょう。これらは卓上カレンダーや壁掛け時計といったObserverのコンテキストから日付や時間を表すという意味で、ローカルです。また、LocalDateTimeという複合クラスもあります。これはLocalDateLocalTimeの組み合わせです。
タイムゾーンは様々なObserverのコンテキストを明確にしますが、これはここでは除外しています。つまり、コンテキストを必要としない場合にはこれらのローカルクラスを使うべきです。デスクトップJavaFXアプリケーションもそうしたローカルクラスを使う対象の一つでしょう。これらのクラスを使って一貫性のあるタイムゾーンをもつ分散システムで時間を表現することが可能です。

Creating Objects

新しいAPIのコアクラスはすべてファクトリメソッドによって構築されています。その構成フィールドを使って値を構築する場合は、ファクトリはofと呼ばれます。別の型から変換する際には、ファクトリはfromと呼ばれます。パラメータとして文字列を受け取る解析(parse)メソッドもあります(リスト1)。
リスト1
LocalDateTime timePoint = LocalDateTime.now();     // The current date and time
LocalDate.of(2012, Month.DECEMBER, 12); // from values
LocalDate.ofEpochDay(150);  // middle of 1970
LocalTime.of(17, 18); // the train I took home today
LocalTime.parse("10:15:30"); // From a String
標準的なJavaのgetter規則を使ってJava SE 8クラスから値を取得しています(リスト2)。
リスト2
LocalDate theDate = timePoint.toLocalDate();
Month month = timePoint.getMonth();
int day = timePoint.getDayOfMonth();
timePoint.getSecond();
オブジェクトの値を変更して計算を実行することもできます。すべてのコアクラスは新しいAPIで不変ゆえ、これらのメソッドはwithと呼ばれ新しいオブジェクトを返します。setterを使用する必要はありません(リスト3)。別のフィールドに基づいて計算するためのメソッドもあります。
リスト3
// Set the value, returning a new object
LocalDateTime thePast = timePoint.withDayOfMonth(10).withYear(2010);

/* You can use direct manipulation methods, 
    or pass a value and field pair */
LocalDateTime yetAnother = thePast.plusWeeks(3).plus(3, ChronoUnit.WEEKS);
新しいAPIには、アジャスター(adjuster)という概念も持ち合わせています。これは共通の処理ロジックをラップするためのコードブロックです。一つ以上のフィールドを設定するために利用するWithAdjusterを作成したり、フィールドを加算・減算するために利用するPlusAdjusterを作成したりすることができます。値クラスはadjusterとしても振る舞います。その場合、値クラスが表すフィールドの値を更新します。新しいAPIは組み込みadjusterを定義していますが、再利用したい特定のビジネスロジックを持っているならば、独自のadjusterを書くことができます(リスト4)。
リスト4
import static java.time.temporal.TemporalAdjusters.*;

LocalDateTime timePoint = ...
foo = timePoint.with(lastDayOfMonth());
bar = timePoint.with(previousOrSame(ChronoUnit.WEDNESDAY));

// Using value classes as adjusters
timePoint.with(LocalTime.now()); 

Truncation

新しいAPIは、日付、時刻、時刻と日付を表すための型を提供することで、さまざまな精度の時点をサポートしていますが、当然ながら、こうした型よりもきめ細かい、精度という概念があります。
truncatedToメソッドは、こうしたユースケースをサポートするために存在します。これを使うと、フィールドに合わせて値を切り捨てることができます(リスト5)。
リスト5
LocalTime truncatedTime = time.truncatedTo(ChronoUnit.SECONDS);

Time Zones

先ほど見てきたローカルクラスはタイムゾーンが導入した複雑性を取り除いています。タイムゾーンとは、標準時が同じ地域に対応する一連のルールセットであり、およそ40個あります。タイムゾーンは、協定世界時(UTC)からのオフセットによって定義されています。タイムゾーンはほぼ同期していますが、指定された差分だけ移動します。
タイムゾーンを2種類の識別子で参照することができます。例えば、省略した表記だと"PLT"、長い表記では"Asia/Karachi"といった感じです。アプリケーションを設計する際には、タイムゾーン利用においてどんなシナリオが適切か、どのオフセットが適切かを検討する必要があります。
  • ZoneIdは地域を表す識別子です(リスト6)。各ZoneIdが、その場所のタイムゾーンを定義するルールに対応しています。ソフトウェア設計時に"PLT"や “Asia/Karachi"の文字列の利用を検討している場合は、代わりにこのドメインクラスを使用する必要があります。ユースケースの例としては、ユーザーのタイムゾーンをユーザ・プリファレンスとして保存することになるでしょう。
    リスト6
    // You can specify the zone id when creating a zoned date time
    ZoneId id = ZoneId.of("Europe/Paris");
    ZonedDateTime zoned = ZonedDateTime.of(dateTime, id);
    assertEquals(id, ZoneId.from(zoned));
    
  • ZoneOffsetはグリニッジ/UTCとタイムゾーンの差を表現する期間です。特定の時点での特定のZoneIdに対し、ZoneOffsetを解決することができます(リスト7)。
    リスト7
    ZoneOffset offset = ZoneOffset.of("+2:00");
    

Time Zone Classes

  • ZonedDateTimeは完全就職されたタイムゾーンを伴う日付と時間です(リスト8)。これは任意の時点でのオフセットを解決することができます。経験則では、特定のサーバーのコンテキストに依存せずに日付や時間を表現したい場合には、ZonedDateTimeを使うべきです。
    リスト8
    ZonedDateTime.parse("2007-12-03T10:15:30+01:00[Europe/Paris]");
    
  • OffsetDateTimeは解決されたオフセットを伴う日付と時間です。これはデータをシリアル化してデータベースに入れる際に有用です。様々なタイムゾーンにサーバーがある場合、タイムスタンプをログ出力するためにシリアル化形式として利用するべきでしょう。
  • OffsetTimeは解決されたオフセットを伴う時間です(リスト9)。
    リスト9
    OffsetTime time = OffsetTime.now();
    // changes offset, while keeping the same point on the timeline
    OffsetTime sameTimeDifferentOffset = time.withOffsetSameInstant(offset);
    // changes the offset, and updates the point on the timeline
    OffsetTime changeTimeWithNewOffset = time.withOffsetSameLocal(offset);
    // Can also create new object with altered fields as before
    changeTimeWithNewOffset.withHour(3).plusSeconds(2);
    
Javaには既にタイムゾーンのクラス(java.util.TimeZone)がありますが、Java SE 8では利用しません。それは、すべてのJSR 310クラスは不変であり、タイムゾーンは変更可能であるからです。

Periods

Periodは、タイムライン上の距離である、「3ヶ月と1日」のような値を表します。これは、これまで見てきたタイムライン上の点である他のクラスとは対照的です(リスト10)。
リスト10
// 3 years, 2 months, 1 day
Period period = Period.of(3, 2, 1);

// You can modify the values of dates using periods
LocalDate newDate = oldDate.plus(period);
ZonedDateTime newDateTime = oldDateTime.minus(period);
// Components of a Period are represented by ChronoUnit values
assertEquals(1, period.get(ChronoUnit.DAYS));

Durations

Durationは、時間の観点で測定した、タイムライン上の距離であり、Periodと同様の目的を果たしますが、異なる精度を持ちます(リスト11)。
リスト11
// A duration of 3 seconds and 5 nanoseconds
Duration duration = Duration.ofSeconds(3, 5);
Duration oneDay = Duration.between(today, yesterday);
Durationインスタンス上で、通常のプラス、マイナスや、"with"オペレーションを実行することが可能ですし、また、Durationインスタンスを使い、日付や時間の値を変更することも可能です。

Chronologies

非ISOカレンダーシステムを使う開発者のニーズをサポートするため、Java SE 8ではChronologyという概念を導入します。これはカレンダーシステムを表現し、カレンダーシステム内の時点のためのファクトリとして振る舞います。また、コアの時点クラスに対応するインタフェースもありますが、以下のクラスがパラメータ化します。
Chronology:
ChronoLocalDate
ChronoLocalDateTime
ChronoZonedDateTime
これらのクラスは、ローカルカレンダーシステムを考慮する必要のある、高度に国際化されたアプリケーションを開発している開発者のためだけに存在しているので、こうした要件を考慮する必要のない開発者が使うべきではありません。いくつかのカレンダーシステムには、月や週の概念がないものがあり、まさに汎用的なフィールドのAPIを使って計算をする必要があります。

The Rest of the API

Java SE 8には他のよく使われるユースケースに対応するクラスもあります。MonthDayクラスはMonthDayの組み合わせを保持するため、誕生日を表すのに有用です。The YearMonth クラスはクレジットカードの開始日と失効日といったユースケースや、日を気にしない日付がらみのシナリオに対応します。
Java SE 8のJDBCはこれらの新しい型をサポートしますが、公式なJDBC APIの変更はありません。既存の汎用setObjectとgetObjectメソッドで十分でしょう。
これらの型はベンダー固有のデータベース型またはANSI SQL型にマッピングできます。ANSI SQL型とのマッピングは表1のようになります。
ANSI SQL Java SE 8
DATE LocalDate
TIME LocalTime
TIMESTAMP LocalDateTime
TIME WITH TIMEZONE OffsetTime
TIMESTAMP WITH TIMEZONE OffsetDateTime
表1

Conclusion

Java SE 8は、java.timeパッケージで新しい日付と時間のAPIを提供します。このAPIは開発者にとっての安全性と機能性がすばらしく向上しています。この新しいAPIはドメインをよくモデリングしており、幅広い開発者のユースケースをモデリングするためのクラスが豊富に揃っています。

Learn More

JSR 310: Date and Time API
http://jcp.org/en/jsr/detail?id=310

著者について
Ben Evans (@kittylyst) はjClarityのCEOであり、London Java Community (LJC)のまとめ役にして、Java SE/EE Executive Committeeのメンバーでもあります。
Richard Warburton は経験主義の技術者で、技術的課題を深掘りして解決していきます。直近では、jClarityで高性能コンピューティングのためのデータ分析に取り組んでいます。

[Database] Preview the Oracle Database In-Memory option

原文はこちら。
https://blogs.oracle.com/In-Memory/entry/sneak_peak_at_oracle_database

Oracle OpenWorld 2013でLarry Ellisonが、今後Oracle Database In-Memory Optionを投入することを発表しました。このOptionは、データベースを使ったビジネス上の意思決定をリアルタイムに実施できるようにするソリューションです。特定のワークロードやアプリケーションに制限した専門的なアプローチとは異なり、Oracleは新しいIn-Memory Column Store形式を使い分析の時間を短縮しています。
Oracle OpenWorld 2013
http://www.oracle.com/openworld/live/on-demand/index.htmlOracle Database In-Memory
http://medianetwork.oracle.com/video/player/2685494045001
しかし、これはどのように動作するのでしょうか?どれほどの性能改善が見込めるのでしょうか?どうやって有効にするのでしょうか?

これらの問いやその他お持ちの質問に対する回答として、Oracle Database In-Memort Test Drivesを開催します。インストラクター付きの一日のワークショップ(しかも無料!)の間に、この新しいOracle Database In-Memory Optionについて詳細な資料を用いて説明するだけでなく、Hands-onも実施いたします。このワークショップを活用して、この技術が非常に簡単に利用でき、信じられないほどのパフォーマンスの向上が得られることを体験できることでしょう。

来るOracle Database In-Memoryテストドライブイベントへの参加意思を登録するには、以下のリンクからどうぞ。
Oracle Product Development Beta Testing User Profile Form
https://pdpm.oracle.com/pls/apex/f?p=102:2:1153150937556:::::
みなさまにテストドライブでお会いできることを楽しみにしています。

[FMW] Ignite the Bookworm Inside: Fusion Middleware

原文はこちら。
https://blogs.oracle.com/fusionmiddleware/entry/ignite_the_bookworm_inside_fusion


Oracle Fusion Middlewareの知識や技術をブラッシュアップしたいけど、どこから始めたらいいのかわからない、なんて方はいらっしゃいませんか?そんな方はFusion Middlewareについて記載されているOracle Pressをチェックして下さい。Oracle Pressには、Javaからエンタープライズ・アーキテクチャ、展開戦略からデザインパターンに至るまで数多くのタイトルがそろっています。本だけでなく、Oracleの技術エキスパートによる動画をご覧いただくこともできます。是非チェックしてみてください。
Middleware: Java, Fusion Middleware, Oracle ADF, JDeveloper
http://community.oraclepressbooks.com/middleware.html

[Java] New NetBeans Book by Oracle Press

原文はこちら。
https://blogs.oracle.com/geertjan/entry/new_netbeans_book_by_oracle

デスクトップでもモバイルデバイスでも使えるビジネスWebアプリケーションの開発や展開に関する書籍です。Java EEとNetBeansのエキスパートが共同執筆した"Java EE and HTML5 Enterprise Application Development"で、先進的なresponsive designツールや戦略を説明しています。
NetBeans IDEの使い方、HTML5プログラムの作り方、JavaScript APIの使い方、CSSやWebSocketの連係、セキュリティへの対応方法をまとめています。
このOracle Pressの書籍では、SaaS、MVVM、そしてRESTfulな概念も実用の観点から説明しています。

[訳注]
Amazon.jp
ペーパーバック:
http://www.amazon.co.jp/Java-HTML5-Enterprise-Application-Development/dp/0071823093
Kindle:
http://www.amazon.co.jp/Java-HTML5-Enterprise-Application-Development-ebook/dp/B00HSO0YFW

[Java] Java ME Embedded 8 Early Access 2

原文はこちら。
https://blogs.oracle.com/java/entry/java_me_embedded_8_early

Java ME Embedded Early Access (EA) 2 は、2013年9月にリリースされた最初のJava ME Embedded 8 EAリリースのアップデートです。
ダウンロードやドキュメントなどは以下のリンクからどうぞ。
Oracle Java ME Embedded Downloads
http://www.oracle.com/technetwork/java/embedded/downloads/javame/index.html
Oracle Java ME Embedded and OJEC - Documentation
http://www.oracle.com/technetwork/java/embedded/resources/me-embeddocs/index.html
Oracle Java ME SDK Downloads (Oracle Java ME SDK 8 Early Access 2もダウンロードできます)
http://www.oracle.com/technetwork/java/javame/javamobile/download/sdk/index.html
このEA2はJSR 360、JSR 361に基づいたJava ME 8標準の実装で、以下の要素を含んでいます。
  • Java SE 8の言語機能やAPIに順じており、Java SE 8とJava ME 8の間で開発モデルが統一されました。そのため、より合理化された組み込みソフトウェアの開発が可能です 
  • 劇的にアップデートされたサービス対応(services-enabled)アプリケーションプラットフォームのおかげで、ソフトウェアの柔軟なモジュール開発や展開において、組み込みソフトウェアソリューションのリスクを削減し、市場投入までの時間を削減することができます。
  • カスタマイズや、対象とするデバイスでより幅広いユースケースに対応するための「適正なサイズ」への構成変更をサポートしており、192KB RAMや1MBのフラッシュ/ROMといった低スペックのデバイスから利用ができます。
  • JavaからGPIO、I2C、SPI、UARTなどを介して幅広いデバイスへアクセスし、ユースケース特有のハードウェアや周辺機器を簡単にクロスプラットフォームのサポートが可能です。
  • Oracle Java ME SDK 8 Early Access 2を使ったアプリケーション開発がサポートされています。
JSR 360: Connected Limited Device Configuration (CLDC) 8
https://jcp.org/en/jsr/detail?id=360
JSR 361: JavaTM ME Embedded Profile (MEEP)
https://jcp.org/en/jsr/detail?id=361

Key Features of the Oracle Java ME Embedded 8 EA 2 release:

  • JSR 360 (CLDC 8 および GCF 8) とJSR 361 (MEEP 8) のサポートを改善
  • Developer Agent、On-device Debugging、Memory Monitor、Network Monitor、CPU Profiler、Loggingといったツールのサポートを改善
  • ネットワークおよび接続性の改善(3GPP、CDMA、WiFiといった無線接続のサポートを含む)
  • Device Access APIを使った周辺機器へのアクセスを改善
  • RESTfulプログラミング (JSON, 非同期HTTP, OAuth) のための新しいAPI 
  • アップデートされたOracle Java ME SDK 8 EA #2では、新しいME 8の機能、プラットフォーム、周辺機器、ツールセット、NetBeans 8ベータ版との統合が改善されています
  • 以下のAPIは引き続きサポート
    • JSR 75 (File Connection)
    • JSR 120 (Wireless Messaging)
    • JSR 172 (Web Services)
    • JSR 177 (Security and Trust Services)
    • JSR 179 (Location)
    • JSR 280 (XML)
  • バグ修正、ユーザビリティ、パフォーマンス、フットプリントの改善

Supported Platforms

  • Brew MPとQualcomm IoE 6270Tの組み合わせを新たにサポート
  • Debian LinuxとRaspberry Pi Model Bの組み合わせのサポートを改善
  • Windows 7のサポートを改善 
このEarly Access 2は、まもなく登場するJava ME 8プラットフォームの可能性を調べ、評価したいと思っている開発者や関心のある団体を対象にしています。

[Java] JTA 1.2 - It's not your Grandfather's Transactions anymore!

原文はこちら。
https://blogs.oracle.com/theaquarium/entry/jta_1_2_it_s

Java EE 7に含まれているJava Transaction API 1.2はJSR 907 (*)としても知られており、これには、重要な2個の新機能(@Transactional @TransactionScoped)が追加されています。
JSR 907: JavaTM Transaction API (JTA)
https://www.jcp.org/en/jsr/detail?id=907
JTA 1.2以前では、トランザクションをEJBに委譲することで、開発者は低レベルのJTA/JTSトランザクション処理を避け、EJBコンテナに透過的に処理させていました。CMT(コンテナ管理のトランザクション、Container-managed transaction)を使うと、デフォルトの挙動では、EJBコンテナが呼び出しを捕捉し、必要なトランザクションの設定を挟むことができます。基本的にトランザクションを透過的に管理するため、CMTは非常に手軽というメリットがある一方、やはりEJBを使う必要がありました。
Container-managed transaction (Java EE 7 Tutorial)
http://docs.oracle.com/javaee/7/tutorial/doc/transactions003.htm#BNCIJ
新しい @Transactional アノテーションでは、基本的にEJBコンテナに依存せずManaged BeansのEJBトランザクション属性のセマンティクスを持ち込むことで、この課題を解決しています。そのため、この @Transactional アノテーションを使うと、Managed Beanのトランザクション境界を宣言的に管理することができます。内部的には、必要なトランザクションの設定(停止、再開、コミットなど)を処理するCDIインターセプタがこの機能を提供しています。一言で言うと、 @Transactional はEJBを使わずに、CMTの簡便性を様々なJava EEコンポーネント(Servlet、JAX-RSなど)にもたらします。

新しい @TransactionScoped アノテーションは、標準のCDIスコープを指定して、現在アクティブなJTAトランザクションをライフサイクルの有効範囲とするBeanインスタンスを定義することができます。このシンプルなエントリで実際の挙動を説明しています。
Java EE CDI TransactionScoped example (byres lounge)
http://www.byteslounge.com/tutorials/java-ee-cdi-transactionscoped-example
(*) 900番台のJSRを不思議に思う人がいるかもしれないので説明しておきますと、これらの仕様は、元々JCPではない場で作られたため、JCPの用語では"Grandfathered JSR"と呼ばれています。
Spec Lead Guide: Maintenance Review (MR)
https://www.jcp.org/en/resources/guide-maintenance

[Solaris] Getting Your Hands Dirty with Load Balancing

原文はこちら。
https://blogs.oracle.com/OTNGarage/entry/getting_your_hands_dirty_with


What Does the Integrated Load Balancer Do?

Oracle Solaris 11のドキュメントには、 Integrated Load Balancer (ILB) がクライアントからのリクエストを捕捉し、負荷分散のルールに基づいてリクエストをどのバックエンド・サーバーが処理するかを決定し、リクエストをサーバーに転送する、との記載があります。
Oracle Solaris 11.1 Information Library
Managing Oracle Solaris 11.1 Network Performance
Integrated Load Balancer (Overview)
http://docs.oracle.com/cd/E26502_01/html/E28993/gijjm.html
一個のサーバーの負荷を複数のサーバーに振り分けることで、ILBは信頼性を向上し、レスポンス時間を短縮し、サーバーの性能を向上させます。
このドキュメントでは機能やコンポーネント、動作方法、コマンドラインインターフェースを説明しており、この負荷分散ツールセットが何物であるかを理解するには役立つことでしょうが、もし実際に手を動かして試して見たい、ということでしたら、以下のHands-onをお勧めします。
Deploying the Oracle Solaris Integrated Load Balancer in 60 Minutes
(by Amir Javanshir)
http://www.oracle.com/technetwork/systems/hands-on-labs/hol-deploy-ilb-60mmin-2137812.html
ロードバランサと戯れるための環境をセットアップする手順を説明してくれている、クールなHands-onです。手順には以下の要素が含まれています。
  • Solarisのインストール
  • 仮想スイッチと仮想NIC(VNIC)のセットアップ
  • ロードバランサー用のZoneの構成(VNICへのアクセスを含む)
  • Zoneを3個のZoneに複製
  • 複製した各ZoneでApache Tomcatが動作するよう構成
  • 最初のZoneにロードバランサーをインストール
環境ができあがったら、Hands-onでいくつかの課題を実施し、ロードバランサーを使ってトラフィックを監視・管理する様々な方法に慣れていただくことができるでしょう。このHands-onはかなり面白いですよ。

More Hands-On Labs for Oracle Solaris 11

Oracle Solaris 11には他にもHands-onが用意されています。以下のリンクからアクセスしてください。
Hands-On Labs for Oracle Solaris
http://www.oracle.com/technetwork/systems/hands-on-labs/solaris-labs-1904205.html

[Linux] Unbreakable Enterprise Kernel Release 3 Quarterly Update 1 is now available

原文はこちら。
https://blogs.oracle.com/linux/entry/unbreakable_enterprise_kernel_release_31

Oracle Linux 6向けUnbreakable Enterprise Kernel Release 3 Quarterly Update 1 (UEK R3U1)がリリースされたことを発表できうれしく思っています。これはUEK R3 (Version 3.8.13-26) の最初の四半期アップデートリリースで、デバイスドライバーの更新や不具合やセキュリティ問題の集積パッチを含んでいます。
目玉の内容をご紹介しましょう。
  • Xenのブロック・フロントエンドおよびバックエンドのアーキテクチャ、ネットワーク・フロントエンドおよびバックエンドのアーキテクチャを改良しています
  • カーネルパラメーター crashkernel=auto をサポートし、Kdumpの設定をシンプルにできます
  • DTraceで用いるカーネルモジュールの静的プローブを有効にする新機能
  • 主要パートナーからのデバイスドライバーの更新(ストレージデバイス、ネットワークカードなど)
    • Broadcom
    • Cisco
    • Emulex
    • HP
    • Intel
    • LSI
    • Mellanox
    • Qlogic
詳細情報はリリースノートをご覧ください。
Oracle® Linux
Release Notes for Unbreakable Enterprise Kernel Release 3 Quarterly Update 1
http://oss.oracle.com/ol6/docs/RELEASE-NOTES-UEK3-QU1-en.html
ソースコードはgitリポジトリで公開しています。
linux-uek3-3.8 repository
https://oss.oracle.com/git/?p=linux-uek3-3.8.git;a=summary

[Database] 12c Pre-Built Developer VMs (for Oracle VM VirtualBox)

原文はこちら。
https://blogs.oracle.com/Bakers_Byte/entry/12c_pre_built_developer_vms

開発者向けのOracle Database 12c事前構成済み仮想マシン(Oracle VM VirtualBoxイメージ)がご利用戴けるようになっています。
Oracle VirtualBoxのサンプルダウンロードページがアップデートされ、Oracle Database 12cがご利用戴けるようになりました。詳しくは以下のリンクからどうぞ。Oracle Linux 6の基本管理イメージを含めて、他の仮想マシンもご利用戴けます。
Pre-Built Developer VMs (for Oracle VM VirtualBox)
http://www.oracle.com/technetwork/community/developer-vm/index.html

[訳注]
このエントリで言っている、Oracle Database 12cにアップデートされたVMというのは、上記スクリーンショットの赤枠で囲んだVMのことです。

[Cloud] Windows Azureで、WindowsベースのOracleソフトウェアイメージの一般提供を開始

2014年3月12日より、Windows Azure上で、WindowsベースのOracleソフトウェアイメージの一般提供が開始される、ということです。

これによると、
  1. OracleソフトウェアがプレインストールされたWindows Serverベースの仮想マシンを実行している場合は、サブスクリプション契約に従って2014年3月12日に料金が引き上げられ、新料金が適用される。
    • Windows Azure仮想マシンのイメージギャラリーで現在プレビューとして提供されている、Windows ServerイメージにプレインストールされたOracle製品ライセンス込みの仮想マシンを3月12日以後も利用し続ける場合は、サブスクリプション契約に従って新しい料金を支払う必要がある。
    • 課金されないようにするには、3月11日までにシャットダウンすること。
  2. 以下の場合は、2014年3月12日に料金が変更されることはない。いずれも、利用者の責任で、Oracle ライセンス ポリシーに従い仮想マシン上にインストールされたソフトウェアを利用する必要がある。
    • Windows Azure仮想マシンのイメージ ギャラリーから開始したOracle Linuxベースの仮想マシンを実行している場合で、この仮想マシンにプレインストールされたOracleソフトウェアのライセンス(への課金)
    • 仮想マシン上で、利用者が所有するOracleソフトウェアのコピーをインストールした場合(BYOLによる利用)
詳しくは上のスクリーンショットをクリックしたり、価格リスト(下記リンク)、日本マイクロソフトからの発表、Azureエバンジェリストさんたちブログなどをどうぞ。
仮想マシンの料金詳細(Oracleソフトウェア)
http://www.windowsazure.com/ja-jp/pricing/details/virtual-machines/#oracle-software

[Exa*, Virtualization] Now certified Virtualized Exalogic for SAP (with OVM support for SAP)

原文はこちら。
https://blogs.oracle.com/exadatapartnercommunity/entry/now_certified_virtualized_exalogic_for

[訳注]
既に以下のTweetでご紹介しましたが、エントリが出てきたので改めてご紹介します。
https://twitter.com/OraBlogs_jp/status/431613581084225536
Oracle Linux 5プラットフォームで利用可能な、SAP NetWeaver 7.xベースの全てのSAP製品が、Exalogicの仮想化環境でご利用戴けるようになっています。詳細は、SAP Note 1617188でご確認下さい。

[訳注]
SAP AGのSAP on OracleのTweetでも紹介されています。
https://twitter.com/SAPonOracle/status/431713967883681793
SCN (SAP Community Network) のSAP on Oracleのページは以下からどうぞ。
SAP on Oracle @ SCN (SAP Community Network)
http://scn.sap.com/community/oracle

[Database, Linux] Friday Spotlight: OCFS2 Best Practices Guide

原文はこちら。
https://blogs.oracle.com/linux/entry/friday_spotlight_ocfs2_best_practices

今週のスポットライトは、新しく出来たホワイトペーパー"OCFS2 Best Practices Guide"です。このホワイトペーパーでは、OracleのRobert ChaseがOracle LinuxでOCFS2を最大限に活用する方法を詳細に説明しています。

OCFS2 Best Practices Guideをご一読ください。
OCFS2 Best Practices Guide
http://www.oracle.com/us/technologies/linux/ocfs2-best-practices-2133130.pdf

[Java] InvokeDynamic and Java EE?

原文はこちら。
https://blogs.oracle.com/theaquarium/entry/invokedynamic_and_cdi

"Man cannot discover new oceans unless he has the courage to lose sight of the shore."
(André Gide)
JSR 292(Supporting Dynamically Typed Languages on the Java Platform/Javaプラットフォームにおける動的型言語のサポート)は、Javaプラットフォームでの動的な型言語の サポートをシンプルに、かつ改善する目的で、Java SE 7で導入されました。JSR 292はInvokeDynamicと呼ばれる新しいバイトコードを定義しています。これを使うと静的な型情報がなくてもメソッド呼び出しの実行が可能です。それゆえ、最初のバイトコードはJava言語のためではなく、明確に動的型言語のために設計されています。
JSR 292: Supporting Dynamically Typed Languages on the JavaTM Platform
https://www.jcp.org/en/jsr/detail?id=292
Project NashornはJava 8の新しいJavaScriptエンジンで、InvokeDynamicに依拠しています。実は、元々のNashornはただのInvokeDynamicのPoC(コンセプト検証)でした。PoCが成功したので、Nashornはそれ以後進化して高性能な100%ECMAScript準拠のエンジンに進化しました。
Project Nashorn
http://openjdk.java.net/projects/nashorn/
InvokeDynamicが元々動的型付き言語のために検討されていた、という事実にもかかわらず、結果としてこのバイトコードはJava言語自体にも有用であり得ることがわかりました。例えば、Java SE8のLambdaはその内部でInvokeDynamicを使用しています。
Translation of Lambda Expressions
http://cr.openjdk.java.net/%7Ebriangoetz/lambda/lambda-translation.html
CDIの共同スペックリードであるAntoine Sabot-Durandは現在、InvokeDynamicを使ってWeldプロキシを置き換える実験を指揮しています。
weld-invokedynamic
https://github.com/antoinesd/weld-invokedynamic 
現段階では最初のPoCですが、うまく動作しています。もし彼の努力が結実した場合、WeldはCDIの参照実装で様々なアプリケーションサーバー(JBoss AS、WildFly、GlassFish、WebLogicなど)で利用されているので、Lambdaのサポートのためだけでなく、Java EEアプリケーションサーバーの内部にInvokeDynamicを使っているかもしれません。そのときになってみないと分かりませんけどね。

[Database] Oracle Application Express (APEX) 5.0 Early Adopter 1

原文はこちら。
https://blogs.oracle.com/proactivesupportDevTools/entry/oracle_application_express_5_0

Oracle Application Express 5.0 Early Adopter 1が現在ご利用いただけるようになっています。
Application Express 5.0 Early Adopter 1
http://apexea.oracle.com
大きな機能強化点は。。
  • 新しい"Page Designer"
    開発者の生産性を大幅に向上させるために設計された全く新しいIDEを使い、Application Expressでページを開発したり、メンテナンスすることが非常に迅速にできるようになっています。
  • モデルダイアログ
    標準のページプロセスを利用できる機能を備えたモーダルページ(および非モーダル)ページを簡単に定義することができます
  • ナビゲーションリスト
    アプリケーション·ビルダーは、これまでナビゲーション・リストを使用してきましたが、今回も利用できます。
  • インタラクティブ・レポートの機能強化
    Early Adopter 1では、グループ・レポートを定義するのと同じように、エンドユーザーが実行時にピボット・レポートを定義できるようになっています。
  • 全く新しいカレンダー
    新しいカレンダーコンポーネントには月、週、日、アジェンダビューのサポートが組み込まれており、大幅にカスタマイズしやすくなっています。
  • 共有コンポーネントファイルのアップロード
    共有コンポーネントにするためにアップロードしたファイルをブラウザがキャッシュし、相対ファイルURLを使って参照することができます。
  • 練り直されたUI
    完全に練り直されたApplication Expressのユーザーインターフェイスはシンプルさと煩雑さを取り除くことに注力しています。
詳細情報や機能強化部分の動画、試使用のためのワークスペースリクエストは以下のリンクからどうぞ。
Application Express 5.0 Early Adopter 1
http://apexea.oracle.com

[Solaris, Virtualization] Solaris on Pluribus Networks' Server Switches

原文はこちら。
https://blogs.oracle.com/markusflierl/entry/solaris_on_pluribus_networks_switches

Software Defined Networking(SDN)の話がたくさんされてきましたが、現実には、エンタープライズのお客様は、まだ既存のソリューションを活用する方法の理解に苦労されています。特にスケーラビリティは大きな問題です。それはスループット性能の観点からだけでなく、物理的な多数のノード間でスケーラビリティの観点の両方で大きな問題です。
数ヶ月前にOracle OpenWorldのブログで述べたように、Solarisはこの分野で今年後半にはSoftware Defined Networking(SDN)の数多くの興味深い機能がSolarisに導入されるでしょう。2011年にさかのぼると、Solaris 11では、数多くの先進的なネットワーク仮想化機能をSolaris自身に導入しました。以下のことを実現するため、私たちのL2ネットワークを作り直しました(re-architecture)。
  1. vNICを使ってネットワークトラフィックを分離
  2. フローを使いネットワークトラフィックのリソースを制御
  3. 負荷分散、ルーティング、ファイアウォールのような仮想ネットワークサービス(Virtual Networking services)だけでなく、この仮想環境で起こっている全てのことに対するきめ細かい統計(dlstatやflowstat)を取得
これは全てオーバーヘッドがほとんどなく、完全にSolaris Zoneや(LDomsとしても知られる)OVM仮想化と統合されています。Solaris 11.2では、単一Solarisインスタンスの限界を打ち破ることを意味する分散仮想スイッチを導入する予定です。お客様は物理ノード間でこうした仮想ネットワークを作成することができます。

これに関連して、Pluribus Networksとしばらく協業してきました。そしてFreedomシリーズのServer-SwitchプラットフォームでのSolaris 11の動作検証が完了し、動作保証されました。ブラックボックスのネットワークデバイスを取り扱うのではなく、Solaris管理者がアクセスできるようになっています。ネットワークスイッチ上で仮想ネットワークサービスをすぐに再度プロビジョニングできます。Pluribus NetworksのNetvisorはSolaris 11上で動作し、これをつかうと、お客様はネットワークを流れる全てのフローの詳細を取得することができます。Solaris 11.2のリリースでは、OpenStackを使って、Solarisベースのクラウドのコンピューティングリソース、ネットワークリソース、ストレージリソースを管理することができるようになるでしょう。

詳細は以下のリンクをどうぞ。
Oracle and Pluribus Networks Collaborate on OpenStack Plug-Ins for Software Defined Networking Products (Press Release)
http://www.oracle.com/us/corporate/press/2132552
Pluribus Networks Integrates Netvisor Software and Freedom Server-Switch Platforms With Oracle Solaris (4-traders)
http://www.4-traders.com/news/Pluribus-Networks-Integrates-Netvisor-Software-and-Freedom-Server-Switch-Platforms-With-Oracle-Solar--17908385/

[Java] Java SE 8 and Java EE 7

原文はこちら。
https://blogs.oracle.com/theaquarium/entry/java_se_8_and_java

"Revolutions just spread blood. Evolution - this is something that changes in the long term." (Marjane Satrapi)
Java SE 8のリリースは来月(2014年3月)を予定しています。Java EEの観点からすれば、Java EE 7 Specificationでは、少なくともJava SE 7を必要とします。それゆえ明らかですが、Java SE 8をJava EE 7で使うことは何も問題ありません。
Java SE 8 Central
http://oracle.com/java8
JSR 342: JavaTM Platform, Enterprise Edition 7 (Java EE 7) Specification
https://www.jcp.org/en/jsr/detail?id=342
実は多くの人がアーリービルドのJava SE 8をGlassFishと一緒に日々利用していますが、何も問題が起きていません。
JDK 8 Project
https://jdk8.java.net/
Project Avatarは現在Java SE 8とGlassFish 4で動作しますが、ここでもJava 8の新機能の一つであるProject Nashorn(新しい軽量かつ高性能なJavaScriptエンジン)を使っています。
Project Avatar
https://avatar.java.net/
Project Nashorn
http://openjdk.java.net/projects/nashorn/
ラムダ式(Lambdas Expressions)の導入はJava 8のもう一つの重要な特徴です。
ラムダ式は基本的にクロージャ(Closure)のサポートをJava言語に追加したもので、これにより、他のメソッドに引数として関数を渡すことができるようになります。ラムダ式は(Genericsよりも重要でない場合は)Generics以来のJavaプラットフォームにおける最大の抜本的な変化の一つ、と見られています。ラムダ式により、考え方やコードの書き方が変わります(コードがよりすっきりします)。
Project Lambda
http://openjdk.java.net/projects/lambda/
Java EE開発者は、Java EE 7と互換性があるので、いまラムダ式の利用方法の学習を待つ必要はなく、今すぐ学ぶべきです。例えば、JDeveloperチームのGerard Davisonのエントリで、ラムダ式をWebSocket APIと一緒に使っているコードを紹介しています。
Lambda'ery WebSocket code (from UKTECH13 presentation)
http://kingsfleet.blogspot.ie/2013/12/lambdaery-websocket-code-from-uktech13.html
ラムダ式を使っていたり、Java SE 8の機能を現在Java EEで使っている場合には、是非お知らせ下さい。

[Mobile] New Enhancement Released for iOS7+Android Native Look & Feel and Xcode 5 Support

原文はこちら。
https://blogs.oracle.com/mobile/entry/new_enhancement_released_for_xcode5

最後のエントリを書いてからしばらく経ちました。筆者はしばしお休みをもらいつつ、製品開発チームはADF Mobile "Patch" (Patch 5)のリリースにいそしんでいました。このパッチはある重要な新機能を追加するとともに数多くの不具合修正を提供するものです。新しいこのパッチに関するリリースノートは以下のリンクからどうぞ。
Oracle JDeveloper and Application Development
Framework (ADF) 11g Release 2 (11.1.2.4.0)
Known Issues for JDeveloper and ADF 11g Release 2 (11.1.2.4.0)
http://www.oracle.com/technetwork/developer-tools/jdev/documentation/11-124-rn-1942343.html
ダウンロードは簡単です。[ヘルプ]>[更新の確認]>[Official Oracle Extension and Updates]で、ADF Mobileを選択するだけです。バージョン番号は 11.1.2.4.39.64.62. になっているはずです。
このリリースまでにOne offパッチを受領されたお客様は、当該One offパッチが自動的にこのパッチに含まれているわけではありませんので、このPatch 5に対応する新しいOne offパッチをOracle Supportの担当者に要求してください。
このエントリでは2個の具体的な機能強化点についてお伝えします。
  • 新しいiOS7およびAndroidのネイティブ・ルック&フィール(mobileAlta Skin)
  • Xcode 5のサポート

mobileAlta Skin for Native iOS 7 and Android Look and Feel

iOS7とともに、Appleは新しいルック&フィールを導入し、iOSユーザーインターフェースがクリーンで最新のルック&フィールになりました。ユーザー·インターフェースやアイコンの3次元効果やグラデーション効果の多くがなくなってシンプルでモダンな「スキン」に置き換わり、iOSデバイスのハードウェアを補完します。最新のADF Mobileのパッチでは、新しいmobileAltaスキンを導入しました。iOSデバイス上で実行すると、iOSのルック&フィールの標準的なルック&フィールに一層マッチします。
以下は旧スキン(mobileFusionFX)を使ったHRアプリケーションの例です。

こちらは、iPhone上で新しいスキンを使った場合です。


Androidに関しては、みなさんもお気づきかもしれませんが、ADF Mobileスキンのルック&フィールは、Androidのルック&フィールよりも常にiOSのそれに似ています。Androidでは、Android 4.xで初めてフォーマルなUI標準が導入され、現在も進化していますが、iOS UIから非常に特徴的なルック&フィールに進化しました。多くの方がこの問題をレポートくださいましたし、その内容を伺っています。Androidデバイスで描画すると、mobileAltaスキンはよりAndroidらしいルック&フィールにもなります。
こちらは新しいAndroidのネイティブなルック&フィールです。

How to Apply the New Look and Feel

新しいルック&フィールを使うためには、単にadfmf-config.xmlを編集し、以下のようにスキン名称を書き換えるだけでよいのです。
<skin-family>mobileFusionFX</skin-family>

<skin-family>mobileAlta</skin-family>
に変えるだけです。標準のADF MobileのCSSスタイルを上書きしたり、独自のCSSクラスを追加されている場合は、徹底的にアプリケーションをテストして、新しいスタイルがカスタマイズされたクラスに対応していることを確認してください。色、座標、アイコンの参照が変更されている可能性があるため、予想外の副作用がないことを確認するために徹底したUIテストが必要です。

Xcode 5 support

最新のパッチを使用する場合、ADF MobileアプリケーションのIOSバージョンをデプロイするためには、Xcode5を使用する必要があります。Xcode 5だけがサポートされています。これは2014年2月1日より有効になる、AppStoreにUpされたすべてのアプリはXcode5でコンパイルされ、iOS7に最適化されなければならない、というAppleの最新のガイドラインに準拠しています。
Make Your Apps Work Seamlessly with iOS 7 (News and Announcements for Apple Developers)
https://developer.apple.com/news/?id=12172013a
Xcode 5をダウンロードしてインストールすると、最新のXcodeへアップデートすることができます。その後、JDeveloperの[ツール]>[プリファレンス]>[ADF Mobile]で、Xcode 5の場所を設定する必要があります。
While JDeveloperとXcode 5の統合は変わっていませんが、Xcode 5自体に数多くの変更が加わっています。最も大きな変更はProvisioning Profilesや開発者アカウント(Developer Account)の管理方法のあたりです。以前のProvisioning ProfilesやDeveloper AccountはOrganizerユーティリティ(メニューより、Windows>Organizer)を使ってアクセスしたり管理したりしていましたが、現在ではXcode Preferencesダイアログボックスで管理されています。メニューより、Xcode>Preferenceで[Accounts]タブを選択すると、Apple Developer Account情報が表示されます。[View Details...]ボタンをクリックすると、割り当てられた証明書やProvisioning Profileのリストが表示されます。従って、Provisioning Profileを確認する必要がある場合は、このダイアログボックスにアクセスする必要があります。.mobileprovisionファイルをダブルクリックしてProvisioning Profileをインストールすることもできますが、この機能を使ってProvisioning Profileを確認する必要があります。

この新機能を使う方法の詳細は、Appleのドキュメントを参照してください。古い"Organizer"機能について言及しているブログエントリがいくつかありますが、今後こうしたエントリはアップデートされることでしょう。