5.7.3.0 (2014/02/07) [Process_**** 修正] Process_**** 関係で、debug パラメータを追加します。 従来は、一部のプロセスのみありましたが、すべてのプロセスで デバッグ出力できるようにします。 fukurou.process.Process_DBCountFilter.java fukurou.process.Process_DBMerge.java fukurou.process.Process_DBReader.java fukurou.process.Process_DBWriter.java fukurou.process.Process_FileCopy.java fukurou.process.Process_FileSearch.java fukurou.process.Process_FileSearch.java fukurou.process.Process_GrepChange.java fukurou.process.Process_LDAPReader.java fukurou.process.Process_StringUtil.java fukurou.process.Process_TableFilter.java fukurou.process.Process_TableReader.java fukurou.process.Process_TableWriter.java fukurou.process.Process_UnicodeEscape.java fukurou.process.Process_XSLT.java [ソースチェック関係] ソースチェックのQUERY定義検索 で、カラム列とテーブルの取得を行います。 それに伴い、桁数の変更と、新しいカラムを追加します。 DB定義書の修正も行います。 GF74 の CLMS 1000桁 ⇒ 4000 桁 GF74 の TABLE_NAMES VARCHAR2(4000) 追加 gf/jsp/DOC18/xsltV6/GF74_PROG.xsl 廃止タグなど、軽微なチェック項目の追加 gf/jsp/DOC18/xsltV6/GF70_PROG.xsl [DB定義DB関係] シーケンスの現在の設定値を見られるように、項目を追加します。 テーブル定義の件数みたいな使い方をします。 取りあえず、数字項目ですが、 NOT NULL 指定はしていません。 ALTER TABLE GF09 ADD ( LAST_NUMBER NUMBER ); gf/jsp/GF2082/result.jsp gf/jsp/GF2082/sqlGF09.jsp gf/jsp/GF2140/result.jsp gf/jsp/GF2150/result.jsp テーブル、インデックス関係で、自動計算初期エクステント(INITIAL_AUTO), 初期エクステント(KB)(INITIAL_EXTENT) などほとんど使っていないのに ラベルがやたらと長いカラムを、後ろに移動させます。 また、ラベルも判りにくくなりますが、省略します。 gf/jsp/GF2010/result.jsp(31): INITIAL_AUTO,INITIAL_EXTENT,SYSTEM_ID,FGJ,UNIQ gf/jsp/GF2030/result.jsp(33): BIKO,INITIAL_AUTO,INITIAL_EXTENT,SYSTEM_ID,FGJ,UNIQ gf/jsp/GF2060/dbdefIn.jsp(45): constKeys = "SYSTEM_ID,TBLSYU,SKENSU,JKENSU,TABLESPACE_NAME,INITIAL_EXTENT,INITIAL_AUTO" gf/jsp/GF2060/dbdefIn.jsp(203): INITIAL_AUTO,INITIAL_EXTENT,SYSTEM_ID,TBLSYU, gf/jsp/GF2150/result.jsp(62): COMMENTS,INITIAL_AUTO,INITIAL_EXTENT, gf/jsp/GF2150/result.jsp(120): TABLESPACE_NAME,BIKO,INITIAL_AUTO,INITIAL_EXTENT,NEXT_EXTENT, gf/jsp/GF6150/result1.jsp(6): INITIAL_AUTO,INITIAL_EXTENT,SYSTEM_ID,FGJ,UNIQ gf/jsp/GF6150/result3.jsp(6): INITIAL_AUTO,INITIAL_EXTENT,SYSTEM_ID,FGJ,UNIQ gf/jsp/GF7020/GF02xml.jsp(27): INITIAL_AUTO,INITIAL_EXTENT,FGJ gf/jsp/GF7020/result.jsp(64): colKeys = "SYSTEM_ID,TBLSYU,TABLE_NAME,NAME_JA,SKENSU,JKENSU,TABLESPACE_NAME,COMMENTS,INITIAL_AUTO,INITIAL_EXTENT,FGJ" DB検索画面で、TABLE,CLM等を入力したときのスキーマ一覧で オーナーが表示されていなかったため、表示に追加します。 gf/jsp/common/gamen/03_DBSEARCH/changeSQL.jsp [FileUploadTag の修正] 5.7.1.2 (2013/12/20) のzip対応の修正で、取得ファイル名が、getPath() になっていた。 getName() が正解。 hayabusa.taglib.FileUploadTag#makeDBTable( final MultipartRequest multi ) hayabusa.taglib.FileUploadTag#makeDBTableFromClms( final MultipartRequest multi ) [リソース関連の修正] 「5.6.1.1 (2013/02/08) で、Editor_MENU を、NUMMENU、YMDMENU、HMMENU のスーパークラスとして使用するに当たり、 Selection オブジェクトの初期化で、null エラーになるので、「とりあえず」処理します。」 について、対応を行います。 @SelectionFactory で、new Selection*** を置き換えます。 ACodeDataやSelectionオブジェクトが作成できない場合は、エラーメッセージを、標準エラー出力に 出力するとともに、エラーメッセージのコードリソースを作成します。 以前は、5.6.1.1 の対応で、Selectionオブジェクトが null になり、CodeData の未登録時などに、 NullPointerException が発生して、発生箇所、原因が判りませんでした。 hayabusa.db.SelectionFactory#newSelection( final String type,final String param ) hayabusa.db.SelectionFactory#newSelection( final String type,final CodeData codeData ) hayabusa.db.SelectionFactory#DBColumn#DBColumn( final String lang, hayabusa.db.SelectionFactory#DBColumn#DBColumn( final DBColumnConfig config ) hayabusa.db.DBColumn#DBColumn( final String lang,・・・ hayabusa.db.DBColumn#DBColumn( final DBColumnConfig config ) hayabusa.db.DBColumn#getSelection() plugin.column.Editor_HMMENU#Editor_HMMENU( final DBColumn clm ) plugin.column.Editor_NUMMENU#Editor_NUMMENU( final DBColumn clm ) plugin.column.Editor_RADIO#Editor_RADIO( final DBColumn clm ) plugin.column.Editor_YMDMENU#Editor_YMDMENU( final DBColumn clm ) plugin.column.Renderer_RADIO#Renderer_RADIO( final DBColumn clm ) plugin.column.Editor_INMENU#getValue( final String value ) plugin.column.Editor_INMENU#getValue( final int row,final String value ) plugin.column.Editor_MENU#getValue( final String value ) plugin.column.Editor_MENU#getValue( final int row,final String value ) plugin.column.Renderer_MENU#getValue( final String value ) plugin.column.Renderer_MENU#getValue( final int row,final String value ) BDBColumn 構築時に、LabelData が null の場合、いきなり、NullPointerException が発生 してしまうため、LabelData の簡易オブジェクト を設定できるようにします。 LabelData のコンストラクタをpublicにし、DBColumnConfig で、LabelData の初期値に設定します。 hayabusa.resource.LabelData#LabelData( final String inkey ) hayabusa.db.DBColumnConfig#DBColumnConfig( final String lang , ・・・・ hayabusa.db.DBColumnConfig#DBColumnConfig( final String name ) CDB検索メニューで、リソースを使わない素のデータを表示したい要望に対応します。 ColumnEditorTag で、リソースを使用しない DBColumn を設定します。 noResource="true" で、処置します。 上記変更で、OWNERの値を利用した localResource も用意します。 ただし、DBID使用時に、本当は接続先リソースを使うべきですが、そこまで対応できていません。 hayabusa.taglib.ColumnEditorTag#release2() hayabusa.taglib.ColumnEditorTag#setNoResource( final String flag ) hayabusa.taglib.ColumnEditorTag#getModifyConfig( final DBColumn dbColumn ) gf/src/META-INF/hybs-taglib.tld gf/WEB-INF/hybs-taglib.tld gf/jsp/common/gamen/03_DBSEARCH/query.jsp gf/jsp/common/gamen/03_DBSEARCH/result.jsp 5.7.2.3 (2014/01/31) [Bizロジック修正] 5.6.7.0の対応でテーブルモデルのチェックの条件を変更しましたが、 検索結果0件の場合にエラーと判定されていたため修正します。 fukurou.business.ArrayTableModel#ArrayTableModel( final String[] nms, final String[][] vs, final String[] ms ) [oracle.sql.*** 関係] 5.7.2.2 (2014/01/24) で対応した、JDBCドライバ対応を、元に戻します。 既存環境との互換性の為、Ver5 では、従来の方式に戻します。 Ver6 は前回の修正のまま、残ります。ソースが異なりますので、ご注意ください。 http://docs.oracle.com/cd/E28389_01/web.1111/b60995/thirdparty.htm hayabusa/taglib/DirectWriteTableTag#executeCall( final Connection conn,final CallableStatement callStmt,final String[] args ) plugin/query/Query_JDBCArrayCallable#execute( final String[] args ) plugin/query/Query_JDBCErrMsg#execute( final String[] args ) plugin/query/Query_JDBCKeyEntry#execute( final String[] keys, final String[] args ) plugin/query/Query_JDBCPLSQL#execute( final String names,final String dbArrayType,final DBSysArg[] sysArg,final DBUserArg[] userArg ) [Process_DBReader 修正] Process_DBReader で、SELECTで読み取ったカラム名を、書き換える機能を用意します。 これは、-asClms 属性で元カラム名:新カラム名 のスペース区切りで指定します。 例:-asClms="FGJ:CDJ SEQ123:UNIQ" 軽微な処理なら、SELECT文で、AS区で書き換えればよいのですが、共通的な カラム名の部分的な置換の場合、SQL文を都度用意するのではなく、引数で指定する方が まとめて処理するのに都合が良い為です。 fukurou.process.Process_DBReader#init( final ParamProcess paramProcess ) 引数の AA:01 BB:02 CC:03 … 形式の、元値:新値のスペース区切り文字列を元に、元値を新値に置き換えます。 fukurou.util.StringUtil#caseReplace( final String target,final String caseStr,final boolean ignoreCase ) Process_TableFilter の replace パラメータで、⇒ 記号で部分文字列の置換指定を行わない場合は、 CASE指定で、"_:0 A:1 B:2" (元値:新値 のスペース区切り) 形式の置換を行う様に機能追加します。 fukurou.process.Process_TableFilter#init( final ParamProcess paramProcess ) fukurou.process.Process_TableFilter#action( final LineModel data ) fukurou.process.Process_TableFilter#end( final boolean isOK ) Process_TableWriter の JavaDocコメントを修正します。 delKey_XXXX , insKey_XXXX パラメータは実装がない為、コメントを削除します。 fukurou.process.Process_TableWriter.java 5.7.2.2 (2014/01/24) で、MainProcess で、ログ出力と、標準エラー出力を停止 しましたが、ログをファイルに出力する場合に、標準出力に出力されないので元に戻します。 なお、ログは標準出力、こちらは、エラー出力なので、標準出力をリダイレクト すれば、2重に見えることは無くなります。 ※ 5.7.2.2 (2014/01/24) のコメントごと削除します。 fukurou.process.MainProcess#run() [DatabaseConfig 修正] DBConfig.xml ファイルの検索で、日本語フォルダを含む相対パスでの URL 検索では ファイル名のエンコードの関係で、名前は取れても、そのままでは、取得できない ケースがありました。そこで、名前を取得後、存在チェックを行い、無ければ、 取得しなおすこととします。 fukurou.db.DatabaseConfig( final String xmlfile ) 引数の XmlFileName 引数を、xmlFileName に変更します。 fukurou.db.ConnectionFactory#init( final String defPoolKey, final String xmlFileName ) [DB定義DB 修正] 比較条件など、少し修正 jsp/GF2030/query.jsp,result.jsp BIKO を検索条件に追加 jsp/GF2060/GFM0016.jsp,GFM0040.jsp SEQNO(表示順)を条件から外す。DBMENUを条件から外す。 jsp/GF2060/dbfileOut.jsp 出力項目に、COMMENTS 追加 jsp/GF2120/GFM0049.jsp 更新条件から、TABLE_NAME を外す。 jsp/GF2160/dbdefOut.jsp ファイルを出力するように変更。 5.7.2.2 (2014/01/24) [MainProcess 修正] MainProcess で、ログ出力と、標準エラー出力の両方とも出力していましたが、 標準エラー出力を停止します。 単に、ログを標準出力に設定した場合、2重に出力されているように見えるためです。 fukurou.process.MainProcess#run() SQL実行エラーを少し詳細に出力します。 fukurou.process.Process_DBCountFilter#action( final LineModel data ) { fukurou.process.Process_DBMerge#action( final LineModel data ) { fukurou.process.Process_DBWriter#action( final LineModel data ) { fukurou.process.Process_FileCopy#action( final LineModel data ) { fukurou.process.Process_Grep#action( final LineModel data ) { fukurou.process.Process_GrepChange3action( final LineModel data ) { fukurou.process.Process_GrepChangeExcel3action( final LineModel data ) { fukurou.process.Process_DBCountFilter#makePrepareStatement( final LineModel data ) fukurou.process.Process_DBMerge#makePrepareStatement( final String table,final LineModel data ) fukurou.process.Process_DBReader#init( final ParamProcess paramProcess ) fukurou.process.Process_DBReader#next() fukurou.process.Process_DBReader#makeLineModel( final int rowNo ) fukurou.process.Process_DBReader#createLineModel( final ResultSet rs ) fukurou.process.Process_DBWriter#makePrepareStatement( final String table,final LineModel data ) fukurou.process.Process_DBWriter#execSql( final String sql ) [DatabaseConfig 修正] 5.6.8.2 (2013/09/20) Tomcat8で、xmlURL が取得できなくなっている対策 で、 xmlURL 変数が、null の場合の再取得で、Tomcat7 の場合でも、WEB-INF/classes フォルダが ないと取得できないケースがあり、(以前より判っている)その場合は、 相対パスでも取れないため、xmlURL 変数の null チェックが必要でした。 それを追加します。 fukurou.db.DatabaseConfig( final String xmlfile ) private final String XmlFilename ⇒ xmlFilename に修正します。 final なので、大文字で始まる固定変数という事だと思うが、static final だけを 大文字(しかも、変数名すべてを大文字)にしているため、これは、変数名を変更します。 fukurou.db.DatabaseConfig.java [UserInfoのsetAttribute 戻し] 5.6.8.1 (2013/09/13) で、対応した、UserInfo のセット値が null の場合は、 処理しないロジックで、null をセットして、メモリ上からクリアするロジックが あると、うまく動作しない(互換性がなくなっている)状況が判りましたので、 以前と同じに、null もセットできるように変更します。 # UserInfo で、セットする値が null、またはゼロ文字列の場合、 # attribute変数に設定しない(DBへも書き込まない)ように変更します。 # これは、無駄なメモリやDB書き込みを減らすためです。 hayabusa.resource.UserInfo#setAttribute( final String key,final String value, final boolean save, final boolean common ) hayabusa.resource.UserInfo#dbLoad() 元は、エンジン内部で使っている変数の無駄な処理を止めるためのロジックなので、 それらをピンポイントで null 登録しない様に変更します。 (EDIT_NAME_*** , EDIT_VIEW_**** , LAST_REQUEST_**** , REPORT_DEFAULT**** , ) ※ すべてを対応したかったが、jspから登録したり、色々なので、とりあえず、EDIT_NAME_SELECTED_ のみ対応 hayabusa.resource.UserInfo#setSelectedEdit( final String guikey, final String editName ) [oracle.sql.*** 関係] JDBCドライバで、ORACLE独自の実装箇所を、出来るだけ、java API の範囲で記述し直します。 Oracle 12c の JDBCドライバを使用した場合、コンパイル時に、警告が出るので、早めに対応します。 なお、racle 12c の JDBCドライバ では、9i 関係のデータベースアクセスに支障が出るため、 当面は、11g の JDBCドライバを使用します。 http://docs.oracle.com/cd/E28389_01/web.1111/b60995/thirdparty.htm なお、この実装は、11.2.0.3のドライバ以降で有効です。 hayabusa/taglib/DirectWriteTableTag#executeCall( final Connection conn,final CallableStatement callStmt,final String[] args ) plugin/query/Query_JDBCArrayCallable#execute( final String[] args ) plugin/query/Query_JDBCErrMsg#execute( final String[] args ) plugin/query/Query_JDBCKeyEntry#execute( final String[] keys, final String[] args ) plugin/query/Query_JDBCPLSQL#execute( final String names,final String dbArrayType,final DBSysArg[] sysArg,final DBUserArg[] userArg ) 5.7.2.1 (2014/01/17) [ReplaceString バグ] ReplaceString$ReplaceData#isOverlap メソッドの結果が反転していたので、修正します。 これは、jdk1.6 で実行した場合、compareToメソッドが実行されず、結果、isOverlapメソッドも 実行されていなかったため、発見できませんでしたが、jdk1.7にすると、compareTo メソッドが 実行され、結果、isOverlapメソッドで、エラー判定されてしまいました。 fukurou.util.ReplaceString$ReplaceData#isOverlap( final ReplaceData other ) [Process_FileSearchのMD5 計算] HybsCryptography に、ファイルを引数に、MD5 を計算するメソッドを追加します。 これを使用して、バッチ系処理で、MD5 の計算結果を出力できるようにします。 Process_FileSearch に、useMD5 引数を追加します。 fukurou.security.HybsCryptography#encrypt( final String org ) fukurou.security.HybsCryptography#decrypt( final String hex ) fukurou.security.HybsCryptography#getMD5( final File input ) fukurou.process.Process_FileSearch#init( final ParamProcess paramProcess ) fukurou.process.FileLineModel#FileLineModel() fukurou.process.FileLineModel#FileLineModel( final boolean isLineCnt ) fukurou.process.FileLineModel#FileLineModel( final boolean isLineCnt,final boolean isMD5 ) fukurou.process.FileLineModel#FileLineModel( final LineModel model ) fukurou.process.FileLineModel#setFileVals( final int level, final File file ) fukurou.process.FileLineModel#getMD5() [UploadedFile のバグ修正] MultipartRequest で 5.6.5.3 (2013/06/28) に修正した箇所を、若干修正します。 修正箇所のコメントは付いていません。(5.6.5.3 のままです) ・RANDOM_KEY の生成で、nextInt( Integer.MAX_VALUE ) に変更。 これは、マイナスのファイル名は、若干嫌だったので、修正します。 ・String tempName = RANDOM_KEY + ・・・ の箇所を、 String uniqKey = RANDOM_KEY + ・・・ に修正。 これは、UploadedFile クラスの引数が、uniqKey になっているのと、 tempName は、いかにも、って感じなので、意味が通るように修正します。 UploadedFile の renameTo メソッドで、FileUtil.renameTo している箇所の 引数の並び順を間違えており、リネームできていませんでした。 hayabusa.servlet.MultipartRequest.java hayabusa.servlet.UploadedFile.renameTo( final String newName , final boolean useBackup )