JavaにreplaceAllを使って、パス変換にする時、
エラー(StringIndexOutOfBoundsException)が発生したことがあるでしょう。
それでは、解明しよう*П*
("\":円マーク、"/":スラッシュ)
仕様条件:
パス①からパス②に変換
①=http://www.google.co.jp/iGoogle/html/sample.htm
②=D:\MyGoogle\iGoogle\html\sample.htm
解決案:
StringタイプのreplaceAll(A,B)を使います。
説明:
◆変換元の定義:
String A="http://www.google.co.jp/iGoogle/html/sample.htm";
◆変換先の定義:
変換先のパスはどう定義しますか?下記のようにすればどう?
String B="D:\MyGoogle\iGoogle\html\sample.htm";
結果:×
原因:
文字列の"\"に変換する場合、少なくとも二つの円マーク(即ち:"\\")が必要となる
このうち、一つはエスケープコードといって特殊なコードです。なければ、
「StringIndexOutOfBoundsException」というエラーが出てくる。
上記Bの正しい定義:String B="D:\\MyGoogle\\iGoogle\\html\\sample.htm";
◆特殊場合:
実際に上記の仕様条件を実現するため、必ず一つの円マークが定義される限りないです。
いくつの円マークが必要ということは、ソース内部の処理回数に関係があります。
例:
String B="D:\\\\MyGoogle\\\\iGoogle\\\\html\\\\sample.htm";
public void changePath(String A,String B){
String tmpA=null;
String tmpB=null;
tmpA=A;
tmpB=B;//ここのtmpB:"D:\\MyGoogle\\iGoogle\\html\\sample.htm";
//同じフォルダに新しいファイルを作る
int index=tmpB.indexof("sample.htm");
String newFilePath=tmpB.substring(0,index)+"newsample.htm";
//ここのnewFilePath:"D:\\MyGoogle\\iGoogle\\html\\sample.htm";
tmpA=tmpA.replaceAll(tmpA, newFilePath);
//ここのtmpA:"D:\MyGoogle\iGoogle\html\sample.htm";
}
もし変数Bは、下記のように定義されたら、
String B="D:\\MyGoogle\\iGoogle\\html\\sample.htm";
「tmpA=tmpA.replaceAll(tmpA, newFilePath);」にいくと、
処理後のtmpA:"D:MyGoogleiGooglehtmlsample.htm";になってしまった!!!!!
なんと円マーク(\)はなくなった。
この時、tmpAに対して、他のパス処理があれば、タイトルのエラーが発生する。
::終わり:)
2008年7月31日木曜日
2008年7月25日金曜日
ビルドとビルドファイル
1.ビルドとメイク:
ソースコードファイルをコンパイルし、リンクすることは、"ビルド"でと言われるが、"メイク"で
言われた場合も多い。なぜなら、"ビルド"の操作を実行するコマンド"make(メイク)"のため
です。
ですから、「ビルド」と「メイク」は、同じ意味だと言えるでしょう。
2.ビルドファイル:
ビルドの実現のため、作ったビルド用のファイルと言わば問題ないでしょう:)
具体的に言うと、下記のタイプがあります。
・UNIX、LINUXの環境:
C/C++の場合、"makefile"は、標準なビルドファイルです。
Javaの場合、"build.xml"は、標準なビルドファイルです。
以上二つの標準なビルドファイル名以外、他のビルドファイル名も自由に定義できる。
でも、使い方がちょっと違います。
・標準なビルド名前の場合、ビルドファイルは、ソースファイルと同じなディレクトリに置けば、
コマンド(make、ant)の後ろに書かなくてもOK。
>>make
または
>>ant
・自定義の場合、下記のように書かなければだめです。
>>make -f 自定義のビルドファイル名
>>ant -f 自定義のビルドファイル名
・Windowsの環境:
C/C++の場合、"build.bat"は、標準なビルドファイルです。
Javaの場合、"build.xml"は、標準なビルドファイルです。
ソースコードファイルをコンパイルし、リンクすることは、"ビルド"でと言われるが、"メイク"で
言われた場合も多い。なぜなら、"ビルド"の操作を実行するコマンド"make(メイク)"のため
です。
ですから、「ビルド」と「メイク」は、同じ意味だと言えるでしょう。
2.ビルドファイル:
ビルドの実現のため、作ったビルド用のファイルと言わば問題ないでしょう:)
具体的に言うと、下記のタイプがあります。
・UNIX、LINUXの環境:
C/C++の場合、"makefile"は、標準なビルドファイルです。
Javaの場合、"build.xml"は、標準なビルドファイルです。
以上二つの標準なビルドファイル名以外、他のビルドファイル名も自由に定義できる。
でも、使い方がちょっと違います。
・標準なビルド名前の場合、ビルドファイルは、ソースファイルと同じなディレクトリに置けば、
コマンド(make、ant)の後ろに書かなくてもOK。
>>make
または
>>ant
・自定義の場合、下記のように書かなければだめです。
>>make -f 自定義のビルドファイル名
>>ant -f 自定義のビルドファイル名
・Windowsの環境:
C/C++の場合、"build.bat"は、標準なビルドファイルです。
Javaの場合、"build.xml"は、標準なビルドファイルです。
2008年7月23日水曜日
Oracle表領域の解放(方法二)
前回、Oracle表領域の解放に対して、方法一としてのTRUNCATE方法を紹介いたしました。今回は、対象表を切り捨てなくて、HWMを下げる方法を紹介します。
概念説明:
1.HWM(High Water Mark):最高水位標
各セグメントには、HWMという、一度でもデータブロックを使用したことがあるかどうかの境を示す指標が用意されています。HWMよりも高い位置にあるブロックは未使用ブロックと判断でき、索引を使用しない表スキャン時はHWMまでのブロックを読み込みます。
HWMは、DELETE文やUPDATE文によって領域が空いたとしても下がることがなく、TRUNCATE文で表を切り捨てた場合に下がります。
HWM以下のデータブロックで領域の使用率が低い場合、表スキャンのパフォーマンスが低下する可能性があります。
2.セグメント縮小機能:
セグメント縮小機能は、2段階(圧縮と解放)で作業が行われます。
・圧縮:INSERT/DELETE文を使用した内部処理で行われ、処理中もオンライン状態となりますので、ほかのセッションで同じ表へのSELECT文、DML文の実行も可能です。でも、HWMが下がることはない。
・解放:圧縮に続いて、解放によって、HWMが引き下げられ、未使用領域が解放されます。
手順:
1.対象セグメントにある表領域は、自動セグメント領域管理であることを確認
select tablespace_name,segment_space_management
from dba_tablespaces
where tablespace_name = '対象セグメントがある表領域名';
※"AUTO"ではない場合、Oracleの設定修正が必要です。
2.行管理の有効化
・確認方法:
select row_movement from dba_tables where table_name='表名';
または
select row_movement from dba_tables
where owner='表のユーザ名' and table_name='表名';
・有効化の方法:
alter table 表名 enable row movement;
・無効化の方法:
alter table 表名 disable row movement;
3.圧縮、解放の実行
・表の圧縮のみを行う場合:
alter table 表名 shrink space compact;
・表の圧縮と解放を一緒にに行う場合:
alter table 表名 shrink space;
・表および表に依存する索引を圧縮、解放する場合:
alter table 表名 shrink space cascade;
補足説明:
・圧縮段階:
表に対して、行レベルのロックが行われる。
・解放段階:
セグメント全体のロックが行われる。また、共有プール内のカーソルが無効化されます。
====================================================================
表領域の解放作業に対して、ピーク時間帯やカーソルの無効化を避けたい場合、まず、圧縮のみを行って、オフピーク時間帯に解放を行った方がいいでしょう。
概念説明:
1.HWM(High Water Mark):最高水位標
各セグメントには、HWMという、一度でもデータブロックを使用したことがあるかどうかの境を示す指標が用意されています。HWMよりも高い位置にあるブロックは未使用ブロックと判断でき、索引を使用しない表スキャン時はHWMまでのブロックを読み込みます。
HWMは、DELETE文やUPDATE文によって領域が空いたとしても下がることがなく、TRUNCATE文で表を切り捨てた場合に下がります。
HWM以下のデータブロックで領域の使用率が低い場合、表スキャンのパフォーマンスが低下する可能性があります。
2.セグメント縮小機能:
セグメント縮小機能は、2段階(圧縮と解放)で作業が行われます。
・圧縮:INSERT/DELETE文を使用した内部処理で行われ、処理中もオンライン状態となりますので、ほかのセッションで同じ表へのSELECT文、DML文の実行も可能です。でも、HWMが下がることはない。
・解放:圧縮に続いて、解放によって、HWMが引き下げられ、未使用領域が解放されます。
手順:
1.対象セグメントにある表領域は、自動セグメント領域管理であることを確認
select tablespace_name,segment_space_management
from dba_tablespaces
where tablespace_name = '対象セグメントがある表領域名';
※"AUTO"ではない場合、Oracleの設定修正が必要です。
2.行管理の有効化
・確認方法:
select row_movement from dba_tables where table_name='表名';
または
select row_movement from dba_tables
where owner='表のユーザ名' and table_name='表名';
・有効化の方法:
alter table 表名 enable row movement;
・無効化の方法:
alter table 表名 disable row movement;
3.圧縮、解放の実行
・表の圧縮のみを行う場合:
alter table 表名 shrink space compact;
・表の圧縮と解放を一緒にに行う場合:
alter table 表名 shrink space;
・表および表に依存する索引を圧縮、解放する場合:
alter table 表名 shrink space cascade;
補足説明:
・圧縮段階:
表に対して、行レベルのロックが行われる。
・解放段階:
セグメント全体のロックが行われる。また、共有プール内のカーソルが無効化されます。
====================================================================
表領域の解放作業に対して、ピーク時間帯やカーソルの無効化を避けたい場合、まず、圧縮のみを行って、オフピーク時間帯に解放を行った方がいいでしょう。
2008年7月19日土曜日
Oracle表領域の解放(方法一)
表領域の使用率がだんだん増え続いたら、どうすればいい?
言うまでもなく、古いデータをバックアップし、削除し、表領域を解放しよう!!
それでは、表領域解放の方法を紹介いたします。
1.手順
①削除対象データを確定
②削除対象データをエクスポート(EXPコマンドより)(バックアップ)
※エクスポートの漏れがないように、条件をよく考えた上で実施してください。
③対象データを削除(DELETEコマンドより)
※DELETEの条件をよく考えて、検討した上で実施してください。データの削除は誤ったら、大変なことが起こるよ!
④残りの全てのデータをエクスポート(EXPコマンドより)(後インポート)
⑤対象テーブルをTRUNCATE
⑥上記④のエクスポートされたデータを対象テーブルにインポート
これで、古いデータのバックアップと表領域の解放が完了
2.補足説明
・TRUNCATEで対象テーブルのデータを全て切り捨てるから、かつ、ROLLBAKより回復ができない。ですから、TRUNCATE前、データのバックアップが大事です。
・TRUNCATEの方法は、一度対象テーブルのデータを切り捨てることがありますから、業務に対して、一定期間の停止が必須です。
・TRUNCATE後のデータの再インポートは、元データの完全性の確保は、業務に対しても不可欠です。
言うまでもなく、古いデータをバックアップし、削除し、表領域を解放しよう!!
それでは、表領域解放の方法を紹介いたします。
1.手順
①削除対象データを確定
②削除対象データをエクスポート(EXPコマンドより)(バックアップ)
※エクスポートの漏れがないように、条件をよく考えた上で実施してください。
③対象データを削除(DELETEコマンドより)
※DELETEの条件をよく考えて、検討した上で実施してください。データの削除は誤ったら、大変なことが起こるよ!
④残りの全てのデータをエクスポート(EXPコマンドより)(後インポート)
⑤対象テーブルをTRUNCATE
⑥上記④のエクスポートされたデータを対象テーブルにインポート
これで、古いデータのバックアップと表領域の解放が完了
2.補足説明
・TRUNCATEで対象テーブルのデータを全て切り捨てるから、かつ、ROLLBAKより回復ができない。ですから、TRUNCATE前、データのバックアップが大事です。
・TRUNCATEの方法は、一度対象テーブルのデータを切り捨てることがありますから、業務に対して、一定期間の停止が必須です。
・TRUNCATE後のデータの再インポートは、元データの完全性の確保は、業務に対しても不可欠です。
2008年7月18日金曜日
batファイル作成(1)
1.batファイルにほかの可実行ファイル(bat,exe,jsなど)を呼び出す
call sample.bat para1 para2
注:
sample.batにパラメータを受け取る時、%0の値は"para1"ではなく、"sample.bat"
%1の値は"para1"です。
2.日付の数値化:
普通の変数設定:
set startDate=%1 または
set startDate=20080718 または
set startDate=%para% /paraは別のところに定義されている変数
数値の加、減など計算ができるようにしたら、変数の数値化設定が必要です。
(パラメータ「/a」はキーワード)
例:
初期値:
set initDate=20080718
・年数1plus
set /a year=%initDate:~0,4%
set /a year=%year%+1
または
set /a year=%initDate:~0,4%+1
・月数1plus
set /a month=%initDate:~4,2%
set /a month=%month%+1
または
set /a month=%initDate:~4,2%+1
3.変数値比較
「文字列1」と「文字列2」を比較して、比較演算子によって真偽を判定。
比較演算子は以下の6種類がある。
* EQU 等しい
* NEQ 等しくない
* LSS より小さい
* LEQ 以下
* GTR より大きい
* GEQ 以上
パラメータ:
/i:文字列を比較する場合に、アルファベットの大文字と小文字を区別しない。
例:
if /i akiba neq AKIBA (echo 等しくない) else echo 等しい
call sample.bat para1 para2
注:
sample.batにパラメータを受け取る時、%0の値は"para1"ではなく、"sample.bat"
%1の値は"para1"です。
2.日付の数値化:
普通の変数設定:
set startDate=%1 または
set startDate=20080718 または
set startDate=%para% /paraは別のところに定義されている変数
数値の加、減など計算ができるようにしたら、変数の数値化設定が必要です。
(パラメータ「/a」はキーワード)
例:
初期値:
set initDate=20080718
・年数1plus
set /a year=%initDate:~0,4%
set /a year=%year%+1
または
set /a year=%initDate:~0,4%+1
・月数1plus
set /a month=%initDate:~4,2%
set /a month=%month%+1
または
set /a month=%initDate:~4,2%+1
3.変数値比較
「文字列1」と「文字列2」を比較して、比較演算子によって真偽を判定。
比較演算子は以下の6種類がある。
* EQU 等しい
* NEQ 等しくない
* LSS より小さい
* LEQ 以下
* GTR より大きい
* GEQ 以上
パラメータ:
/i:文字列を比較する場合に、アルファベットの大文字と小文字を区別しない。
例:
if /i akiba neq AKIBA (echo 等しくない) else echo 等しい
2008年7月16日水曜日
2008年7月13日日曜日
外部委託の開発プロセス
外部委託開発の場合、下記のプロセスを参照ください。
一、開発体制の明確化:
委託側、受託側ともに、各自の上位マネジャー、窓口責任者、プロジェクトマネジャーを明確にする
二、作業計画に関する合意:
プロジェクトのスケジュール、作業範囲、完了基準などに対して、合意し、文章化する
三、密接なコミュニケーション:
両者お互いに「プロジェクトの共有」の意識にすることが大事。
四、品質管理を徹底:
品質目標もしくは品質標準を明確する
五、正確に進捗を把握:
六、プロジェクト標準:
外部委託では,プロジェクト標準の各種のガイド類を,作業開始までに十分な余裕を持って,協力会社に渡しておくことが必要だ。
「用語標準」、ドキュメント標準」、「設計標準」、「コーディング規約」、「テスト方法」、「品質管理手順」、「進ちょく管理手順」、「変更管理手順」、「問題管理手順」、「状況報告の様式」、「成果物の納入方法」などがある
七、成果物の受け入れ:
一、開発体制の明確化:
委託側、受託側ともに、各自の上位マネジャー、窓口責任者、プロジェクトマネジャーを明確にする
二、作業計画に関する合意:
プロジェクトのスケジュール、作業範囲、完了基準などに対して、合意し、文章化する
三、密接なコミュニケーション:
両者お互いに「プロジェクトの共有」の意識にすることが大事。
四、品質管理を徹底:
品質目標もしくは品質標準を明確する
五、正確に進捗を把握:
六、プロジェクト標準:
外部委託では,プロジェクト標準の各種のガイド類を,作業開始までに十分な余裕を持って,協力会社に渡しておくことが必要だ。
「用語標準」、ドキュメント標準」、「設計標準」、「コーディング規約」、「テスト方法」、「品質管理手順」、「進ちょく管理手順」、「変更管理手順」、「問題管理手順」、「状況報告の様式」、「成果物の納入方法」などがある
七、成果物の受け入れ:
eclipseの設定問題対応
1.デバックモードで実行する時、下記のエラーが出てきました:
”…ソースが見つかりませんでした(OutOfMemory)”
実際の原因は、jarファイルのソースではなく、初期VMの値が設定されていないことです
「ウィンドウ」→「設定」→「Java」→「インストール済みのJRE」をクリックし、右側のJREを選択し、「編集」をクリックします。
編集画面にある「デフォルトのVM引数」に「-Xmx256m」ようにJVMの最大VM量を設定すればOK。
2.デバッグモードでブレークポイントを設定し、ソースはブレークポイントのところまで実行されたら、「…ソースが見つかりませんでした」のようなメッセージあるいは画面が出てきます。
原因:デバッグ対象プロジェクトの「ソースルックアップ」の設定にしなかった。
対策:対象プロジェクトをデバッグモードで起動し、中途にデバッグを中止し、デバッグ欄内のプロジェクトを選択し、右クリックすると、ポップアップメニュー画面から「ソースルックアップの編集」をクリックし、デバッグしたいソースを追加すればOK
”…ソースが見つかりませんでした(OutOfMemory)”
実際の原因は、jarファイルのソースではなく、初期VMの値が設定されていないことです
「ウィンドウ」→「設定」→「Java」→「インストール済みのJRE」をクリックし、右側のJREを選択し、「編集」をクリックします。
編集画面にある「デフォルトのVM引数」に「-Xmx256m」ようにJVMの最大VM量を設定すればOK。
2.デバッグモードでブレークポイントを設定し、ソースはブレークポイントのところまで実行されたら、「…ソースが見つかりませんでした」のようなメッセージあるいは画面が出てきます。
原因:デバッグ対象プロジェクトの「ソースルックアップ」の設定にしなかった。
対策:対象プロジェクトをデバッグモードで起動し、中途にデバッグを中止し、デバッグ欄内のプロジェクトを選択し、右クリックすると、ポップアップメニュー画面から「ソースルックアップの編集」をクリックし、デバッグしたいソースを追加すればOK
登録:
投稿 (Atom)