[Java] JCache to Miss Java EE 7

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

JCache (JSR 107) がいくつかのデッドラインを逃したため、Java EE 7に間に合わない、という非常に残念なことをお伝えしなければなりません。多くの方に参加頂いたJava EE 7の調査でコミュニティがJCacheに対し強い支持を表明していたように、このことは多くの方々にとって残念であることは疑いありません。
Java EE 7 Survey Results!
https://blogs.oracle.com/reza/entry/java_ee_7_survey_results
しかし、Java EE 7およびJCache EGの両者の合意は、Java EE 7をもうこれ以上遅らせないことが最善だ、というものでした(ご存知の通り、Java EE 7にはJCache以外にも、WebSocket、JMS 2、JAX-RS 2、JSON-P、JavaBatchなどといった数多くのすばらしい機能が含まれています)。
JCacheはJava EE 7から離れて大きく前進し、Java EE 8のすばらしい候補機能となることが期待されています。また、Java EE 8の遙か前に最終化された仕様によるドロップインAPIとして、Java EE 7と共にJCacheと使うこともできるはずです。是非この件に関するJava EE 7 EGやJCache EGの議論をフォローし、コメントをフィードバックされることをお勧めします。
[javaee-spec users] [jsr342-experts] JSR 107
http://java.net/projects/javaee-spec/lists/users/archive/2013-01/message/42
JSR107 progress and Java EE7
https://groups.google.com/forum/?fromgroups=#%21topic/jsr107/-4Jwocokpmk

[OSB, Coherence] OSB Result Cache Invalidation from C++ Client

原文はこちら。
https://blogs.oracle.com/jaylee/entry/osb_result_cache_invalidation_from

[訳注]
この方法はサポートされていません。参考にされるのは結構ですが、あくまでも自己責任でお願いします。

最近お客様よりOSB結果キャッシュのデータを無効化したい、との問い合わせを受けました。データを無効かするキーを作成する方法はないので、取り得る最善の方策はフィルタを使うことです。コードスニペットを以下に記載します。
extern "C" void invalidate(char* key) {
    try {
        String::View vsCacheName = "/osb/service/ResultCache";
        NamedCache::Handle hCache = CacheFactory::getCache(vsCacheName);
        ValueExtractor::Handle hExtractor = KeyExtractor::create(ReflectionExtractor::create("getToken"));
        Filter::View vEqualsFilter = EqualsFilter::create(hExtractor, String::create(key));
        hCache->invokeAll(vEqualsFilter, ConditionalRemove::create(AlwaysFilter::getInstance(),true));
    }
        catch (const std::exception& e) {
        std::cerr << "error: " << e.what() << std::endl;
    }

}
ここで一つ問題があります。それは、ビジネスサービスのどの結果を無効化すべきかわからないということです。2個のビジネスサービスがたまたま同じトークンを持っている場合、これは両方のトークンを削除することになって望ましいことではありません。また、インデックスが所定の位置にないため、キャッシュサイズが巨大である場合、パフォーマンスの課題も考えられます。現在のところ、Keyのクラスを作成する方法はわかっていません。独力でやってみようとしましたが、どういうわけか、作成したものとOSBが生成したものが異なっていました。そのため、最後には自作のResultCacheロジックを作成し、この目的を達成したのです。

public class ResultCacheHelper {

    private static String CACHE_NAME = "dist-test";

    public static void put(String key, org.apache.xmlbeans.XmlObject value) throws IOException {
        NamedCache cache = CacheFactory.getCache(CACHE_NAME);
        cache.put(key, serialize(value));

        CacheFactory.log("Cache Key : " + key + " is put in Cache!:" + serialize(value).toString());
    }

    public static org.apache.xmlbeans.XmlObject get(String key) throws IOException, ClassNotFoundException, XmlException {

        XmlObject result;
        NamedCache cache = CacheFactory.getCache(CACHE_NAME);

        byte[] bytes = (byte[]) cache.get(key);

        if(bytes == null) {
            String xmlNull = "null";
            result = org.apache.xmlbeans.XmlObject.Factory.parse(xmlNull);
            CacheFactory.log("Cache Key : " + key + " is not found in Cache!");
        }
        else {
            result = (org.apache.xmlbeans.XmlObject)deserialize(bytes, Thread.currentThread().getContextClassLoader());
            CacheFactory.log("Cache Key : " + key + " is found in Cache!:"+result.toString());
        }

        return result;
    }


