2013年6月25日火曜日

GlassFish 4.0

いつの間にかリリースされてた。
https://glassfish.java.net/download.html

2013年6月24日月曜日

WildFly 8.0.0.Alpha2

リリースされてますね~
http://www.wildfly.org/download/
https://github.com/wildfly/wildfly/tree/8.0.0.Alpha2

あー、なんか Alpha1 で作ってたプロジェクトはそのままじゃ動かんな~w

2013年6月13日木曜日

OpenShift!

正式発表された、OpenShift にスモールサイズのインスタンスを作ってみたよ!
URL こういうの意外と取れるのねw

http://hoge-fuga.rhcloud.com/

さて・・・・置くモノが無いなw

2013年6月4日火曜日

Java EE 7 is Final!

気づくのが遅くなってしまいましたが、EE 7 spec が Final Release になっていました。
http://jcp.org/en/jsr/detail?id=342


あとは、個人的に気にしている spec を列挙しときます。(自分用のメモ)

WebSocket(JSR356)
http://www.jcp.org/en/jsr/detail?id=356

EJB 3.2(JSR345)
http://jcp.org/en/jsr/detail?id=345

JMS 2.0(JSR343)
http://jcp.org/en/jsr/detail?id=343

JAX-RS 2.0(JSR339)
http://jcp.org/en/jsr/detail?id=339

2013年5月18日土曜日

WildFly 8.0.0.Alpha1 をビルド

WildFly 8.0.0.Alpha1 のタグ付けがされたようなので、早速ビルドしてみたよ!

$ cd /path/to
$ git clone https://github.com/wildfly/wildfly.git
$ cd wildfly
$ git tag
7.0.0.Alpha1
7.0.0.Alpha1-final
7.0.0.Beta1
7.0.0.Beta1-prerelease
7.0.0.Beta2
7.0.0.Beta2-prerelease
7.0.0.Beta3
7.0.0.CR1
7.0.0.Final
7.0.0.Final-prerelease
7.0.0.Final-prerelease2
7.0.0.Final-prerelease3
7.0.1.Final
7.0.2.Final
7.0.2.Final-prerelease
7.0.2.SP1-prerelease
7.1.0.Alpha1
7.1.0.Beta1
7.1.0.Beta1b
7.1.0.Beta1b-prerelease
7.1.0.CR1
7.1.0.CR1b
7.1.0.Final
7.1.0.Final-prerelease
7.1.0.Final-prerelease2
7.1.1.Final
7.1.2-prerelease
7.1.2.Final
7.1.3.Beta1
7.1.3.CR1
7.1.3.Final
7.2.0.Final
7.2.0.Final-prerelease1
7.2.0.Final-testsuite-fix
8.0.0.Alpha1

$ git checkout -b new 8.0.0.Alpha1
$ JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386 ./build.sh -DskipTests

ビルドが終わったら、以下のようにしてインストール先にバイナリを移動します。

$ mv build/target/wildfly-8.0.0.Alpha1/ /usr/local/jboss/

で、起動

$ cd /usr/local/jboss/wildfly-8.0.0.Alpha1
$  JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386 ./standalone.sh

 以下が表示されれば起動完了!

15:40:49,486 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly 8.0.0.Alpha1 "WildFly" started in 5917ms - Started 154 of 191 services (57 services are lazy, passive or on-demand)
 

2013年5月9日木曜日

WildFly

とりあえず初めての起動。





2013年4月30日火曜日

Java EE 7 リリーススケジュール

5/13 予定のリリーススケジュールの詳細。
https://java.net/projects/javaee-spec/pages/Home#Java_EE_7_Schedule
http://den2sn.hatenablog.com/entry/2013/04/25/075201

予定だと、もう JSR356 は spec release されてもおかしくないんだけど、遅れているのかな?

2013年4月11日木曜日

Atmosphere-jsr356

Atomosphere の JSR356 対応版の github を発見。
https://github.com/Atmosphere/atmosphere-jsr356

今のところ、クラスが2つ入っているだけのラッパーみたいだけど、JBoss でも JSR356 できそうな?

