ラベル Eclipse の投稿を表示しています。 すべての投稿を表示
ラベル Eclipse の投稿を表示しています。 すべての投稿を表示

2013年1月3日木曜日

Eclipse で Clojure プラグインを使ってみる

まだ入門書をちょっと読んだばかりだけど、なんか実にいい感じで期待が持てるので、Eclipse で使う準備をしてみたい。


■ インストール

"Eclipse Marketplace" で Counterclockwise で検索するとヒットするので、そのままインストール。特に記すことはない。

( Counterclockwise というのは Leiningen のプラグインで、Leiningen というのは Clojure での maven のようなもの。)


■ プロジェクト作成

File メニューとかパッケージエクスプローラ上の右クリから、[ New ] -> [ Leiningen Project ]でプロジェクト生成のダイアログボックスを開いて、適当なプロジェクト名を指定して [ Finish ]。ここでは ex01 とした。

こんな感じでファイルができてくる。


■ ソース:core.clj

プロダクトコード側の自動生成ソース。
(ns ex01.core)

(defn -main
  "I don't do a whole lot."
  [& args]
  (println "Hello, World!"))

実行は、まず右クリから [ Run As ] → [ Clojure Application ] で REPLを開く。下段に (-main) と入力すると、こんな感じで評価結果が上段に表示される。
=> (-main)
Hello, World!
nil

■ ソース:core_test.clj

テストコード側の自動生成ソース。
(ns ex01.core-test
  (:use clojure.test
        ex01.core))

(deftest a-test
  (testing "FIXME, I fail."
    (is (= 0 1))))

core.clj と同様に右クリから REPL を開いての実行だけど (run-tests)でいける。
=> (run-tests)

Testing ex01.core-test

FAIL in (a-test) (core_test.clj:7)
FIXME, I fail.
expected: (= 0 1)
  actual: (not (= 0 1))

Ran 1 tests containing 1 assertions.
1 failures, 0 errors.
{:type :summary, :pass 0, :test 1, :error 0, :fail 1}

■ 雑感

  • 上矢印キー押して、入力履歴が出てこなかったので一瞬困惑したが、Ctrl と上下矢印の同時押しでヒストリが使える。
  • コマンドラインでプロジェクトのフォルダに入れば、lein 自体も普通に使える。ただし、lein run は事前に project.clj に":main ex01.core"みたいな感じで追記する必要がある。
  • やっぱ常時 Eclipse を使ってる人には、こういうのが楽ではないかと。
  • マスコットキャラのおじさんの顔が怖い。

2011年10月9日日曜日

Eclipse から XSLT 2.0 を使うやり方

今更だけど、Eclipse の XSL Developer Tool で XSLT2.0 を使うやり方が分かったのでメモっとく。
  • まず、Saxon home edition の新しいやつ (saxonhe9-3-0-8j.zip)をダウンロード。
  • ダウンロードしたZIPを適当なとこに展開して、中の saxon9he.jar を出しておく。
  • Eclipse のメニューを [Window]>[Preference]>[XML]>[XSL]>[Java Processors] ってたどる。
  • Add を押して開いたダイアログボックスで、だいたい以下の様な感じで入力。追加したやつのチェックボックスを選択しておく。
これで使えるようになる。 試しに、昔のポストで書いた XSLT で平均と分散を計算するやつを、XSLT2.0 を使ってやってみる。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes" />
  <xsl:template match="/list">
    <xsl:variable name="result">
      <xsl:call-template name="stat">
        <xsl:with-param name="items" select="item" />
        <xsl:with-param name="subtotal" select="0" />
        <xsl:with-param name="count" select="0" />
      </xsl:call-template>
    </xsl:variable>
    <average>
      <xsl:value-of select="$result/avg" />
    </average>
    <varianece>
      <xsl:value-of select="$result/sumOfD2 div $result/count" />
    </varianece>
  </xsl:template>
  <xsl:template name="stat">
    <xsl:param name="items"/>
    <xsl:param name="subtotal"/>
    <xsl:param name="count"/>
    <xsl:choose>
      <xsl:when test="$items">
        <xsl:variable name="t">
          <xsl:call-template name="stat">
            <xsl:with-param name="items" select="$items[position() > 1]" />
            <xsl:with-param name="subtotal" select="$subtotal + $items[1]" />
            <xsl:with-param name="count" select="$count + 1" />
          </xsl:call-template>
        </xsl:variable>
        <sumOfD2><xsl:value-of select="($items[1]-$t/avg)*($items[1]-$t/avg)+$t/sumOfD2"/></sumOfD2>
        <count><xsl:value-of select="$t/count"/></count>
        <avg><xsl:value-of select="$t/avg"/></avg>
      </xsl:when>
      <xsl:otherwise>
        <sumOfD2>0</sumOfD2>
        <count><xsl:value-of select="$count"/></count>
        <avg><xsl:value-of select="$subtotal div $count"/></avg>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