    protected static Object deserialize(byte[] bytes, final ClassLoader cl) throws IOException, ClassNotFoundException {

        ObjectInputStream ois = null;

        try {

            ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
            ois = new ObjectInputStream(bais) {

                protected Class resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
                    return Class.forName(desc.getName(), false, cl);
                }

            };

            return ois.readObject();
        }
        finally {
            if (ois != null) ois.close();
        }
    }


    protected static byte[] serialize(Object object) throws IOException {

        ObjectOutputStream oos = null;

        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            oos = new ObjectOutputStream(baos);
            oos.writeObject(object);
            return baos.toByteArray();
        }
        finally {
            if (oos != null) oos.close();
        }
    }
}


これで、キャッシュを無効化することができます。
String::View deleteKey = key;
String::View vsCacheName = "dist-test";
NamedCache::Handle hCache = CacheFactory::getCache(vsCacheName);
hCache->remove(deleteKey);
近い将来OSBのキャッシュ無効化機能が追加されると信じています。

[Hardware, Support] Sun System certifications now available in MOS

原文はこちら。
https://blogs.oracle.com/certify/entry/sun_system_certifications_now_available

何年もの間、Oracle Solarisで動作保証しサポート対象となっているハードウェアシステムに関する情報はHardware Compatibility Listに記載されてきました。
Oracle Solaris OS: Hardware Compatibility Lists
http://www.oracle.com/webfolder/technetwork/hcl/index.html
ようやく、MOS(My Oracle Support)ポータルにアクセスできるお客様であればMOSからOracleのSunのシステムに関する情報がご利用いただけるようになりました。この情報はOracleのCertification情報の中に取り込まれています。すべてのCertification情報が単一ソースにまとまったことで、お客様がサポート対象のハードウェアやソフトウェア構成の回答がずっと容易になることでしょう。

以下のスクリーンショットはOracle Solaris 11で動作保証されているハードウェアを、My Oracle Supportで検索しているところです。

My Oracle Supportでの検索結果の例です。

Oracleは引き続きHardware Compatibility ListにOracle製ハードウェア、他社製ハードウェアの情報を掲載していきます。

[Identity Management, Security] Globe Trotters Edition: Virgin Media brings WiFi to London Tube for Olympics 2012

原文はこちら。
https://blogs.oracle.com/OracleIDM/entry/virgin_media_delivers_wifi_on

(寄稿者)Ben Bulpett, aurionPro SENA

Virgin Mediaはイギリスで最初にブロードバンド、TV、モバイル、家庭電話サービスを統合した会社です。2012年のロンドンオリンピックにあたり、Virgin MediaはパートナーであるaurionPro SENAと共に、Oracle Identity Managementソリューションを使って無料のセキュアなWiFiサービスをロンドンの地下鉄で提供しました。そう、今日ロンドン地下鉄でセキュアなWiFiが使えるのは、ID管理を使っているからなのです!そして、ロンドンオリンピックの遺産として、Oracleのアーキテクチャが他のVirgin Mediaサービスが利用するプラットフォームになっています。是非以下の動画をご覧ください。

このエントリおよび近日開催するWebcastでは、Identity Management、具体定期にはOracle Virtual Directory(OVD)とOracle Entitlements Server(OES)を使い、Virgin Mediaがどうやってバックエンドのレガシーシステム(外だしするよう設計されていない)を使ってサービスを提供したのか、を分析します。.

この大規模な事業の課題はたくさんあります。プロジェクトの最初のスコープはロンドン地下鉄Zone1の72の駅を対象にしていました。ひと駅あたり2個以上のプラットフォームがあって、駅に数百人がいると仮定すれば、サービスは2分ごとに11万5000セッションをサポートする必要がありました。そしてもちろん、customer experienceが鍵でした。つまり、ユーザーにシームレスな体験を提供しながら、ピーク時でも、高可用性を担保する、ということです。

顧客情報を保持している現在のシステムやデータベース、ディレクトリはレガシーアーキテクチャ上にありすぎるほど存在していますが、これらはどれも外出しできるように設計されてはいませんでした。aurionPro SENAと共に、Virgin Mediaは、Oracle Virtual Directoryを使った抽象化レイヤを構成して、顧客データのビューを提供するキャリアクラスのディレクトリを構築し、Oracle Entitlements Serverと統合して、顧客が無料WiFiサービスを利用できるか否かを判断するルールベースの資格付与サービスを構築しています。

Virgin Mediaは、2012年ロンドンオリンピックまでに構築が必須だった、ロンドン地下鉄での無料WiFiサービス(Metro WIFI)を安全に提供することに成功しました。Virgin Mediaによれば、ロンドン地下鉄のWiFiは大成功を収め、70万人以上がすでに利用し、毎日数百万もの接続があります。

しかしながら、オリンピック後にサービス利用の拡大を目論んでいました。付加価値として、サービスをすべての顧客に追加するだけでなく、他のプロバイダにプロバイダの卸も追加しようとしていました。

