2008年1月アーカイブ

フォルダを共有したいのにwindowsXPではデフォルトでは、フォルダのプロパティに共有タブが出てこない。

フォルダオプションの「簡易ファイルの共有を使用する(推奨)」のチェックをはずせば出てくるようになる。
どこが推奨なんだか・・・。

参考 Bonurd Laboratory ディレクトリのセキュリティ

アンインストールに失敗して残ったサービスのエントリを消去したい

コマンドラインで
sc delete サービス名

なお、サービス名はコンピュータの管理>サービス>消したいサービスの「プロパティ」>サービス名
でわかる。

レジストリいじる前にこちらを試すこと

参考 テストの進め方

無駄なく確実にテストする 総論 テストの3つの基本知識



  • マインドマップから始めるソフトウェアテスト

  • はじめて学ぶソフトウェアのテスト技法

リクエストディスパッチャの先頭の/を忘れるのと似ている。

対処
page属性はルートから書く。

エラーメッセージ
org.apache.jasper.JasperException: /pages/top.jsp(18,2) TLDに従ってタグ bean:message は空でなければいけませんが、そうではありません

対処
どっかでbean:message タグが閉じてない

  1. ひな形にしたいプロジェクトをwarファイルでエクスポート
  2. 1でエクスポートファイルを違うプロジェクト名でインポート

原因:リクエストのAttributeの名前のスペルが違った。
request.setAttribute("ArticleTable", ViewTable);→ GETしているところはarticleTableだった・・・。

原因:飛び先のjspが見つからないのかもしれない。

対処:web.xmlのwelcome-fileで設定した飛び先があるかチェック。

「”」ではなく、シングル「’」で囲む。
'mailto:'/>

Eclipse ショートカット

メソッドから元のメソッド定義を表示・・・F3
行を下に挿入 ・・・Shift + Enter

ショートカットキーノススメ Eclipse 3.3のショートカットキー

<コンテキストルート>/WEB-INF/classes/resources/ に入れる。
リソースファイルの場所の指定はstruts-config.xmlで↓に書く。

<u>ファイル名application.propertiesの場合</u>
parameterはresourcesパッケージのapplicationを意味してる



<struts-config>
  ・・・
<message-resources parameter="resources.application" />
  ・・・
</struts-config>

native2asciiによるユニコード変換の煩わしさから解放されます。
このエディタはUnicode参照文字で書かれたプロパティファイルを直接編集することができ、native2asciiでUnicodeに変換する手間を省きます。また、通常のエディタの機能に加え、JBuilderや、Eclipseへの統合などの便利な機能を提供します。JBuilder、 Eclipseへの統合では、プロジェクト内のpropertiesファイルを直接開いて編集することが可能で、もちろんUnicodeで保存されます。直感的、かつシンプルな操作で利用できます。
プロパティエディタのサイトより)

更新サイト http://propedit.sourceforge.jp/eclipse/updates/

参考記事  CoolなEclipseプラグイン(1)Javaのプロパティファイルを編集できるプラグイン

原因:ライブラリやtldファイルが重複登録されていたため。

Struts IDEにまだ慣れてないので、変なとこ(WebContents直下とか)にtldファイルができてしまったりする。
すると同じファイルが2種類あることになる、そこでそれらを消す。しかしこれだけでは足りない。

Struts IDEのStrutsサポートはしっかりビルドパスにも登録するので、そちらでいらない登録も消すこと!

画面出力用のユーティリティパッケージ


  • プログラム終了時に一気にメッセージが出る。ので、その行実行時ではないことに注意。

  • 出力先はSQLPlusかSerever Mnagerの画面しかできない。

  • 画面出力用の設定(プログラムを実行する前にセット) SET SERVEROUTPUT ON

DECLARE
	wk_test VARCHAR2(100);
BEGIN
	wk_test := '変数の内容を表示';
	DBMS_OUTPUT.PUT_LINE(wk_test);
	IF wk_test IS NOT NULL THEN
		DBMS_OUTPUT.PUT_LINE('固定メッセージも出力できる');
	ELSE
		DBMS_OUTPUT.PUT_LINE('出ないはずのメッセージ');
	END IF;
	DBMS_OUTPUT.PUT('改行しない');
	DBMS_OUTPUT.PUT('ので続けて出力されます');
	DBMS_OUTPUT.NEW_LINE;