</xsl:stylesheet>

前回と同じ入力XMLから同じ結果が得られることが確認できた。

前にやった時は、結果ツリーフラグメントの制約から template の結果を文字列にして返さざるを得なくて煩わしかったけど、XSLT 2.0 の temporary tree では 普通の XML データとして扱えるので、やってる事をより直截に表現したコードになった。

2011年5月28日土曜日

FedoraCore12 + JBoss6.0 + Helios

久しぶりにJava案件をやることになりそうなので、自宅環境を準備。だいぶ前に FedoraCore12 を入れたマシンがあったので、これを使うことにする。

FedoraCoreメニューの「ソフトウェアの追加と削除」に Eclipseがあったのでインストールしてみたが、これは一世代前の Galileo だったので、アンインストールして Helios を入れ直すことにした。と言っても、Eclipse 本家サイトから java EE開発用のバイナリを落として、単に /usr/local/eclipse/下に展開しただけで、特に難しい作業は無し。

で、一応Webアプリという事で、アプリケーションサーバが必要になるが、とりあえず JBoss の6.0 を入れることにした。JBossサイトのインストールの説明に従ってしばし簡単な作業をしてから、run.sh で起動して正しくインストールされ起動する事を、ログとブラウザで確認。

次に Eclipse との連携を準備。Eclipse の Servers ビューで新規追加しようとしたら、Server Adapter が JBoss5.0 までしかなくて一瞬戸惑ったが、JBoss5.0 のアダプタでも問題なくJBoss6.0を動かせるという話があったので、とりあえず信用してJBoss5.0でサーバを追加。ところが、起動してみるとrun.sh からの起動では出ていなかった例外がスタックトレースされている。
20:56:53,101 ERROR [AbstractKernelController] Error installing to Instantiated: name=PostEjbJarMetadataDeployer state=Described: java.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String;
at org.jboss.metadata.annotation.creator.AbstractResourceProcessor.createResourceEnvRef(AbstractResourceProcessor.java:394) [:2.0.0.Alpha24]
at org.jboss.metadata.annotation.creator.AbstractResourceProcessor.process(AbstractResourceProcessor.java:237) [:2.0.0.Alpha24]
…略

ググってみると、同じ現象についてとあるサイトで議論されていた。これを参考にプラグインのjar(JBoss 6.0 対応の Server adapterらしい)をダウンロードして(ここから)eclipse/plugin下に展開。さっき作った JBossサーバを一旦削除してからEclipseを再起動し、再び Server ビューから新規作成を始めると、今度はJBoss6.0が選択肢に含まれている。これを指定して再作成。


おもむろにスタートボタンを押すと今度はエラー無しに起動する。念のため、適当に Dynamic Web Application を作成し、適当なtest.jsp を追加してデプロイ。ちゃんと表示される事を確認。

とりあえず、準備できた。

2010年4月27日火曜日

Swordfish の GettingStarted 試行

久しぶりに Eclipse のサイトを見てみると、Eclipse の新しい SOA Initiativeが発足したと言う、04/21 付けのアナウンスがあった。リンクをたどると、こんな Webinar を見つけたので早速やってみる。

以下のような内容
  • 00:00 part 1 Swordfish の概要と準備
  • 05:55  target platform の設定方法
  • 06:46 part 2 サンプル作成
  • 08:15  step 1 FlightReservation Provider
  • 13:53  step 2 PaymentProcessing Provider
  • 16:40  step 3 FlightBooking Provider
  • 24:25 part 3 Service Registry の使用
  • 29:10 結び

思い切り端折って言うと、OSGiベースで"分散ESB"を実現するための仕組みと、Eclipse によるサポート。Java 的には、DI に Spring、Webサービスには CXF を使っている。

SCA ではないけど、このチュートリアルでもコンポジットという考え方を採用している。既存の Webサービス(Provider)に対して、これを用いる Consumer を定義し、それらを部品とする上位のサービスをコンポジットとして定義するような方式。

ちなみに、この Getting Started も WSDL ファースト。昔は Javaコードを書いてから Webサービスで公開って流れのチュートリアルもあった気がするが、最近は見かけない。WSDL ライティングについても、チーム内で共有できそうなベストプラクティスとアンチパターンを見繕っておいた方が良さそう。

2010年1月17日日曜日

Java Project -> (Dynamic Web && Maven) Project

