読者です 読者をやめる 読者になる 読者になる

MVC1.0で、jspが表示されず、かわりにファイルパスが表示される件

サマリ

OzarkはJerseyでしか動かないらしい。

せつめい

MVC規格はJAX-RS規格の上に構築されています。

そしてOzark(MVC1.0の実装)は、Jersey(JAX-RSの実装)でしか動かない。らしい(少なくとも、Wildflyに載ってるRESTEasyではダメでした)

そしてこの記事を読んで絶望した!

Ozark, the JavaEE MVC RI: users@ozark.java.net: Archive — Project Kenai

以下のdependenciesでOzarkを動かそうした。

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-web-api</artifactId>
    <version>7.0</version>
</dependency>
<dependency>
    <groupId>com.oracle.ozark</groupId>
    <artifactId>ozark</artifactId>
    <version>1.0.0-m01</version>
</dependency>

で、URLを叩いたら、ブラウザに以下の表示が!

hello.jsp

……コントローラが息をしていないの!

で、検索したら上記の記事がヒットしました。

Glassfishで試さないとですね。。。

CDI-UnitとMyBatis-CDIを組み合わせる

CDI-UnitとMyBatis-CDIを組み合わせてハマった点を記載します。

サマリ

テストクラスに以下のアノテーションを指定する必要がありました。

(前略)
import org.mybatis.cdi.Extension;
import org.mybatis.cdi.SqlSessionManagerRegistry;
import 自分のパッケージ.SqlSessionFactoryProducer;
(中略)
@RunWith(CdiRunner.class)
@AdditionalClasses(value={Extension.class,SqlSessionFactoryProducer.class,SqlSessionManagerRegistry.class}) //コレ!
public class HogeTest extends TestCase {
(後略)

状況

素のJavaプロジェクトに以下のdepedenciesを突っ込んで、CDIを使ったコードをCDI-Unitでテストしました。

(前略)
<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
</dependency>
<dependency>
    <groupId>org.jglue.cdi-unit</groupId>
    <artifactId>cdi-unit</artifactId>
    <version>3.1.3</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.1</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-cdi</artifactId>
    <version>1.0.0-beta3</version>
</dependency>
(後略)

せつめい

CDI-Unitは、CDIコンテナを内蔵したJUnitのランナーで、実装としてWeldを使用します。

(参考:CDI-Unit will automatically use the version of Weld that was available when it was released.

また(そりゃランナーの目的からして明らかですが)JavaEE6までのように、beans.xmlを配置しなくてもCDIコンテナ(つまりWeld)は有効になりました(というか、beans.xml はあってもなくても変わらないっぽかったです)。

しかし、MyBatis-CDIで利用されている以下の3つのクラスは自動では読み込まれないため、上記のアノテーションCDI-Unitに読み込ませる必要がありました。

  • Extension
    • MyBatis-CDIのExtensionです。CDI Beanではないですが、CDIコンテナから呼び出される種類のもの。MyBatis-CDIのセットアップをする感じのものですね。
  • SqlSessionManagerRegistry
    • MyBatis-CDIで提供されるCDI Bean。
  • SqlSessionFactoryProducer
    • MyBatis-CDIを使うために自分で実装する必要があるProducerさん。

他のCDI Bean(テスト対象のCDI Beanとか)はちゃんと認識されて、テストが通ります。

上記3つは環境設定的なアレなので、テストクラスから明示的にたどれないという共通点があるので、

もしかしたらCDI-Unitは、テストクラスで利用しているCDI Beanだけを読み込んでいるのかもデスネ。


なに? CDIっていうかJavaEEならそもそもMyBatisじゃないだろって? JPAはこう……その、分かって!

色々環境設定してました。

とりあえず、Backlog相当の環境はローカルのサーバに構築したので、いろいろ動かして遊んでいます。

JavaEEアプリケーションサーバと仲良くなりたいなーと思っているのでそのあたりの記事を書いていこうと思いますが、

その前にCDI-Unitでちょっとハマったので、先にそれを1件書いてから。

はてブロ、Markdown使えるじゃん!

なんかおかしいとは思ってはいた。。。 こう書けるべきですよね。。。

int main(int argc char **argv){
    printf("Hello, world.");
    return 1;
}

Apacheでhttp経由でSubversionを使いました

そんなわけで、せっかくだから俺は、httpでSubversionにアクセスできるようにしてみました(デスビスノス並感)

ApacheHausさんからApache Httpdのモジュールを落としてきて突っ込んで、httpd.confに

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn/>
    DAV svn
    SVNPath "C:/var/svnrepos"
</Location>

でできあがり。

http://cf-n9/svn/

でアクセスできます。

L&Lその1。TortoiseSVNはゴネたけど、リポジトリ直下にtrunk樹って上げたらアクセスできました。どうも、リポジトリ直下はダメらしい。

L&Lその2。Chocolateyで突っ込んだSubversionについていたApache Httpdのモジュールを使ったら、Cannot load mod_dav_svn.soとかで怒られました。たぶん、互換性のないバイナリだったのでしょう。Subversionが32bitだったのかな。適当なバイナリを持ってくるとこういう所でハマりますね。うーん、Chocolateyが裏目に出た感。

svnserveを動かしました。

課金はほんとうにミリマスだけで十分(震え)(挨拶)

継続は力なりというのでちょこちょこ継続してみます。

choco install svn

はしてたのですが、セットアップはちゃんとしていなかったので。


cd c:\var
mkdir svnrepos cd svnrepos
avnadmin create ./

ここから先は管理者権限で:

sc.exe create svnserve binpath= "C:\Program Files\Subversion\bin\svnserve.exe --service --root C:\svnrepos" displayname= "Subversion" depend= tcpip start= auto
sc.exe description svnserve "Subversion server (svnserve)"

で、再起動して、ローカルPCからTortoiseSVN

svn://cf-n9/

にアクセス。おっけーおっけーでした。サーバ側のファイアウォールのTCP3690番ポートの受信を解放しておくのを忘れずに。

こちらを参考にさせていただきました:kanonjiの日記

ほんとはApacheさんからhttpでやりたいのだけど、それはまた今度。

NetBIOSすごい、あととりあえずJenkins突っ込んでおく

5ヶ月放置!(挨拶)

ケーゾクなんてのは、いかにすぱっとやめて、いかに気楽に始められるかですよ(震え)

ちょこちょこ環境構築しているわけですが、今日はNetBIOSすげーと思ったのでめも。

僕の部屋のネットワーク環境は、もちろん無線LANDHCPなので、サーバ立てるっつってもどうするかなーと思っていたのですが。

よく考えたら、DynamicDNSなんて使わないでも、NetBIOS名(Windowsのコンピュータ名ですね)でOKじゃん、と。

そんなわけで、

choco install apache-httpd

して、httpd.confのServerRootだけ設定して(ここだけchocolateyさんやってくれないんだ)PCを再起動(こんでhttpdがあがる)。

http://さーばのNetBIOS名/

にローカルPCからアクセスして無事表示おっけー。ついでに

choco install jenkins

で、同様にローカルPCから

http://さーばのNetBIOS名:8080/

でJenkinsさんもセットアップしておく。

サーバ機は古いLet'sNoteなんですが、リモートデスクトップ接続ができるのだけ確認したら、あとは電源さえ確保できれば物置に放り込んでおいてもOK。サーバ用途だからって、家にデスクトップPCは置きたくないなあ。かといってAWSで課金額を気にするのもやなのです。課金はミリマスだけで十分(震え)