END;

host ホストのコマンド

OEMの優先接続情報が通らないときなど。

DB起動
startup

マウントまで起動
startup mount

DB停止
shutdown immediate

トリガー

トリガーが管理されている表
DESC USER_TRIGGERS

どんなトリガーがあるかを調べる
SELECT trigger_name, trigger_type, table_name, column_name, status FROM user_triggers;

トリガーのオン・オフ
ALTER TRIGGER トリガー名 DISABLE;

DISABLE・・・使用付加、ENABLE・・・使用可

PL/SQLのWrap

DBのuser_sourceでプログラムのソースが読まれないように暗号化するコマンド
wrap iname=『c:¥からのパス』

ソースを見る
SELECT line || ' : ' || text FROM user_source
WHERE name = 'プログラム名';

エラーのあった行だけ表示
SELECT s.line || ' : ' || s.text FROM user_source s, user_errors e
WHERE s.name = e.name AND s.line = e.line AND s.name = 'プログラム名';

ログインしているユーザの所有するオブジェクト一覧の表示のSQL
SELECT object_type, object_name FROM user_objects ORDER BY object_type,object_name;

Struts.jarとstruts-core-1.3.X.jar

Struts.jarは1.3系からstruts-core-1.3.X.jarに変わった模様。もしくはstruts-なんとか-1.3.X.jarに。

本家のサイトのドキュメントでは確認できない(エイゴワカラン)が、このパッケージ内容から察するにそういうことなんだろう。現在、日本の書籍で1.3系に対応している書籍が少ないため、こうゆう混乱がおこる・・・。
2も出ちゃったから、1.3系の書籍でないんだろうな。

struts01.jpg

DWR セッション使用テスト

FrontPage - JAVAに関する備忘録 HIDEKAZU PukiWiki さんの
Ajax DWR(Direct Web Remoting) セッション のコード改(こちらでは動作できなかった為)

*赤いところが変更点と気になったところ。

使用イメージ


drw_session01.png

郵便番号のところに7つ数字入れるとその瞬間に都道府県と市区町村、テスト(セッション情報)に情報が入る。



drw_session02.png

確認ボタンを押すとアラーとが出る。



session.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>DWR</title>
<script type='text/javascript' src='dwr/interface/Testdwr.js'></script>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/util.js'></script>
<script type='text/javascript'>
<!--
var resData;
function searchAddress () {
var zipcode = dwr.util.getValue("zipcode");
if (zipcode.length == 7) {
Testdwr.getZipdata(zipcode, result);  //getZipdataの引数が郵便番号がはいり、コールバック関数resultが呼ばれると思うので、zipcodeとresultを逆にしました。
}
}

function result(data) {
dwr.util.setValues(data);
resData = dwr.util.toDescriptiveString(data, 2); // toDescriptiveString(data, 2)はtoStringの気の効いてるやつ?第1引数は文字列にしたいオブジェクト、第2引数は複数行可の指定?エイゴワカラン。
}

function btnKakunin() {
alert(resData);
}
// -->
</script>
</head>
<body>
住所検索<br>
郵便番号:<input type="text" id="zipcode" size="10" onkeyup="searchAddress()" maxlength="7"><br>
都道府県:<input type="text" id="pref" size="10"><br>
市区町村:<input type="text" id="city" size="10"><br>
テスト:<input type="text" id="test2" size="10"><br>
<input type="button" value="確認" onclick="btnKakunin()">
</body>
</html>

Testdwr.java
package jp.hoge;

import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpSession;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.WebContext;

public class Testdwr {
public Map<String,Object> getZipdata(String data) {
//DWR2.0ではuk.ltd.getahead.dwr.ExecutionContextは非推奨になってるので変更
WebContext wContext = WebContextFactory.get();
HttpSession session = wContext.getSession();


if (session.getAttribute("test2") == null) {
session.setAttribute("test2", data);
}

Map<String,Object> map = new HashMap<String,Object>();
map.put("pref","北海道");
map.put("city","札幌市");
map.put("test2",session.getAttribute("test2"));
return map;
}
}


dwr.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC 
  "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" 
  "http://getahead.ltd.uk/dwr/dwr20.dtd">
<dwr>
    <allow>
	<create creator="new" javascript="Testdwr" scope="session">
	        <param name="class" value="jp.hoge.Testdwr">
	        </param>
        </create>
    </allow>
