Archive for the ‘Java’ Category

Mac版EclipseでCtrl+Spaceが効かない件

Mac版EclipseでCtrl+Spaceキーが使えなかったので、解決方法をメモしときます。

  1. 「システム環境設定」を開く。
  2. 「キーボード」を選択
  3. 「キーボードショートカット」を選択
  4. 「Spotlight」を選択
  5. 「Spotlight検索フィールドを表示」のチェックを外す

spotlight

PHP on Google App Engine

appengine-java-php

1. Quercusライブラリダウンロード
http://quercus.caucho.com/ から Quercus 3.1.6をダウンロードする(Quercus 4.0.1は文字化けが発生するので、今回は3.1.6を使うようにする)
jar xf quercus-3.1.6.war
(quercus.jar, resin-util.jar, script-10.jar)

2. Jettyライブラリダウンロード
http://dist.codehaus.org/jetty/jetty-6.1.17/ から jetty-6.1.17.zip をダウンロード
(jetty-6.1.17.jar, jetty-util-6.1.17.jar)

3. ライブラリをlibフォルダに入れる
1と2で取得したjarファイルを war/WEB-INF/lib に入れる

4. 設定ファイル修正
4-1 appengine-web.xml

<static-files>
  <exclude path="/**.php" />
</static-files>
<resource-files>
  <include path="/**.php" />
</resource-files>

 
4-2 web.xml

<servlet>
  <servlet-name>Quercus Servlet</servlet-name>
  <servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class>
  <init-param>
    <param-name>script-encoding</param-name>
    <param-value>UTF-8</param-value>
  </init-param>
  <init-param>
    <param-name>ini-file</param-name>
    <param-value>WEB-INF/php.ini</param-value>
    </init-param>
</servlet>
<servlet-mapping>
  <servlet-name>Quercus Servlet</servlet-name>
  <url-pattern>*.php</url-pattern>
</servlet-mapping>

 
4-3 php.ini ファイル作成
war/WEB-INF の下に php.ini ファイルを新規作成

unicode.semantics=on
unicode.http_input_encoding=UTF-8
unicode.output_encoding=UTF-8
unicode.runtime_encoding=UTF-8

 
5. info.php
warの下にinfo.phpを作成

<?php
phpinfo();
?>

 
6. アクセスしてみる。
http://localhost:8080/info.php

Tomcat6 + jre6でのエラー解決法

エラー内容:

[info] Starting service...
[174  javajni.c] [error] 指定されたモジュールが見つかりません。
[994  prunsrv.c] [error] Failed creating java
               C:\Program Files\Java\jre6\bin\client\jvm.dll
[1269 prunsrv.c] [error] ServiceStart returned 1
[info] Run service finished.

 
解決法:

C:\Program Files\Java\jre6\bin\下の「msvcr71.dll」をC:\WINDOWS\system32にコピーする。

Struts2.0->Struts2.1変更点(一部)

struts2

1.Filter
Struts2.0

<filter>
  <filter-name>struts2</filter-name>
  <filter-class>
    org.apache.struts2.dispatcher.FilterDispatcher
  </filter-class>
</filter>

Struts2.1

<filter>
  <filter-name>struts2</filter-name>
  <filter-class>
    org.apache.struts2.dispatcher.ng.filter.
    StrutsPrepareAndExecuteFilter
  </filter-class>
</filter>

 
2.アノテーションクラス

@Namespace, @Resultなどのアノテーションクラスが、strtus2-core-2.0.x.jar から struts2-codebehind-plugin-2.1.x.jarに移されてる。よって、2.1でアノテーション使う場合は、libに struts2-codebehind-plugin-2.1.6.jar を入れる必要がある。

3.タグ
tabbedpanel、tree、datetimepicker などのタグがクラスが、 strtus2-core-2.0.x.jar から struts2-dojo-plugin-2.1.6.jar に移されてる。よって、2.1で上のようなタグを使う場合は、libに struts2-dojo-plugin-2.1.6.jar を入れる必要がある。

taglibの定義とサンプル