GlassFish4 WebSocket

はい。

WebSocket を JSR356 で実装したいので、しばらくおとなしく GlassFish4 でも使うことにします。

参考ページ乗せますが、既に spec 自体が変わっていてそのままは使えません。
素直に最新 spec 読むのが一番ですw
http://jcp.org/en/jsr/detail?id=356
http://d.hatena.ne.jp/m-prog/20121027/1351324887
https://blogs.oracle.com/arungupta/entry/websocket_applications_using_java_jsr
http://yoshio3.com/2012/11/12/websocket-twitter-timeline-sample/

早く、JBoss でも JSR356 が取り込まれることを期待しますw

2013年4月4日木曜日

JBDS6.0.1

入れてみたけど、AS 7.2 対応はまだみたい。


2013年3月26日火曜日

JBoss7 on WebSocket

おお。これはやってみなきゃだ
http://d.hatena.ne.jp/kagamihoge/20130311/1362996667

JBoss で、Jetty レベルの WebSocket サポートが入るのはいつだろう・・・・

2013年3月8日金曜日

JBoss AS 7.2.0.Final ?

どうも、全国1億2千万人の閲覧者の方々こんにちわ(ぇ

久しぶりに、JBoss AS の github を観てたら、7.2.0.Final のタグ付けがあることに気づいた僕です。

https://github.com/jbossas/jboss-as/tree/7.2.0.Final

タグ付けされたのは分かりましたが、リリースされてるのか全くよく分かりません。
「Prepare 7.2.0.Final for pre-releases」

うーん。まぁとりあえずビルドして動かしてみました。

 13:23:40,728 INFO  [org.jboss.as] (MSC service thread 1-5) JBAS015950: JBoss AS 7.2.0.Final "Janus" stopped in 262ms
そうですか。うーんw

JBDS6 は AS 7.1 までにしか対応してないので、7.1 のコネクタで登録しようと思いましたが、

The home directory does not exist or is missing a required file or folder: modules\org\jboss\as\server\main
そうですかw
確かに無いですね。ディレクトリ構造変わってます。

あぁ、これですね。
https://community.jboss.org/thread/221076

SymLink 貼れと。そうですか。Windows の人はごっそりコピーしろと。やれやれだ。 

2013年2月20日水曜日

@Enumerated

JPA に @Enumerated というアノテーションがあるのですが、今日はこの子にがっかりさせられました。

    @Enumerated(EnumType.ORDINAL)
    private HogeEnum hoge = HogeEnum.OFF;

とかするわけなんですが、これだとこちらにあるとおり、列挙型を定義した順に、0,1,2 の順の値しか持てないんですね。(当たり前といえば当たり前なのかもしれないけど・・・・)
http://tomee.apache.org/examples-trunk/jpa-enumerated/

仕方ないので、EnumType.STRING としとくと、上記の例だと「OFF」という文字列が入ります。列挙型に定義する順序は重要だと思うので、こちらのほうがいくらかマシですね・・・・

2013年1月29日火曜日

JPA2 Metamodel

JPA2 には、TypeSafe の施策として Metamodel という概念があるようです。
以下のサイトのように、「エンティティ名」+「_.」 +「カラム名」みたな感じで使うことになるようです。
http://www.ibm.com/developerworks/java/library/j-typesafejpa/

具体的な Metamodel の記述方法は以下のサイトが参考になりますね。
http://d.hatena.ne.jp/hayassh/20091027/1256656564

さらに、Hibernate JPA 2 Metamodel Generator というがあるようです。
http://docs.jboss.org/hibernate/jpamodelgen/1.0/reference/en-US/html_single/

本音を言えば、JPA2 が変更時の同期も含め、自動的に作ってくれるのがうれしいですが、少なくとも TypeSafe できますよ。というお話でした。

2013年1月28日月曜日

JPA Criteria API by samples

JPA Criteria と通常の JPQL の対比サンプル。並べてもらえるとわかりやすいですね。

JPA Criteria API by samples — Part-I | by altuure | altuure | Medium
JPA Criteria API by samples — Part-II | by altuure | altuure | Medium

※2022/4/4 リンク切れのため修正

2013年1月23日水曜日

EJB 3.1 の定期処理

AS 7.1 で、Quartz 使おうとしたら、ないのね・・・・。

と言うわけで、定期処理には、@Schedule を使うみたいです。
http://www.kevinhooke.com/2012/11/19/ee6-schedule-timer-service-on-jboss-as-7-1/
http://docs.oracle.com/javaee/6/tutorial/doc/bnboy.html

2013年1月15日火曜日

Forge で scaffold from-entity で生成した JSF/Bean

Forge で、scaffold from-entity すると、エンティティがシーケンス採番されてることが前提となった作りの JSF と、Bean が生成される。

これは困る・・・・そんなわけで。

◇エンティティの @Id 列の型が String の場合の対処法
  1. JSF には、@Id 列がごっそり抜けてるので、地道に @Id 列を追加。
  2. Bean では、@Id 列が Long であることを前提とされている!ので、こんなけ書き換え
    private String id;

    public String getId() {
        return this.id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public Employee findById(Object id) {
        return this.entityManager.find(Employee.class, id);
    }

2013年1月8日火曜日

Servlet3 で、SetCharacterEncodingFilter

あけおめことよろ。

ってことで、Servlet3 で、フォーム文字化け回避ってどうするの?
って思ったらすぐ見つかった。

SetCharacterEncodingFilter 使って tomcat の例の文字化けを回避したい
http://d.hatena.ne.jp/Yoshiori/20111102/1320242301

web.xml への設定は不要。

JBoss 7.1 & RESTEasy に適用したけど大丈夫でしたよ。当たり前か。

2012年12月19日水曜日

RESTEasy を使ったバリデーション(続編)

この前ご紹介した、RESTEasy の Bean Validator を使ってみようと思ったら、こんなエラーが。orz


22:36:21,356 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/rest].[jp.vyw.rest.sample.SampleApplication]] (http--127.0.0.1-8080-1) サーブレット jp.vyw.rest.sample.SampleApplication のServlet.service()が例外を投げました: org.jboss.resteasy.spi.UnhandledException: javax.validation.ConstraintDeclarationException: Only the root method of an overridden method in an inheritance hierarchy may be annotated with parameter constraints, but there are parameter constraints defined at all of the following overridden methods: [MethodMetaData [method=public abstract void jp.vyw.rest.sample.api.ISample.insert(java.lang.String,java.lang.String), parameterMetaData=[ParameterMetaData [type=class java.lang.String], [index=0], name=arg0], constraints=[NotNull, Size], isCascading=false], ParameterMetaData [type=class java.lang.String], [index=1], name=arg1], constraints=[], isCascading=false]], constraints=[], isCascading=false, hasParameterConstraints=true], MethodMetaData [method=public void jp.vyw.rest.sample.api.ISample$$$view33.insert(java.lang.String,java.lang.String), parameterMetaData=[ParameterMetaData [type=class java.lang.String], [index=0], name=arg0], constraints=[NotNull, Size], isCascading=false], ParameterMetaData [type=class java.lang.String], [index=1], name=arg1], constraints=[], isCascading=false]], constraints=[], isCascading=false, hasParameterConstraints=true]]
        at org.jboss.resteasy.core.SynchronousDispatcher.handleException(SynchronousDispatcher.java:245) [resteasy-jaxrs-2.3.2.Final.jar:]
        at org.jboss.resteasy.core.SynchronousDispatcher.handleInvokerException(SynchronousDispatcher.java:190) [resteasy-jaxrs-2.3.2.Final.jar:]
        at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:540) [resteasy-jaxrs-2.3.2.Final.jar:]
        at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:502) [resteasy-jaxrs-2.3.2.Final.jar:]
        at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:119) [resteasy-jaxrs-2.3.2.Final.jar:]
        at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208) [resteasy-jaxrs-2.3.2.Final.jar:]
        at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55) [resteasy-jaxrs-2.3.2.Final.jar:]
        at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50) [resteasy-jaxrs-2.3.2.Final.jar:]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
        at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
        at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
        at java.lang.Thread.run(Thread.java:679) [rt.jar:1.6.0_24]
