java

Java8のInvokeDynamic実装一新によるGroovyのindyモードの性能改善効果が凄すぎた件

本日、Java Day Tokyo 2014に来ています。 で、ついさっきのセッションで「JDK8ではInvokeDynamic(以下、indy)の実装を一新したのですごく速くなったよ」という話を聞いたので、Groovyのindyモードで試してみました。 Groovyは2.0(現在は2.3)でindy対応され…

標準バンドルのVisualVMのウィンドウが空っぽになってしまったらキャッシュを削除すべし

経緯的な 9月にTwitterにぼやいた件のその後。 7u40のretina対応のおかげでjvisualvmもくっきりきれいになってるなー— Yasuharu Nakano (@nobeans) 2013, 9月 12 と思って、7u25と比較したりしてたら、メインウィンドウに何も表示されなくなってしまった...—…

"Java SE 7 リリース記念 特別イベント"懇親会LTでのGParsのFork/Joinについての宿題の解答

最後が若干投げやりですが、やっとまとまりました。 はじめに 先週の7/7(木)に"Java SE 7 リリース記念 特別イベント"の懇親会でLTをしてきました。 JavaSE7 Launch Event: Java7xGroovy View more presentations from Yasuharu NAKANO "Java7のその機能Groo…

JavaOne2010 9/23 -- Writing Domain-Specific Languages (DSLs), Using Groovy

Groovyコミッタ、我らがPaul King*1のセッション。全面的にGroovyでお送りしております。 JavaOne最後のセッションなので、リアルタイムついったー実況、いわゆるtsudaりに挑戦してみました。 というわけで、ツイートを補足する感じでまとめてみます。 from …

JavaOne2010 9/22 -- Polyglot Programming in the Java Virtual Machine (JVM)

9/21の「Code Generation on the Java Virtual Machine: Writing Code That Writes Code」と同じく、Groovyベースのデスクトップ系GUIアプリケーションのフルスタックフレームワーク(長い)であるGriffonのPJリーダのAndres Almirayのセッション。Groovyの…

JavaOne2010 9/22 -- Project Lambda: To Multicore and Beyond

ついにJavaにもクロージャ導入か!?という、注目のProject Lambdaのセッションです。実際のところ、クロージャと言うより、匿名内部クラスよりは見やすい新たなラムダ式の記法ってだけなんですけども。とりあえずメンドイし、厳密な定義とかあまりよく知ら…

JavaOne2010 9/22 -- A Lean, RESTful Java Architecture for Building Rich HTML5 Web Applications

HTML5+RESTで今時のリッチなWebアプリを構築するテクニックかと思ったら、普通にSpringMVC 3.xのオレオレ語りセッションだった。 なんだかタイトルではよく分からないセッションが多いなぁ。こういうものなのか。 とはいえ、SpringMVCをあまり知らない自分に…

JavaOne2010 9/21 -- Speedy Scripting: Productivity and Performance

JavaFXの開発者で、KawaというJVM上のSchem実装の開発者でもあるPer Bothnerによる、高性能スクリプト言語を設計する際のポイントを説明するぜ!という超ニッチなセッションでした。言語設計者のためのセッションであり、スクリプトを速く書くためのノウハウ…

JavaOne2010 9/21 -- The Modular Java Platform and Project Jigsaw

Javaには膨大な数のライブラリがあり、我々開発者としてはそれらを使うことで既存の枯れた機能を簡単(?)に利用できてウハウハな訳ですが、ライブラリのJarファイルの管理はどうにも大変ですね。 Jar同士の依存性管理とか、手動でがんばるとありえないし。 と…

JavaOne2010 9/21 -- New Java Virtual Machine Tricks: Enhanced Hot Code Replace and Mixin Generation

RooのBen Alexと、Spring LoadedのAndyの二人で、前半と後半を担当したセッション。 前半のBen AlexのRooパートは、前日(9/20)のRooセッションのそのままダイジェスト。 うえぇぇという感じだけど、例のGoogle騒動で急遽追加されたセッションなのかなぁ。 ま…

JavaOne2010 9/21 -- Code Generation on the Java Virtual Machine: Writing Code That Writes Code

Groovyベースのデスクトップ系GUIアプリケーションのフルスタックフレームワーク(長い)であるGriffonのPJリーダのAndres Almirayのセッションです。ホントは、Canooの同僚であるHamlet D'arcyの担当セッションだったんですが、なにやらの事情でAndresが担…