Metro WiFiと同じようなEnd-to-Endの機能は既存のVirgin Mediaサービスにはありませんでしたので、スクラッチですべてのサービスを作るよりも、Virgin Mediaはすでに自社環境にあるコンポーネントを再利用したかったのです。この新しいサービスをVirgin Media BroadbandやVirgin Media Mobileの既存顧客に利用してもらおうと考えていたためですが、これらの既存コンポーネントが主としてバックエンドのユーザー認証や認可機能(RADIUS、Central LDAP、Virgin Mobileユーザーシステム)にありました。

しかし、こうしたシステム間をつないでVirgin Media WiFiサービスを利用できるようにする仕組みはまだなかったので、本当のところは、このソリューションは既存のコンポーネントを使って構成されており、それらの間を新たに関係づけて、極力新規コンポーネントを使わずに統合したソリューションを提供しています。

ソリューションは3個のOracleソフトウェアコンポーネントからなり、Oracle Hardwareプラットフォーム上で動作しています。

OESはOVDに統合され、認可コンテキストを標準LDAPの検索に提供しています。これを利用すると、OESが提供する認可ポリシーを集中管理機能を使いながら、Steel Belted Radiusは標準LDAPインターフェースを使って異なるユーザーリポジトリのユーザーを認証し、公衆WiFiサービスの利用可否を認可することができます。

このソリューションは、OESに対する認可処理要求の結果を含むLDAPリクエストに、数多くの仮想属性を追加するOVDが作用しています。その後、Steel Belted Radiusがこれらの仮想属性を取り出し、WiFiサービスへの接続を許可・否認することにより、認可を実行します。

ロンドン地下鉄WiFiサービスはVirgin Mediaブロードバンドおよび契約モバイルユーザーベース(Virgin MediaおよびVirgin Mobile)のすべてが利用できるようになるでしょう。

このソリューションに関する詳細を知りたい方は、まもなく実施されるVirgin MediaによるWebcastで情報を入手して下さい。この中で、Virgin Mediaのアーキテクトの一人であるPerry BantonがソリューションパートナーであるaurionPro SENAと共にソリューションの詳細を説明してくれるでしょう。
Virgin Media Takes Identity Management Underground
http://event.on24.com/r.htm?e=558738&s=1&k=C9A6E9B7B1FD0238CF2816D5F8510694
2013年3月28日(木)午前10時(PDT)、午後1時(EDT)
2013年3月29日(金)午前2時(JST)


執筆者について

Ben BulpettはイギリスのaurionPro SENAでAlliance and Enterprise Accounts Directorをつとめています。彼はaurionPro SENAとOracle  UK間の間を取り持っているだけでなく、数多くの重要な戦略的な顧客を担当する役割も担っています。

BenはaurionPro SENAに3年以上在籍し、Oracleとの関係発展に尽力し、Oracle UK and EMEA Partner of the Yearになるため、aurionPro SENAをリードしていました。彼はまた、Virgin MediaでMetro WiFiソリューションに向けOracle製品を配信するチームのリーダーでもありました。Benは25年以上のコンピュータ業界の経験との知識があります。aurionPro SENAに移る前は、営業職や管理職など(CAでのDirector Security Sales、NovellでのUK Sales Directorを含む)を歴任し、重要な企業顧客とMindjet UK Limitedのパートナーを担当していました。既婚で、6人の子供がいます。

[SOA] Your Next WebEx Meeting - Powered by Oracle SOA Suite Integration

原文はこちら。
https://blogs.oracle.com/SOA/entry/cisco_s_webex_an_integration

このエントリを読んでいるということは、毎月10億以上の議事録がある600万回以上のWebExミーティングの一つに参加していることでしょう。Ciscoは高トランザクションかつ複雑なインテグレーション要件を持つWebExを買収の上、どうやってシームレスに統合したのでしょうか。
CiscoのParas Jain(ITシニアマネージャ)のビデオを見てほしいのですが、その中で彼はOracle SOA Suiteを使ってWebExをCiscoに6ヶ月で統合し、7ヶ月でOracle SOA Suiteの損益分岐点を達成したこと、達成した主要な利得を説明していますので、是非お聴き下さい。
Oracle SOA Suite: A Showcase for Cisco’s Order Management
http://medianetwork.oracle.com/video/player/2109669122001
Parasは多くの他のお客様が仰有る共通テーマを述べていました。重要な差別化要因は、Oracle SOA Suiteの柔軟性である、と。統合を進める段階では、社内のレガシーアプリケーションについてではなく、将来のクラウドアプリケーションが必要とする機能が何かなんてわかりません。このOracle SOA Suiteの柔軟性のおかげで、未知の将来の要件に対応できるのです。また、バックエンドでOracle SOA Suiteによる統合により、CiscoがiPhoneやAndroid向けに展開しているモバイルEnablement計画についてもParasがコメントしていました。まもなく、Parasが"Customer Insight Webcast Series - Oracle SOA & BPM"で語ってくれることでしょう。配信をお待ち下さい。以下はParasが詳細を説明するスライドのチラ見せです。