Caused by: javax.validation.ConstraintDeclarationException: Only the root method of an overridden method in an inheritance hierarchy may be annotated with parameter constraints, but there are parameter constraints defined at all of the following overridden methods: [MethodMetaData [method=public abstract void jp.vyw.rest.sample.api.ISample.insert(java.lang.String,java.lang.String), parameterMetaData=[ParameterMetaData [type=class java.lang.String], [index=0], name=arg0], constraints=[NotNull, Size], isCascading=false], ParameterMetaData [type=class java.lang.String], [index=1], name=arg1], constraints=[], isCascading=false]], constraints=[], isCascading=false, hasParameterConstraints=true], MethodMetaData [method=public void jp.vyw.rest.sample.api.ISample$$$view33.insert(java.lang.String,java.lang.String), parameterMetaData=[ParameterMetaData [type=class java.lang.String], [index=0], name=arg0], constraints=[NotNull, Size], isCascading=false], ParameterMetaData [type=class java.lang.String], [index=1], name=arg1], constraints=[], isCascading=false]], constraints=[], isCascading=false, hasParameterConstraints=true]]
        at org.hibernate.validator.metadata.AggregatedMethodMetaData$Builder.checkParameterConstraints(AggregatedMethodMetaData.java:222) [hibernate-validator-4.2.0.Final.jar:4.2.0.Final]
        at org.hibernate.validator.metadata.AggregatedMethodMetaData$Builder.build(AggregatedMethodMetaData.java:161) [hibernate-validator-4.2.0.Final.jar:4.2.0.Final]
        at org.hibernate.validator.metadata.BeanMetaDataImpl.buildMethodMetaData(BeanMetaDataImpl.java:391) [hibernate-validator-4.2.0.Final.jar:4.2.0.Final]
        at org.hibernate.validator.metadata.BeanMetaDataImpl.<init>(BeanMetaDataImpl.java:286) [hibernate-validator-4.2.0.Final.jar:4.2.0.Final]
        at org.hibernate.validator.metadata.BeanMetaDataImpl.<init>(BeanMetaDataImpl.java:163) [hibernate-validator-4.2.0.Final.jar:4.2.0.Final]
        at org.hibernate.validator.engine.ValidatorImpl.getBeanMetaData(ValidatorImpl.java:1211) [hibernate-validator-4.2.0.Final.jar:4.2.0.Final]
        at org.hibernate.validator.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:302) [hibernate-validator-4.2.0.Final.jar:4.2.0.Final]
        at org.hibernate.validator.engine.ValidatorImpl.validate(ValidatorImpl.java:139) [hibernate-validator-4.2.0.Final.jar:4.2.0.Final]
        at org.jboss.resteasy.plugins.validation.hibernate.HibernateValidatorAdapter.applyValidation(HibernateValidatorAdapter.java:39) [resteasy-hibernatevalidator-provider-2.3.2.Final.jar:]
        at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:150) [resteasy-jaxrs-2.3.2.Final.jar:]
        at org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:257) [resteasy-jaxrs-2.3.2.Final.jar:]
        at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:222) [resteasy-jaxrs-2.3.2.Final.jar:]
        at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:211) [resteasy-jaxrs-2.3.2.Final.jar:]
        at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:525) [resteasy-jaxrs-2.3.2.Final.jar:]
        ... 20 more
いやーん・・・・・。

詳しくまとまってるサイトを見つけたですが、関連は不明だけど、こんなことが書いてある。
To provide translations to other languages, one must create a new ValidationMessages_XX.properties file with the translated messages, where XX is the code of the language being provided.

Unfortunately Hibernate Validator provider doesn’t supports I18N based on a specific HTTP request. It does not take Accept-Language HTTP header into account and always uses the default Locale as provided by Locale.getDefault(). To be able to change the Locale using the Accept-Language HTTP header, a custom implementation must be provided.

んー、もうちょっと頑張ってみる。