2007-01-01から1年間の記事一覧

Order、Allow、Denyディレクティブ

Orderディレクティブの動作に誤解があったので忘れないようにメモしておく。 Deny,Allow デフォルトではこの順序。 アクセスはデフォルトで許可する。 Deny ディレクティブに合わないか、Allow ディレクティブに合うクライアントはアクセスを許可する。 つま…

Digest認証を設定する

ApacheでDigest認証を設定してみたところ次のようなエラーが発生した。 Syntax error on line 128 of /etc/httpd/conf/httpd.conf: Invalid command 'AuthDigestFile', perhaps misspelled or defined by a module not included in the server configuration…

PostgreSQLとMySQLの性能比較

「PostgreSQLは遅い」は本当か?:OSSデータベース比較 - ZDNet Japan

先方参照で文字列を抽出する

package learning.regexp; import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexpExample { public static void main(String[] args) { Pattern pattern = Pattern.compile("<a href=['\"]([^'\"]+)['\"]>", Pattern.CASE_INSENSITIVE); Matcher matcher</a>…

プロパティセットをXMLから読み込む

SE5では、プロパティセットをXMLから読み込むことができるらしいので試してみた。 いちいちnative2asciiしなくてよいのは便利かも。 XMLファイル <properties version="1.0"> <comment>コメント</comment> <entry key="Hello">World!</entry> <entry key="こんにちは">世界!</entry></properties>

ICU4Jを使う

半角を全角にするライブラリがないか探していたらICU4Jというライブラリを見つけたので使ってみる。まずは以下のサイトからダウンロードする。 IBM - Japan で、以下のJarをクラスパスへ含める。 icu4j-3_6.jar icu4j-charsets-3_6.jar xliff-3_6.jar Sample…

JSONPって?

オリジンサーバ*1ポリシー JavaScriptは、ネットワーク経由で転送できる実行可能なデータであり、プレーンなテキストファイルなどと比べると潜在的な危険性がある。 その為、ブラウザのベンダは、JavaScriptをサンドボックス内で実行し、ローカルファイルへ…

更新のメモ(2)

Hibernateの実装は、デフォルトでは全ての列に対して更新を行なってしまう。 サンプル package sample; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import java…

更新のメモ(2)

更新のメモ

共有ロックと排他ロック

DB H2

H2では、共有ロック (shared locks) と排他ロック(exclusive locks)の2種類のロックが存在する。共有ロックは、SELECT で取得される。 排他ロックは、SELECT 〜 FOR UPDATE 、INSERT、UPDATE、DELETE などで取得される。 共有ロックが取得されている場合 SQL…

Lockのメモ

JPAでは、EntityManager.lock(Object, LockModeType) でLockを取得できるらしい。 LockModeTypeは、WRITEとREADが用意されている。とりあえず、次のようなコードでロックの動作を確認をしてみる。 package sample; import javax.persistence.EntityManager; …

ロックタイムアウト

DB H2

JPAでロックの確認をしようとしたが、H2は1秒でロックタイムアウトするようデフォルト値が設定されている為、確認できない。 次のコマンドを実行し、5秒待つように変更した。 SET DEFAULT_LOCK_TIMEOUT 5000; DEFAULT_LOCK_TIMEOUT以外にLOCK_TIMEOUTもある…

更新のメモ

明示的に更新メソッド(EntityManager.merge())を呼び出さない更新と、更新メソッド(EntityManager.merge())を呼び出す更新の動作確認。 EntytyManager.merge() を使用しない更新(関連テーブル) ← いや削除・・・ package sample; import java.util.Arr…

Cascadeのメモ

CascadeType.PERSIST, CascadeType.REMOVEの確認 MovieのCascadeTypeを次のように変更し、動作確認をしてみた。 cascade=CascadeType.ALL, ↓ cascade={CascadeType.PERSIST, CascadeType.MERGE}, CascadeExSample.class package sample; import javax.persis…

EntityManager.remove()のメモ

削除の動作を確認しようと次のようなコードを実行したところ、ObjectDeletedExceptionという例外がthrowされた。Remove.class package sample; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persi…

ManyToManyのメモ

テーブル create table movie ( id identity, name varchar(50), primary key (id) ); create table actor ( id identity, name varchar(50), primary key (id) ); create table movie_actor ( movie_id bigint, actor_id bigint, primary key (movie_id, ac…

GeneratorType.SEQUENCE の指定方法

次のように指定していたが間違いだった。 @Id(generate=GeneratorType.SEQUENCE, generator="id_seq") public long getId() { ・・・ } 正しくは・・・ @SequenceGenerator(name="SEQ", sequenceName="id_seq") public class UserInfo { ・・・ @Id @Generat…

GeneratorType.SEQUENCE の使い方

GeneratorType.SEQUENCE の使い方が間違っていた為、忘れないようにメモ。

オープン・クローズドの原則(OCP)

OCP:The Open-Closed Principle ソフトウェアの構成要素(クラス、モジュール、関数など)は拡張に対して開いて(OPEN)いて、修正に対して閉じて(CLOSE)いなければならない。 拡張に対して開いているとは? モジュールの振る舞いを拡張できるということ…

リスコフの置換原則(LSP)

LSP:Liskov Substitution Principle 派生型はその基本型と置換可能でなければならない リスコフの置換原則は、継承に関する原則である。 継承は、OCPの要である「抽象」と「ポリモーフィズム」をサポートする鍵となるメカニズムである為、OCPと関係のある原…

単一責任の原則(SRP)

SRP:The Single Responsibility Principle クラスを変更する理由は1つ以上存在してはならない。2つ以上存在すると何が良くないのか? 通常、仕様変更が発生すると、クラスの役割が変化する。 このとき、クラスの役割が1つであれば、どのように変化したのか…

ソフウェアの腐敗

ソフトウェア開発において、もっとも不確定な要素は仕様である。 最初の設計時点では想定していなかった仕様変更により、設計はじわじわと劣化していく。 なんとか変更に対応したとしても、初期に設計思想に違反している為、こうした変更が積み重なってくる…

ソフトウェアの設計とは何か?

ソフトウェアシステム設計の主要なドキュメントはソースコードである。 ソースコードの構造を表現するダイアグラムは、設計の補助に過ぎず、設計そのものではない。 URLなどのダイアグラムは設計の一部であるが、結局のところそれを具現化したものはソースコ…

アジャイル開発の奥義

アジャイルソフトウェア開発の奥義作者: ロバート・C・マーチン,瀬谷啓介出版社/メーカー: ソフトバンククリエイティブ発売日: 2004/06/30メディア: 単行本購入: 3人 クリック: 236回この商品を含むブログ (148件) を見るという本を購入した。 とりあえず、…

ナチャラルキー(自然キー)とサロゲートキー(代替キー)

DB

テーブルの主キーを決める場合、ナチャラルキー(自然キー)とサロゲートキー(代替キー)というアプローチがある。ナチャラルキーとは、システムの外部から入力される社員番号のような業務上意味のあるキーであり、サロゲートキーとは、単にレコードをユニ…

ナチャラルキー(自然キー)とサロゲートキー(代替キー)

知り合いがサロゲートキーについてどうこう言ってたので調べてみた。

JPAで複合キーを使う

メモだけ。 package sample.jpa.domain; import javax.persistence.Embeddable; @Embeddable public class EmployeePK implements Serializable { private long companyId; private long employeeId; public EmployeePK() { } public long getCompanyId() { …

エンティティのライフサイクル

エンティティには、New、Managed、Detached、Removedという4つの状態があり、永続コンテキストへ関連付けられているManaged、Removedと関連付けられていないNew、Detachedに分類できる。 状態は、EntityManagerのメソッドの呼び出しなどで上記のように状態遷…

キーワード

マッピング JavaクラスとRDBのレコードをマッピングする。 マッピングは、アノテーションやXMLで行なう。 EntityManager RDBへのアクセスは、EntityManagerというクラスの提供するメソッドを介して行なう。 参照系) find()、getReference()、createNamedQue…

JPA(Java Persistence API)

JPA(Java Persistence API)は、Java EE 5のJSR 220で標準化されたEJB3.0の一部であり、ORMのJava標準仕様です。 仕様である為、実装は別に存在し、現時点では次の実装が有名。 TopLink Essentials Hibernate OpenJPA