Eclipse で Java Project を作って、Dynamic Web Project かつ Maven Project にするやり方。

  • [New]/[Java Project]
    • Project Name: を適当に指定して [Next]
    • src をソースフォルダから削除
    • src/main/javaをソースフォルダに追加
    • Default output folder をプロジェクト名/target に変更して[Finish]
  • Navigator ビューを開いて、.project ファイルの<natures>にorg.eclipse.wst.common.project.facet.core.nature を追加
  • プロジェクトのプロパティを開く
    • Project Facets で Java と Dynamic Web Module にチェックし、適当な Server Runtime にチェックを入れる。
    • いったんプロパティを閉じる
  • フォルダ src/main/webapp/WEB-INFを作成
  • WebContent/WEB-INF/web.xml を src/main/webapp/WEB-INF 下にコピー
  • WebContent を削除
  • .settings/org.eclipse.wst.common.component ファイル中の /WebContent を /src/main/webapp に変更
  • プロジェクトのコンテキストメニューから[Maven]/[Enable Dependency Management]を選択し、groupId 以下を適当に入力
  • プロジェクト・プロパティの Java EE Module DependenciesでMaven Dependencies にチェック

以上。

★ ここまでやったら、先に進む前に webapp 直下に index.jsp を置いて確認しとくと無難。

2010年1月10日日曜日

TPTP/エラー IWAT0435E

Eclipse TPTP についての備忘録

今使っている Eclipse 環境で初めて TPTP を使ったら、、、
The launch requires at least one data collector to be selected.
IWAT0435E error occured connecting to the host
なんて事を言ってきた。

Package Explorer でクラスを選択し、コンテキストメニューから[Profile As]/[Java Application]でプロファイルを開始しようとすると、Profile Configuration ダイアログボックスが開くが、ここで上記のエラーメッセージが表示されてしまう。

なんだろうと思ってググってみると、「Agent Controller が要るらしい」とか「いや要らないはずだ」だとか、いろいろと意見が見つかる。

ただ Eclipse のヘルプを読むと、ローカルでのプロファイルなら他のプロダクトに依存しないとはっきり書いてあるので、調べなおすと TPTP 関連のプラグインが、インストールされていなかった。メニューに[Profile As]があるので、インストール済みだと思い込んでいた。間抜けだ・・・

以下のプラグインを入れると、ちゃんと TPTP が動き始めた。
  • TPTP Monitoring Tools
    TPTP Platform Project
  • TPTP Reporting with BIRT
  • TPTP Tracing and Profiling Tools Project


なかなか良い感じ。

2009年11月24日火曜日

BIRT 試用

BIRT (Business Intelligence and Reporting Tools) のチュートリアルをやってみた。

内容は、顧客データベースの一個のテーブルからレコードを取り出して、州と市でグループ化した帳票を作るというもの。プロジェクトの作成から、帳票の見栄えを整えて Eclipse 上のプレビューで確認して終わるところまで結構サクサク進む。

アプリケーション・サーバから動かすのはチュートリアルの範囲外だけど、ここに[URL] TomcatとJBoss 上で動かすやり方がのっていて、チュートリアルで作った帳票も問題なく表示できる。

海外サイトだと結構情報も多くて、割と実績があるような雰囲気。結構、使えるかも。

ただ、本当に試したかったことは、JCR 実装の Jackrabbit と BIRT を連携させてみる事だったんだけど、すぐに使えそうな情報が無かった。データソースとして JCR を使ってみたかったけど、やはりそれほどメジャーではないし、アウト・オブ・ザ・ボックスな選択肢としては用意されていない模様。

XML 文書 を Jackrabbit に格納して、JCR API 経由を経由して BIRT で表示したいんだけど、どうやらそう簡単に行きそうではない。あと、文書の作成もできたらうれしいけど、レポーティングツールというくらいだし、これは無理か。

2009年11月22日日曜日

!MESSAGE Product xxx.product could not be found.

以下、RCP アプリの Java Web Start 配布を実験していてハマった事と、そのオチ。
========
Eclipse RCP (Rich Client Platform)をブラウザのリンクから Java Web Start で配布できるようにしたくて、Hello RCP を JNLP 経由で起動しようと悪戦苦闘するものの、どうにもはかどらない。

具体的には、ブラウザで開いた HTML ファイルから JNLPファイル へのリンクを叩くと、Java Web Start がファイルをダウンロードして署名をチェックしたり、一通りの動作をして、さて起動するかと思ったら、何も起こらないという状況。

環境は、
・Eclipse 3.5 Galileo
・JDK 1.6.0_13