</dwr>
web.xml
<servlet>
	    <servlet-name>dwr-invoker</servlet-name>
	    <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
	    <init-param>
	        <param-name>debug</param-name>
	        <param-value>true</param-value>
	    </init-param>
	</servlet>
	<servlet-mapping>
	    <servlet-name>dwr-invoker</servlet-name>
	    <url-pattern>/dwr/*</url-pattern>
	</servlet-mapping>

たとえばdwrのdwr.jar追加したのに404な時はプロジェクトを「更新」する。たぶん通る。

Java 学習

Dojo ToolKit 1.0.2 参考

DWR 参考サイト

DWRの設定方法
DWRが実現する次世代AJAX(後編)
DWR紹介プレゼン用資料みたい・・・こちら

はまった理由
2008/1現在、MacOSXのJVMのバージョンは最新で5.0。自分のwebアプリケーションはwinで6.0で開発。
UnsupportedClassVersionErrorはバージョン違いのために実行できないためだった。

対処
Eclipse上で
プロジェクトの設定/Javaコンパイラー/
コンパイラー準拠レベル 5.0
生成された.classファイルの互換性 5.0
に変更。

Javaのビルドパス/JREシステムライブラリー
代替JRE JVM1.5.0(MacOSX Default) 
これは変えてない。

プロジェクト・ファセット
Java バージョン 5.0
に変更。これを変更しないとeclipseのサーバタブでTomcatv5.5サーバが作れない。

*はじめはjdbcドライバのパスが通ってないかと思ったが、それではなかった。
余談だが、とりあえず動かすだけなら、jdbcドライバの置き場はたぶんどこでもいい。CLASSPATHに追加すればいいので。
今回はTomcat/web_App/アプリケーション/WEB-INF/lib/にいれた。あたりまえだが、JavaなのでwinのPostgreSQLから持ってきたjdbcドライバでもちゃんと動く。

結論
MacOSXで動かす可能性があるときは、バージョンに注意。やっちまったら、コンパイルしなおす。
やっぱりどうしてもMacはバージョンアップは遅くなるので。

理工系研究者のための Mac OS X, Windows, Linux メモ PostgreSQLを使ってみよう

上記サイトの記述で迷ったこと
make前のこと
./configure --enable-multibyte=EUC_JP --enable-syslog --prefix=/usr/local/pgsql
とコンソールでいれる。MacOSXのSafariと表示が違うが、たぶんこっちでいいんじゃないだろうか。mekeは長い。

シェルスクリプトの書き方

bashで始めるシェルスクリプト基礎の基礎

ファイル名に.shはつけとく
ファイル名の「.sh」は、なくてもスクリプトの実行には関係ありません。「.sh」を付けなくてもよいのですが、そうなるとファイル名だけではCコンパイラなどを使って作ったバイナリの実行ファイルと区別できません。

先頭につけるもの
#!/bin/sh

ファイルに実行属性を付ける
chmod u+x hogehoge.sh

実行する時は./が必要
./hogehoge.sh

参考
Eclipseのインストールと日本語化
みかんの箱日記

インストールしたもの
Eclipse IDE for Java EE Developers - Mac OS X (3.3 Europa)

展開するとき
これで展開しないと「ここじゃ実行できない」みたいなエラーが出た。ターミナルで解凍する事。
tar xvf ./eclipse-jee-europa-fall2-macosx-carbon.tar
*tar.gzでないのでzはいらない。

pleiades
eclipse.iniファイルの中。Macの場合eclipse.iniは「Eclipse.appを右クリック>パッケージの内容を表示>Contents>MacOS>eclipse.ini」にある。
↓絶対パスになってる(これでいけた)
-javaagent:/Applications/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar=no.mnemonic

*no.mnemonicは(F) のようなニーモニックを非表示にすること。こういうの気にするの、Macユーザらしいよな。もちろん消した。

参考
CreativeStyle Mac OS X(Leopard)にTomcatをインストール

Mac OS XでTomcat (Java ServletとJSP)


以上の記事で戸惑ったところ
インストール
ターミナルを起動します。まず最初にダウンロードしたファイルが存在するディレクトリにcdコマンドで移動します。そして以下のコマンドを実行し、ダウンロードしたファイルを「/usr/local/tomcat」ディレクトリに移動させます。
mkdir /usr/local/tomcat

/usr/local 以下は管理者ユーザ(MacOSXいうところの)はmkdirでディレクトリを作れないので、sudoすること。


一般ユーザからでも簡単に使えるようにするため、「/usr/local/tomcat/」内のディレクトリの所有者権限を変更します。
$ sudo chown -R kkadowaki:staff jakarta-tomcat-5.0.28/

sudoだと通らなかったので、rootになる。当たり前だがユーザ名間違えてるとだめ・・・。

MacOS Xの root のパスワード

MacOS X を設定していくと、root のパスワードを設定するところがない。

$ sudo passwd root

BooLog 1.0

rootになる方法

MacOSX10.4

MacOSX では、デフォルトの設定で、Unix の root 権限を使用できません。
そのため、このままでは Unix のアプリケーションで一般的な”/usr/local/”などにファイルを置く
ソフトウエアはインストールできません。NetInfo マネージャを用いて、ルート権限の利用許可を
設定する必要があります。

NetInfo マネージャによるルート権限の利用許可


  1. アプリケーション / ユーティリティ /NetInfo マネージャを開く

  2. セキュリティー / 認証…に入り、現在のユーザ名、パスワードを入力

  3. 初めての場合は、ルートユーザを有効にした後、ルートパスワードを設定します

  4. “セキュリティー”ー”ルートユーザを有効”

  5. “セキュリティー”ー”ルートパスワードの変更”

  6. “セキュリティー”-”ルートパスワードを有効”

これで、Terminal から
$ su
   Passward: <--Keyboard から入力しても見えません
以降、ルート権限(スーパーユーザー)で全ての操作が可能になります。

の、はずだがならないので、su - (ハイフンは現在のユーザの環境にroot権限をつける意味)する。

元のユーザに戻る場合は、
 $ exit

単一のコマンドのみをルート権限(スーパーユーザー)で実行する場合は、
$ sudo xxxxx

su
substitute user ログイン後、一時的にユーザを変更する Unix コマンド。主に root 権限が必要な
コマンドの実行に先立って使用。root の password を聞かれる。exit で元のユーザに戻る。

sudo
sudo mkdir xxxx のように、root 権限の必要なコマンドを一行で実行。root の password を聞か
れる。exit は必要ない。

Unix としての MacOSX

ライブラリをTomcat の\webapps\WEBアプリケーション\WEB-INF\lib に追加したのに、NoClassDefFoundErrorが出る場合、eclipse側でうまくwebAppライブラリが追加できてない事がある。

eclipseのビルド・パスの構成の「webAppライブラリー」に追加されてない時は、その点があやしい。その場合、プロジェクトエクスプローラのWEB-INFのlibに直接、ライブラリ(.jar)をドラッグ&ドロップすれば追加される。


libAdd.jpg


ビルド・パスの構成の「webAppライブラリー」は動的にライブラリを追加する感じになっているが、どうもこれが効いてないようだ。ちなみにcommon\libにいれても動くことは、動く。JDBCドライバなんかはこちらで共有した方が安全という意見もあり。


補足:(今回の場合関係ないが)、クラスローダーの順番も大事らしい。

--クラスローダの階層構造----------------------------------------------
システムクラスローダ(rt.jar などを読み込む)
L Tomcatののクラスローダ(servlet.jar など)
L Webアプリケーション毎のクラスローダ(WEB-INF/lib,classes)
-----------------------------------------------------------------------------

クラスローダには親子関係があります。
そこで以下の制約が生まれます
・子クラスローダから親クラスローダのクラスは見える
・親クラスローダから子クラスローダのクラスは見えない
これにより複数の子クラスローダで同じ名前のクラスを別々の空間で読み込むことができる仕組みになっています。
今回の場合 Web アプリケーションのクラスローダで読み込まれるクラスを、親クラスローダから読み込めないために発生します。
なので、JDBCドライバを使いたいクラスが存在するのと同じかそれより親のクラスローダでJDBCドライバが読み込めないといけません。

出典
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=28912&forum=12&3
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=37347&forum=12&5

if (name.equals("") ){

という感じ、まず文字列の比較は=でなく「.equals」。
そしてStringはカラの場合、nullではなくて、「””(カラ文字)」になるため。