制約の解除
あまり使わないだろうシリーズ。
まぁ動いちゃってる環境で定義変更が起きた時ぐらいか。
制約を確認する SELECT * FROM user_constraints; ※↑制約名を検索するための条件がLONGなので面倒なことこの上ない select * from USER_CONS_COLUMNS; 制約を削除する ALTER TABLE テーブル名 DROP CONSTRAINT 制約名; 制約を無効化する ALTER TABLE テーブル名 DISABLE CONSTRAINT 制約名; 制約を有効化する ALTER TABLE テーブル名 ENABLE CONSTRAINT 制約名;
■リンク
ORACLE MASTER SILVER(ORACLE入門)
http://www.geocities.co.jp/SiliconValley-Bay/1428/oracle/oracle_oracle.html
Oracle のデータ型
http://www.jjon.com/oracle/OracleSilver/datatype.html
Oracle管理者のためのSQLリファレンス > 表の確認/作成/変更/削除
http://www.atmarkit.co.jp/fdb/ref/ref_oracle/table.html
JSTL解決
2時間ぐらいして判明。
JSTL1.1のtaglib定義をservel2.3で使用していたダケダッタ。
1.0のtaglib定義に書き換えてみたら動いたのだ
というかあまりに微妙に変わっていてキガツカンカッタ。
それぞれ以下のように修正*1。
taglib
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> ↓ <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> ↓ <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
実行結果
<c:out value="${hoge.hogeValue}"/>
↓
HOGEHOGE
Tomcat5.0.28のサンプルアプリがservlet2.3で書いてあるからいかんのだよ!
追記
途中ででたException
StandardWrapperValve[jsp]: サーブレット jsp のServlet.service()が例外を投げました org.apache.jasper.JasperException: /index.jsp(12,1) TLD又はタグファイル中のattribute指示子に従って属性valueはどんな式も受け付けません at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39) at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409)
これはservlet2.4+JSTL1.0にしてしまったときにでる(らしい)*2。
■リンク
JSTL入門
http://www.oklab.org/java/jstl.html
Taglibs(Standard Taglibs:coreタグライブラリ)
http://www.javaroad.jp/opensource/js_taglibs4.htm#out
タグライブラリとJSP
http://www.wakhok.ac.jp/~tomoharu/web2004/text/index_c5.html
Standard Taglib トピックス
http://four.sssg.org/documents/jajakarta/taglibs/topics/docs/core_topics.html
JavaServer Pages Standard Tag Library 1.1 Tag Reference
http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html
JSTLちょこっとメモ
http://www.programmers-paradise.com/java/jstl.html
Java 開発の実用問答集
最近のJ2SEの流行を解説している本。
J2SEの経験が1年ぐらいたってから読むと分かりやすいかもしれない。
新人あたりがいきなり読んでも次の日には.netに行きたくなるかもしれない。
別段一問一答になっているわけではないか。
・・・まぁ誰かが持っていたら読んでもいいぐらいか?
- 作者: 古川正寿
- 出版社/メーカー: 翔泳社
- 発売日: 2005/12/07
- メディア: 単行本
- 購入: 1人 クリック: 3回
- この商品を含むブログ (7件) を見る
キャッシュの設定〜警告ログの削除
前回*1の続き。
以下のログを消したい。
WARN (Configurator.java:125) - No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath: file:/hoge/ehcache-failsafe.xml
このログを出しているのは、ehcache.jarにあるnet.sf.ehcache.config.Configuratorというクラス。
さっそくダウンロード*2・・・と思ったらCVSに接続しないといけないらしい。。
どうもEclipse経由でプロキシが使えないので、Browseを使って単品で落としてくることに。
・・・メンドイのでそのファイルだけ落としました('')
該当個所(適当に省略)
public class Configurator { private static final String DEFAULT_CLASSPATH_CONFIGURATION_FILE = "/ehcache.xml"; private static final String FAILSAFE_CLASSPATH_CONFIGURATION_FILE = "/ehcache-failsafe.xml"; public void configure(final Object bean) throws Exception { final SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); final BeanHandler handler = new BeanHandler(bean); URL url = getClass().getResource(DEFAULT_CLASSPATH_CONFIGURATION_FILE); if (url != null) { if (LOG.isDebugEnabled()) { LOG.debug("Configuring ehcache from ehcache.xml found in the classpath: " + url); } } else { url = getClass().getResource(FAILSAFE_CLASSPATH_CONFIGURATION_FILE); if (LOG.isWarnEnabled()) { LOG.warn("No configuration found. Configuring ehcache from ehcache-failsafe.xml" + " found in the classpath: " + url); } } parser.parse(url.toExternalForm(), handler); } }
"/ehcache-failsafe.xml"というのはjarに含まれているファイルなので、これをそのままプロジェクトのクラスパス直下(つまり/WEB-INF/javaなり/WEB-INF/srcということか?)にコピーして"ehcache.xml"にリネームすれば解決。
なんだ、それだけか・・・。
ついでにEHCacheとはなんぞやというと*3、
EHCacheは、シンプルな構造で高速に動作するJava用のメモリ・ディスクキャッシュ機構です。
(略)
Hibernate 2.1の組み込みキャッシュとして動作する
ということらしい。
まぁキャッシュが遅い、ということになったら内容は精査すればよいのか。
cf.
↓Hibernateとの関係
http://wiki.bmedianode.com/Hibernate/?EHCache
↓読み難い公式
http://ehcache.sourceforge.net/
↓日本語に訳してくださった神
http://www.moriwaki.net/wiki/index.php?%5B%5BEHCache%5D%5D
hibernateキャッシュ戦略・・・の書き方
キャッシュ戦略"read-only"*1を設定してみた。
<hibernate-mapping> <class name="hoge.Hoge" table="HOGE"> <cache usage="read-only"/> (略) </hibernate-mapping>
起動すると以下の警告がでる。
WARN (CacheFactory.java:36) - read-only cache configured for mutable: hoge.Hoge
理由が良く分からなかったのでソースを調べる。
public final class CacheFactory { (略) if ( usage.equals(READ_ONLY) ) { if (mutable) log.warn( "read-only cache configured for mutable: " + name ); ccs = new ReadOnlyCache(); } (略) }
つまり記述漏れということだ。
<hibernate-mapping> <class name="hoge.Hoge" table="HOGE" mutable="false"> <cache usage="read-only"/> (略) </hibernate-mapping>
これで起動時の警告が一つ減った。
すっきり〜。
mutableってのはなんじゃいというのはドキュメントに。
mutable="false" と指定された更新不能クラスは、 アプリケーションから更新や削除をできません。 これにより、Hibernateのパフォーマンスが少しだけ良くなります。 *2
・・・弱気だ。
show_sqlの出力制御
hibernateの「3.5. オプションの設定プロパティ」*1のうち、「hibernate.show_sql」をlog4jで制御できるかと思ったのだが。
net.sf.hibernate.impl.BatcherImpl*2
private void log(String sql) { sqlLog.debug(sql); if ( factory.isShowSqlEnabled() ) System.out.println("Hibernate: " + sql); }
げふ、ダメじゃん。
「3.6. ロギング」*3では「パフォーマンスの問題を探すときこれが最初のステップとなります。」と書いてあるので、遅いなぁと思ったらまたtrueにしてチェックすればよかろうという結論。本番で標準出力にばしばしログを出されるのはタマラン。