JNLP ファイルの書式・内容や、Plug-in/バンドルの構成を確認しても、どうしても問題が見当たらない。英文やかなり古い記事も含めたネット上の文章を見ても、全然、関係ありそうなものがない。

しばらく悩んで右往左往した後、JNLP の osgi.instance.area プロパティで指定したフォルダに、以下のようなエラーログが吐かれているのに気付く。
!SESSION 2009-11-22 19:31:18.265 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.5.0_15
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=ja_JP

!ENTRY org.eclipse.equinox.app 0 0 2009-11-22 19:31:19.203
!MESSAGE Product hellorcp.product could not be found.

!ENTRY org.eclipse.osgi 4 0 2009-11-22 19:31:19.234
!MESSAGE Application error
!STACK 1
java.lang.RuntimeException: No application id has been found.
at org.eclipse.equinox.internal.app.EclipseAppContainer.startDefaultApp(EclipseAppContainer.java:236)
…略
at com.sun.javaws.Launcher.run(Launcher.java:165)
at java.lang.Thread.run(Thread.java:595)

!ENTRY org.eclipse.osgi 2 0 2009-11-22 19:31:19.265
!MESSAGE The following is a complete list of bundles which are not resolved, see the prior log entry for the root cause if it exists:
!SUBENTRY 1 org.eclipse.osgi 2 0 2009-11-22 19:31:19.265
!MESSAGE Bundle hellorcp_1.0.0.200911221859 [68] was not resolved.
!SUBENTRY 2 hellorcp 2 0 2009-11-22 19:31:19.265
!MESSAGE Missing Constraint: Bundle-RequiredExecutionEnvironment: JavaSE-1.6

淡い期待を抱いて、エラーメッセージをいろいろ組み合わせてググって、更にいろんな記事を漁ってみるものの、やはり情報が得られず更に深く落胆する。

ふと思い立って、これまでよりじっくりとエラーログを見直して、「java.version=1.5.0_15」となっている事を、やっとの事で理解する。もう2・3年前からJDK 1.6を使っているはずなのに、なぜか Java 5 が動いている。ファイルの関連付けを確認すると、*.jnlp に JDK 1.5 の javaws.exe が関連付けられている。くっそ、これですかと・・・

Java 6 の javaws.exe が *.jnlp を開くように関連付けると、なんなく動いた。
まあ、3時間以上は悩んだな(笑

2009年10月30日金曜日

galileo/m2eclipse/WTP 連携

以下、m2eclipse と WTP を連携させるやり方。ちょっと手間がかかるのと、それほど自明な手順でもないので、以下メモしておく。

■ 環境と前提
  • Eclipse 3.5
  • Maven 2.2.1
  • m2eclipse が入っている事
  • WTP が入っている事
  • Server Runtime Environment でApache Tomcat v6.0が構成されている事

■ 作り方
◆ Dynamic Web Project の作成
  • 1ページ目
    • プロジェクト名を指定。
    • Target Runtime は 構成済みの Apache Tomcat v6.0。その他はデフォルトのまま。
  • 2ページ目
    • src を削除して以下を追加
      • src/main/java
      • src/main/resources
      • src/test/java
      • src/test/resources
    • Default output folder→target/classes
  • 3ページ目
    • Content directory を WebContent から /src/main/webapp に追加

◆ プロジェクト上のコンテキストメニューから[Maven]→[Enable Dependency Management]を実行。ダイアログが開くのでgroup id, artifact id, version 等を適当に入力。packaging はwar。

◆ プロジェクトのプロパティを設定
  • Java Build Path
    Source タブ で、ソースとアウトプットの関係が以下のようになっている事を確認。違っていたら調整する
    src/main/javatarget/classes
    src/main/resourcestarget/classes
    src/test/javatarget/test-classes
    src/test/resourcestarget/test-classes
  • Java EE Module Dependencies
      → Maven Dependencies にチェックを入れる

※Compiler level が低い的なエラーが表示されていたら、プロジェクトのプロパティで Java compiler level を上げる

■ 確認
  • webapp 直下に index.jsp を作成。<body/>内に以下の一行を追加。
  •   <%=com.google.inject.Guice.class.toString() %>
  • プロジェクトのコンテキストメニューから、[Maven]->[Add Dependency]で guice-2.0.jar を追加
  • プロジェクトのコンテキストメニューから[Debug As]->[Run on Server]で起動
  • Eclispe 上のブラウザに、"class com.google.inject.Guice"と表示されるのを確認。
  • [Run As]->[Maven package]で war を作成し、コマンドラインから、"jar tvf ファイル名"で中身を確認(特に WEB-INF/lib の下)