JavaOne2010 9/20 -- Extreme Java Productivity: Enterprise Applications in Just Minutes

タイトルからはわかりづらいけど、要はSpring Rooのセッションです。 スピーカは、最近GDDにも出没したらしいBen Alex(ホント?)。 http://www.springsource.org/roo Java開発者向けの、使いやすく、拡張しやすい、テキストベースのRADツール。 RADとは【R…

JavaOne2010 9/20 -- What's New in Grails 1.3?

GrailsのPJリーダのGraeme Rocher*1によるGrails1.3の機能紹介。 正直なところ、JGGUGのワークショップでさんざん山本さんが発表されてるのでほとんど新しい情報はないですが、一応メモをとったので書いておきます。 "2006年ごろからサイトのトラフィックが…

JavaOne2010 9/20 -- Groovy: To Infinity and Beyond

GroovyのPJリーダのGuilliame Laforgeが体調不良でJavaOneに参加できなくなったため、急遽Grails開発メンバのJeff Brownが代役で登壇。 流れとしては↓のような感じ。 過去編:Groovy1.6以前の振り返り 現在編:Groovy1.7で追加された機能 未来編:Groovy1.8…

JavaOne2010 9/20 -- Java SE: The Road Ahead

JavaOneも先週終わってもう一週間経とうとしている今日この頃、今更感が超濃厚ですが、セッション内容をまとめざるを得ない事情が色々とあり、せっかく書くならということでここにも晒しておきます。変なところがあったら突っ込んで下さい。 *** Java SE …

システムプロパティでプロキシを指定する正しい方法とは?

※元々は1つのエントリだったのですが、Grapeの話とはあまり関係ない方向に進んだので、エントリを分離してみました。 -DproxySet=trueって必要? なんか色々ぐぐってみると、Javaでプロキシ指定する場合はproxySet=yes(or true)というプロパティも必要だ、…

100%ピュアJavaでeachやcollectを実現してみたら、ワリと普通だった...

はじめに 100%ピュアJavaでダックタイピングを実現してみたら、違う何かになっていた・・・ - 豆無日記 のダックタイピングに引き続き、rubyっぽい何かをJavaでやるとどうなるのかと妄想したシリーズ第2弾。今度は、eachやcollectで有名なイテレーション処理…

100%ピュアJavaでダックタイピングを実現してみたら、違う何かになっていた・・・

2013/9/29 追記 CodeReposがなくなってたのでgithubにアップしておきました。 https://github.com/nobeans/jduck 今回のポイント 100%ピュアJava 動的言語を裏で呼び出すとか、そんなことはしません。普通にJavaのみ。 デフォルトのライブラリのみ バイトコ…

メソッドジェネリクス構文と型推論によるキャストの限界

Hoge hoge = new Hoge(); hoge.hoge()Javaの型推論Utilsクラスのカラクリ 知らなかった....。使えるなコレ。でも、汚いなぁ。 戻り値型に依存した型推論を利用するCastUtilsを使ってたんだけど、mavenでコンパイルしたときだけ Test.java:8: 型パラメータ E …

JDKを5→6にしたらEclipseでDaoのテストだけエラーになった

事象 Caused by: java.lang.NoClassDefFoundError: Could not initialize class sun.text.normalizer.NormalizerImplといわれて、derbyの接続ができない。http://forums.java.net/jive/message.jspa?messageID=223834↑に書かれているようにもう一度JDK6、JRE…

xerces でutf-8なXMLの日本語コメントの解析に失敗してエラー

Eclipseではテストが通るのに、maven2で実行するとこんなエラーが出る。 org.xml.sax.SAXParseException: Invalid byte 3 of 3-byte UTF-8 sequence. とか、 java.io.UTFDataFormatException: invalid byte 3 of 3-byte UTF-8 sequence (0x3f) 原因は色々考…

3項演算子とジェネリクスの戻り値形依存タイプとの相性

組み合わせによってイヤンな場合があるようだ。 // (1) Set<String> hoges1 = Collections.emptySet(); //--> OK // (2) Set<String> hoges2 = (true) ? Collections.emptySet() : new HashSet<String>(); //-->NG:コンパイルエラー // (3) Set<String> hoges3; if (true) { hoges3 = Collect</string></string></string></string>…

Genericsで戻り値を代入する変数の型によるパラメタライズ

さっきひがさんのエントリをみてちょっと驚いた。 S2TigerにSingletonS2Containerを追加しました。キャスト無しでコンポーネントを取得できるようになります。 Hoge hoge = SingletonS2Container.getComponent(Hoge.class); Hoge hoge2 = SingletonS2Contain…