<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
<table width="300"><tr><td>
<sx:tabbedpanel id="tabpanel1">
 <sx:head/>
 <sx:div id="tab1" label="TAB1" theme="ajax">タブ1</sx:div>
 <sx:div id="tab2" label="TAB2" theme="ajax">タブ2</sx:div>
 <sx:div id="tab3" label="TAB3" theme="ajax">タブ3</sx:div>
</sx:tabbedpanel>
</td></tr></table>

Google App Engine for Java

001最近iPhoneアプリの開発に夢中になって、なかなか時間が取れなかったのですが、今日やっと時間がすこしあったので、前からやってみたかった app engine for java を試すことにしました。Pythonの時はSDKをダウンロードして、秀丸なり好きなエディターでコードを書いてましたが、今回はEclipseのプラグインという素晴らしい選択肢がありました。もちろんJava版のSDKも用意してますけど。

推奨されてるJavaバージョンは6ですが、5でも大丈夫みたいです。Javaはすでにイスントールしてあるので、Eclipseのプラグインを入れることにしました。使ってたEclipse3.3.1にプラグインを入れようとしましたが、「org.eclipse.wst.xml.core」が必須ですと怒られて、本体のUpdateを行いましたが、今度はEclipseの起動すらできませんでした。ショック!しょうがないんでEclipse3.4でチャレンジすることにしました。

まずは、こちらからEclipse3.4.2をダウンロード(http://www.eclipse.org/downloads/packages/

英語が得意ではないんで日本語化(http://mergedoc.sourceforge.jp/index.html#/pleiades.html

次はGoogle Plugin for Eclipseを入れる。(http://dl.google.com/eclipse/plugin/3.4)

完了すると、メニューに三つのアイコンが出てきます。(可愛い~)左からプロジェクト作成、コンパイル、デプロイです。新規でプロジェクトを作成するとテンプレートでAjaxを使ったサンプルコードが自動生成されます。試しにappspotにデプロイしたのがこちら(http://term.appspot.com/)。これだけだと寂しいんでGuestBookも入れようとしましたが、失敗しました。ローカルでは問題なく動きますが、appspotにデプロイするとServer Errorが発生します。
「java.lang.ClassCastException: com.google.appengine.api.users.UserServiceFailureException cannot be cast to javax.servlet.ServletException」
どうもこれが原因らしい。(http://groups.google.com/group/google-appengine-java/browse_thread/thread/3263e14c37391830

やってみて、Pythonの時と比べると少しは楽かと思いました、少なくとも言語がJavaなんで言語そのものの勉強は要らないですね。さ~何を作ってみようかな?時間があるときですけど。時間は自分が作るものだと言われてますが、なかなか難しいですね・・・

Tomcat, Apache 連携

ApacheとTomcatを連携する必要になりました。理由は以下のものを同時に使いたいからです。

Java, JSP (Struts), PHP, CGI(Perl)

Tomcatからcgi形式でPHP,Perlを起動できると思いますが、今回はApacheとTomcatを連携してみます。

1.まず、Apache2をインストール。

http://httpd.apache.org/download.cgi からhttpサーバーをダウンロードしてインストール。
Windowsの場合は、apache_***-win32-x86-***.msi でしょう

2.次にTomcatをインストール。

http://tomcat.apache.org/download-41.cgi からTomcat4.1をダウンロードしてインストール。
Windowsの場合は、Windows Installer でしょう

3.次にTomcat-connections をインストール。

http://tomcat.apache.org/connectors-doc/ から Windows用のbinary ファイルをダウンロード。
mod_jk-1.2.26-httpd-2.2.4.so ダウンロードして、Apache2.2\modulesにコピーします。

4.次に設定ファイルを編集。

Apache2.2\conf の下に、「workers.properties」 ファイルを作成。

worker.list=worker1
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1

Apache2.2\conf\httpd.conf ファイルに以下を追加

LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so

<IfModule mod_jk.c>
JkWorkersFile “C:/***/Apache2.2/conf/workers.properties”
JkMount /*.jsp worker1
JkMount /*.do worker1
</IfModule>

5.起動して確認。

Tomcat、Apache順にサーバーを再起動してからポート番号80番でTomcatが動くことが確認できると思います。