[Java] Java EE 7 Maven Application (TOTD #197)

原文はこちら。
https://blogs.oracle.com/arungupta/entry/java_ee_7_maven_application

Java EE 7のAPIがmavenで公開されていること、ご存知でしたか?
完全な組み合わせは以下のwikiに記載があります。では、Java EE 7のmavenアプリケーションをどうやって作成するのでしょうか。
Java EE 7 Maven Coordinates
https://wikis.oracle.com/display/GlassFish/Java+EE+7+Maven+Coordinates
  1. 通常のJava EE 6 mavenアプリケーションを以下のように作成します。
    mvn -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=webapp-javaee6 -DarchetypeVersion=1.5 -DarchetypeRepository=http://repo.maven.apache.org/maven2 -DgroupId=org.glassfish -DartifactId=hello-javaee7 -Dversion=1.0-SNAPSHOT -Dpackage=org.glassfish.hellojavaee7 -Darchetype.interactive=false --batch-mode archetype:generate
    
  2. 生成されたpom.xmlで、以下の記述を...
    
         
         javax
         javaee-api
         
         6.0
         provided
         
        
    
    以下の記述に置き換えます。
    
          
         Java EE 7 
         https://maven.java.net/content/groups/promoted/ 
          
        
    
        
          
         javax 
         javaee-api 
         7.0-b72 
          
        
    
    [訳注]
    翻訳時、原文では、上の<artifactId>の値が、変更前がFull Profile、変更後がWeb Profileになっていましたが、Full Profileであれば、javaee-apiを使うので、記載を変更しています。
    注意頂きたいのは、GlassFish 4 promoted buildに対し、依存性の新しい<version>がある、ということです。これは将来のビルドで簡素化される可能性があります。
    アプリケーションで使うAPIがJava EE 7 Web ProfileのAPIに限定されている場合、<artifactId>の値をjavaee-web-apiに変更することができます。
これで、これまでGlassFishに統合されてきた全てのJava EE 7のAPIがアプリケーションで利用できるようになります。

特定のAPIのJarファイルを明示的にプロジェクトに直接インクルードすることも可能です。最新のAPIは以下の形式で利用頂けます。
一般医、URL中の"b72"を最新のpromoted build番号に置き換えて、最新のアーティファクトを入手することができます。最新のアーティファクトのための簡素化されたURLは現在作成中です。

次は…NetBeansでのMaven ArchetypeとMavenのサポートについて近日ご紹介します。

[Java, Security] Oracle Speaks up on Java Security

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

多くの方が強く認識されている通り、最近のJavaの脆弱性に関する、まさにメディア旋風が起こっています。ご存知のように、ブラウザでのJavaに関する脆弱性であってサーバーサイドのJavaやデスクトップでのJavaまたは組み込み用途のJavaに関するものではありません。この問題についてOracleが相対的に沈黙していることに対してもイライラされているのではないでしょうか。

おそらく、Oracleが今や公然と問題に対して声を上げ始めていることがいくらかの安心感をもたらすことでしょう。Oracle SecurityのリーダーであるMartin Smithと、OpenJDKからDoland Smithが、世界中のJava User Groupのリーダーとの電話会議に参加しました。会議の記録音声は以下のリンクから入手可能です。
JUG Leader Call (2013年1月24日)
http://java.net/projects/jugs/downloads/download/Jan24_JUGLeaderCall.mp3
この会議では、Javaセキュリティ、バンドルされているソフトウェアのインストーラー、オープン性、コミュニケーション、最近のマスコミ報道のジャーナリズムや技術面の品質を取り上げ、いくつかの会場でJavaコミュニティリーダーと双方向のフランクなディスカッションを実施しました。DonaldとMartinが会議中に語っていた通り、これがJavaセキュリティとコミュニケーションの最前線で実施されることの氷山の一角になる可能性があります。この重要な対話に参加し、是非コメントを下さい。
John Spraggeは「A passionate defence of Java's virtues」というエントリで、まさにこれらの問題に対し自らの意見を発表しています。GlassFishやJava EE、Javaのファンであれば、一読の価値があるかと思います。
A passionate defence of Java's virtues (Coding Java and XML with JAX-B)
http://javainxml.blogspot.com/2013/01/a-passionate-defence-of-javas-virtues.html