Annotationメモ

public @interface Hoge { String fromStaticMethod = String.valueOf(100); // staticメソッドを呼べる String fromStaticMethodValue(); //String fromStaticMethod() default String.valueOf(100); // 直接はNG } 訂正 デフォルト値を別の属性を使って条…

S2AOPでエンハンスされたクラスからアノテーションを取得できた

どうも。他力本願なnobeansです。 S2AOP でエンハンスされたクラスは元のクラスのサブクラスなので,invoke.getThis().getClass().getSuperclass().getAnnotations() で取れるはずです commentd by id:koichik ありがとうございます!早速試してみました。 L…

S2AOPでエンハンスされたクラスからアノテーションを取得したい

んですが、どうやったらいいんでしょうかね。使える材料は、MethodInvocationのインスタンスのみ。 LOG.debug(invoke.getMethod().getName()); LOG.debug(Arrays.asList(invoke.getMethod().getAnnotations()));とメソッドのアノテーションはふつうにとれま…

自宅環境もOK

ビンゴ。 C:\Documents and Settings\\.m2\repository\org\apache\maven\plugins の下にあったmaven-eclipse-pluginディレクトリを削除したら、mvn eclipse:eclipseが成功しました。 NWの接続がおかしいときに半端なファイルが残ったのが原因のようです。 エ…

会社環境でもいけた!

C:\Documents and Settings\\.m2 配下に以前試したときの古いjarが残っていたのが原因だったみたいです。 C:\Documents and Settings\\.m2 を削除してから実行したらSUCCESSFULになりました。 ふぅ。しかも、何の苦労もなく mvn eclipse:eclipse も通りまし…

mvn eclipse:eclipseでエラー

ネット上の情報見るとMaven2でも大して苦労ナシにeclipse:eclipseを使えているようなんですが、ウチの環境だとなぜか [ERROR] BUILD ERROR [INFO] ---------------------------------------------------------------------------- [INFO] The plugin 'org.ap…

Maven2+Eclipseの連携

φ(。_。)メモメモ。 【玄人】プロジェクト管理ツールApache Maven【2.0登場】より。 58 :デフォルトの名無しさん :2006/01/21(土) 14:02:33 >>55 じゃ、おれがチュートリアルの説明をしてやる。 まずEclipseのworkspaceディレクトリにコマンドラインで移動。 そこで m…

Windows環境でのローカルリポジトリ

デフォルトでは C:\Documents and Settings\\.m2 配下なのはいいんですが、HOME環境変数を設定しても変わってくれません。なんで?cygwinつかってるので、cygwin上での /home//.m2 にあたるディレクトリに変更したいんですけど。 しょうがないからシンボリッ…

できた!

単にリポジトリ側のNWの問題だったようです。さっきやってみたら、repo1の方も接続できて結構進みました。 まだ、↓でこけるんですけど、それでもだいぶローカルリポジトリにたまりました。 [INFO] --------------------------------------------------------…

リポジトリにつながらない?

ちょっとMaven2に手を出してみようかと思って、簡単なサンプルを動かそうとしたんですが、strutsのdependencies解決すらまともに動きません。 [INFO] ---------------------------------------------------------------------------- [ERROR] BUILD ERROR [I…

S2.3.2→S2.3.4アップデート

してみたところ、S2.3.2 + S2Struts1.2RC2で作っていたサンプルJPetstoreで org.seasar.framework.container.ComponentNotFoundRuntimeException: [ESSR0046]コンポーネント(mainPage)が見つかりません org.seasar.framework.container.impl.S2ContainerBeha…

ついにS2Buri公開!

ぶり2をSeasarファウンデーションにて公開します 富野由悠季の新作を待ち続けるブログ(仮) キタ━━━━(゚∀゚)━━━━ッ!!Seasar界隈で「ぶり」という謎のフローエンジンの存在を耳にしてから、ずっと待っていたのです。 非常にありがたいのです。 是非業務で使い倒…

DIな実装とそのクラス図

// 旧実装 public class Hoge { public void invokeFoo() { Foo foo = new Foo(); foo.executeFoo(); } } public class Foo { public void executeFoo() { ... } }というクラスは、DIconを使うことで↓こうなります。 // DI実装 public class Hoge { private …

Hotswapすげー

今までTomcatのreloadable="true"を使ってたけど、コンパイルするたびにセッション状態がクリアされたり、初期化処理が再度走ったりと結構たるかったのが、Hotswapを使うと待ち時間、なんとゼロ!! reloadable="false"+Seasar hotswap。すげー。

S2DaoでTimestamp型フィールドの時間情報が消える謎

timestampという名前のTimestamp型のフィールドをJavaBeansに用意して、insert時の時間情報をそのまま登録させようとしているのですが、insert後のselectで時間情報が00:00:00になってしまう事象が発生していることに気づきました。 で、調査してみたんです…

PdStrutsことPage-Driven Strutsの概要

長いのでとりあえず仮称でPdStrutsと書いてみます。ぐぐってもヒットしないので、一応ユニークみたいです。だいぶ固まったのでPdStrutsの概要をぼちぼちと書いてみます。 大変なのであまり細かいことは書かない方向で。 基本アーキテクチャ ページドリブンで…

パッケージ分け

完全にInterfaceとその実装クラスとが1対1で対応するような、たとえばlogic系パッケージだったら hoge.logic hoge.logic.impl みたいにimplパッケージと無印パッケージで分けて管理しやすいし、特に悩まないです。ですが、自作interface、その実装(〜Impl)、…

Page-Driven Struts 完成?

なんかとりあえず動くものができたっぽい。 セキュリティ的にはまだ穴がいっぱいなんだけど。 基本アーキテクチャは結構シンプルでいい感じ。

Page-Driven StrutsでのS2Strutsの利用

jpetstoreを改造しながらnobeans版Page-Driven Strutsの実装を探っているんですが、 ここ数日、CartPageでの注文量の更新処理でActionの実行前にNullPointerExceptionになってしまうエラーで悩んでいました。 java.lang.NullPointerException org.apache.str…

Page-Driven Struts 途中経過

OzStrutsにインスパイアされて作成中のOzJpetstore改ですが、かなり書き換わってます。 JSPの構成はほぼ一緒なのでUI的には変わらないのですが、何かしら手が入っているので実装面ではかなりの違いです。 Page-DrivenでStrutsを使うという思想は一緒なんです…

Seasar2.3リリース

おめでとうございます。 koichikさんのブログで気がついたんですが、RC2から結構変わったところがあるんですねぇ。今気になっているのはhotswap。何気に素敵です。 S2Containerインスタンス単位でhotswapに対応するかどうかを制御できるようになるともっとう…

OzStrutsとS2Struts (続き)

どうもうまい方法を見つけたみたいです。 いい感じにPojoなPageクラスに置き換わっていっています。メインの実装クラスは S2Struts用の置換コンポーネント×3 Page遷移に関するコンポーネント×3〜4 程度です。もちょっと整理できたら詳しく書いてみたいと思い…

OzStrutsとS2Struts

ここ最近、OsStrutsのサンプルのjpetstoreのS2 + S2Daoに置き換える作業をしてました。 なんとか無事に下位レイヤをS2に置き換えることができました。 時間がかかったのは、まとまった時間をとりづらい子持ち日曜プログラマの悲しさと、S2Dao/S2Unitに不慣れ…

S2UnitのExcelによる期待値表

DataSet expected = readXls("期待値.xls"); assertEquals(expected, reload(expect)); // (1)現在のDBの状態と期待値を比較 assertEquals(expected, RESULT_BEAN); // (2)取得したBeanのプロパティを期待値と比較 assertEquals(expected, RESULT_BEAN_LIST)…

S2DaoのTIPS

引き続きメモ。 Pure Interface戦略 S2Daoのための定数アノテーションなどをinterfaceに書くと、クライアントクラスから見て不要なはずの定数にアクセスできたり、ちょっと気持ち悪いところもあります。 S2Daoではなく別のO/Rマッパーを使ったり、JDBCで実装…

S2DaoのTIPS

自分用メモ。 戻り値がbooleanのメソッドの振る舞い public boolean hasRecord();のように戻り値がbooleanのメソッドは、SQLの実行結果が0ならfalse、0以外はtrueとなるようです。 SQLをcount(*)で書けばレコードが存在するかどうかのチェックを簡単に実現で…

S2Daoに任せるメソッドと実装メソッドの共存

interface HogeDao { Hoge findByFooId(String fooId); Hoge findByBarId(String barId); }のようなインタフェースに対して、findByFooId()はS2Daoに任せたいがfindByBarId()は実装を書きたいという場合、どうするのがいいんでしょうか。 class HogeDaoImpl …