サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
CES 2025
da-yoshi.hatenadiary.org
両者を触ってみたことのある人なら解ると思いますが、この二つのテーブル命名規約は結構似ています。サロゲートキーを主キーとすることを推奨したり、外部キーの命名方法だったり、排他制御の為のバージョンカラム指定だったり。ただ、JPAよりもRailsのActiveRecordの方が更に規約が厳しくて徹底しています。またテーブル名を複数形、モデルクラスを単数系にするという独自の規約もあるので、一見JPAの規約とは互換性が無いようにも思えます。しかし、RailsもJPAも無理をしない形で、規約を共有することも十分可能です。同一DBにJPAとActiveRecordの双方でアクセスするような要件にもし出会ったら、この両者の規約共有の検討が必要になるかもしれません。 というわけで、ちょっとした例を考えてみました。まずはMySQLで、categoriesとcontentsという二つのテーブルを作成します。Ra
HTML5関連本のドラッグ&ドロップサンプルをjQueryを使う形に置き換えて実行しようとしたとき、jQueryのbindを使うとdataTransferプロパティがイベントから取得出来ない現象が起こりました。原因は、わかってしまえば単純で、jQueryのイベントハンドラに渡されるeventオブジェクトはjQueryがブラウザ互換性の為に作成した独自オブジェクトだからでした。HTML5等で新たに追加されたプロパティにアクセスするには、大元のeventオブジェクトを取得する必要があります。 ググってみたところ、どうやらjQueryのevent.originalEventで取得できるみたいです。 試しにドラッグ&ドロップのサンプルをjQueryのbindを使う形に置き換えて、このoriginalEventを使ってみたところ、IE8、FF3.6、Chrome6、Safari5で動作させることがで
昨日の記事 http://d.hatena.ne.jp/da-yoshi/20100722/1279811055 に対してコメントいただきました。 http://d.hatena.ne.jp/da-yoshi/20100722/1279811055#c1279857804 window.onhashchangeというそのものズバリのイベントハンドラがあるのですね。 IE8については、HTML5だけではなく、XHTML1.0やHTML4.01の標準モードでも動作しました。Firefox3.6でもChrome5でもSafariでも動作しますね。これなら十分採用できます。ちょっと簡単なHTML書いてみました。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loo
最近、初期画面からの遷移を全てAjaxで行うアプリを作る機会がありました。こういうアプリの標準的な構築手法を調べてみたところ、どうやらGmailがいちばんの手本のようです。 最近のRoR系FWだと、アプリのURLは コントローラ名/メソッド名/ID または コントローラ名/メソッド名/key1/value1/key2/value2 となるのが殆どだと思います。GETのパラメータをURLに置き換えて、URLで状態を定義するという手法です。これは通常のWebアプリの場合は有効ですが、Ajaxアプリはサーバに対してURL遷移を行わないので、この手法は使えません。 Gmailの場合、画面ごとに画面名やパラメータをリンクのハッシュに付加していました。 受信トレイ https://mail.google.com/mail/?hl=ja&shva=1#inbox 全てのメールの2ページめ https:/
以前からJSR-330(Dependency Injection for Java)を勉強しようと思っていて、何かサンプル的なものがないか探していたのですが・・・結局のところ、JSR-330をいちばん手っ取り早く覚えられるのはJSR-299(Contexts and Dependency Injection for the JavaTM EE platform)略してCDIのようです。 てなわけで、CDIのRIであるJBoss Weldを少し触ってみました。 http://docs.jboss.org/weld/reference/1.0.0/en-US/html/index.html のWeldのドキュメントが詳しくてとても解りやすいです。 読んでいく中で興味を引かれたのが、CDIのProducer Methodという機能。これは大雑把に言うと、管理対象Bean上で、気軽に他の管理対象B
久々の日記です。 EclipseLinkのJPA2.0の実装具合を最近のGlassFish V3を動かしてチェックしていたのですが、b67になってようやく基本的な機能が実装されたようです。なので、簡単に動かしてみました。動作環境はGlassFishV3-b67、DBはMySQLです。 まずはテーブル定義。単純なオーダ受注用のテーブルです。 -- phpMyAdmin SQL Dump -- version 3.2.2 -- http://www.phpmyadmin.net -- -- ホスト: localhost -- 生成時間: 2009 年 10 月 13 日 11:54 -- サーバのバージョン: 5.0.86 -- PHP のバージョン: 5.3.0 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; -- -- データベース: 'testdb' -- -
Struts1.2.9から追加されたEventDispatchActionは、submitボタンのname属性(html:submitのproperty属性)を見てActionのメソッドを決定してくれるので、Strutsで1画面1Actionの形態がかなり取りやすくなりました。最近のWebフレームワークの方向性にも通じるものがあるので、今の仕事でもこのActionを主に利用しています。・・・ただし、Springとの組み合わせで使う場合に落とし穴がありました。 SpringはProxyベースのAOPを採用しているので、オブジェクト内で自分のメソッドを呼んだ場合は、アスペクトが適用されません。なので、executeメソッド内から実行メソッドが呼ばれるDispatchActionでは、AOPが適用されないことになってしまいます。Seasar2なら何の問題も無く使えるので、ついつい同じ感覚で考えて
自分が忘れたときの為にメモ。 Controllerのpaginateを利用するとき、細かな条件は$this->paginateフィールドに定義してやるとOK。形式はfindに渡す定義と同じ。 CakeのModelのJOIN定義は、SELECT文発行するときにあまり柔軟に使えないのが難点ですが、このパラメータにjoinsという名前で定義してやれば、柔軟に選択することが出来るようになります。 $this->paginate['joins'] = array( array( 'type' => 'INNER', 'table' => 'users', 'alias' => 'User', 'conditions' => 'Product.user_id = User.id' ), array( 'type' => 'LEFT OUTER', 'table' => 'companies', 'al
http://bassistance.de/jquery-plugins/jquery-plugin-treeview 仕事で使う機会があったのでメモ書き。 jQueryのプラグインで、JavaScriptによる開閉可能なツリー表示を行うライブラリです。開閉時にAjaxで動的に子階層を取得することも可能です。 基本的にはjQuery UI系のライブラリと同じで、対象ElementをID指定して追加されたメソッドを実行すればOKです。 jQuery treeViewの場合、ul、liタグで記述した階層一覧のルートのulタグを指定して $("#example").treeview({}); を実行します。ドキュメントだと引数は無くてもいいとなってますが、Ajax機能を使うときにバグがあるみたいなので、空のオブジェクトリテラルを渡しておくといいです。これで階層一覧がツリー表示されます。 これだけ
ここ一ヶ月ほど、CakePHPを使ったシステムの仕事をしていました。その中で調べたり作ったりしたものを忘れたときの為にメモ。 まずは、簡単なマスタメンテ画面をScaffold作成ソースをベースに作成したのですが、どれも似たようなソースになるので、できるだけ一つのクラスにまとめられないか検討してみました。まずは、Controllerクラスから。 <?php class AppController extends Controller { } class ModelController extends AppController { var $helpers = array('Html', 'Form', 'Time'); function __construct() { parent::__construct(); $this->indexDataName = strtolower(subs
今までJavaのRESTful Webサービス(JAX-RS)の実装としてJerseyを色々調べてきたのですが、このJerseyにはSpringとの連携機能はあるものの、EJB3との連携機能が存在しません。同じJAX-RS実装であるJBossのResteasyを調べてみたところ、こちらはSpringに加えてEJB3との連携機能があるようです。具体的には、EJB3のSessionBeanをそのままJAX-RSのResourceクラスとして登録出来るみたいですね。これなら、Springを使わなくてもJPAや宣言トランザクションを利用することが出来ます。というわけで早速動かしてみました。動作環境はJavaSE6 + JBoss5 CR2です。今回、クライアント側にSilverlightを使ってみたので、Windows環境で動かしました。 まずは今回JAX-RSで扱うリソースにアクセスするJPAの
最近の仕事では顧客側が当然のように画面機能にRIA的要件を求めてくるようになりました。私個人はJavaScript本体やjQueryの勉強などをやってきたので、こういった要求にも何とか応えられているのですが、サーバサイドJava開発プログラマーとしてアサインされた開発者の人達には、こういったクライアント機能の実装が苦手な人が結構多いように感じています。こちら側が基盤機能としてのJavaScriptライブラリを提供しても、うまく使いこなせなかったり、JavaScriptの基本的なDOM操作が出来ない開発者が多いのです。 サーバサイドJava開発では、長らくJavaScriptはオマケ的な扱いを受けてきて、あまり真面目に勉強してこなかったJava開発者は多いと思います。でも、もうそれでは顧客要求に応えられなくなりつつあります。JavaScriptを避けたとしても、結局はFlex・Silverl
ブログのキーワード等で色々な人の考えを読んだ限りでは、Hibernateは複雑で使いにくいという人が多いし、JPAは微妙だと言う人が多いと感じています。それは間違いではないと思います。SQLを発行したいという目的に対しては、JPA・Hibernateは複雑すぎますし、SQLベースのORMに比べてSQL実行処理が使い易いわけではありません(特にJPAのSQLの使い辛さは致命的です)。CRUD処理ではSQLをほぼ自動発行できますが、そのレベルの処理ならば、今はどのORMも標準機能として持っています。 ではこれらのFWは要らないものなのでしょうか? 自分はたまたま仕事上でHibernateを複数回使い、その特長が最近になってようやく解ってきました。たしかに複雑で、初心者にとって敷居の高いFWです。Entityの状態変更とかLAZYロードとか、よく解ってないとすぐにハマってしまいます。 でもその一
http://d.hatena.ne.jp/higayasuo/20080613/1213326209 ひがさんもブログの中で書かれていますが、Spring2.5は生産性を上げる為の取り組みをかなり行っているので、以前のようにXMLヘルになることはありません。設定ファイルだけで見ればSeasar2よりも記述量は少ないくらいです。 例えばコンポーネントの自動登録。現在のSpringには、検索元となるパッケージ名とクラスの検索パターンを指定すれば、コンポーネントを自動登録してくれる機能があります。 http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-scanning-filters <beans ...> <context:component-scan base-package="org.
前回(id:da-yoshi:20080429:1209403828)のJersey拡張はあまりにも強引過ぎてお試し以外には使えそうも無いので、もうちょっと真面目にJerseyのAPIを調べてみました。 JAX-RS仕様に基づくResourceクラスのインスタンス化を受け持つインターフェイスとして、Jerseyにはcom.sun.ws.rest.spi.resource.ResourceProviderが定義されています。何の指定もしなければ、このインターフェイスの実装であるPerRequestProviderが使用されます。 com.sun.ws.rest.spi.resource.ResourceFactoryアノテーションをResoureceクラスに定義すれば、独自のResourceProviderを定義できます。でもいちいちクラス毎に設定するのは面倒なので、デフォルトの設定をJer
前回、HibernateのLAZYロード問題をClassTransformerによるLoadTimeWeavingで解決することが出来ました。実行時にClassデータを拡張するLoadTimeWeavingに関しては、今まではあまり積極的に使おうとは思っていなかったのですが、Hibernateの件によって、Weaving環境が確立されている場合は非常に強力な選択肢に成り得るんだということを実感しました。 そこで、Springを調査するときにスルーしていたAspectJのLoadTimeWeavingに次は挑戦してみようと思います。 id:da-yoshi:20080511:1210486860の日記ではSeasar2を利用してJAX-RS JerseyのResourceクラスに対してトランザクション機能を追加しました。同じことを今度はSpring+AspectJを使ってやってみようと思いま
現在Hibernateを仕事で使っているのですが、またまたレガシースキーマに対応しなければいけなくなってしまいました。複合主キーは今回@IdClassを使って定義しました(JPQLの記述を少しでもSQLに近づける為)。DBA担当にお願いしてバージョンカラムを定義してもらい、楽観的排他制御とmerge処理での登録・更新自動制御の挙動を確保。これで何とかなるかな・・・と思っていたのですが・・・ 複合主キーなだけあって、主キー同士の結合が大量に存在していることが判明。双方向1対1だけでなく、多対1の結合でもLAZYロードが効かないパターンが頻発してしまいました。このままではまずい・・・というわけで、再度HibernateのLAZYロード機能について調査してみました。 HibernateのLAZYロードには2パターンあります。デフォルトのモードはPROXYモード。これはLAZYロード設定時に関連E
前回までで、Hibernate EntityManagerとの連携部分はだいたいわかったので、次はSpringのBean設定方法について学習しています。最近のSpringはアノテーションによる設定が主流のようですので、それを主体に調べてみました。 今回の例は、StrutsのActionにServiceオブジェクトをDIし、ServiceオブジェクトでEntityManagerを利用する、というもの。Serviceオブジェクトの利用メソッドにはトランザクションをかけます。 まずはstruts-config.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "htt
初めてSpringを使ったシステム開発を経験中なのですが、ここ数日触っていて感じたことがこれ。 JavaEE環境上でSpringを使えば、EJB3の代替として非常に便利に使うことが可能です。context:component-scanタグによるコンポーネント自動設定は、アノテーションの他にも正規表現などを使って柔軟な定義が可能なので、EJB3的なアノテーション前提の設定も可能だし、Seasar2.3のAutoRegister的な設定もできます。最初にパッケージとクラスの命名規約を決めて、それぞれの自動登録とAOP設定が済めば、Springでも設定ファイルレス開発は可能です。 自分が感じるSpringの欠点は、トランザクションを独自インターフェイスで行うところですが、それもJTAを前提に定義すれば欠点ではなくなります。tx:jta-transaction-managerタグを一個書くだけで、
前回に引き続き、今度はTomcat上でSpring+Hibernateの連携を調べていた・・・のですが、どーも、Springのトランザクション機能が気に入らない・・・Seasar2によるいつでもどこでもJTAトランザクション環境に身も心も染まってしまった今、今更JDBCトランザクションとかやりたくないです。Springは自身が提供するTransactionインターフェイスによってその違いを吸収するって謳ってるけど、標準APIを独自フレームワークがラップして隠してしまうのは、やっぱり根本的におかしいと思うし、JPAやHibernateは自身でJTAと連携するのでこういう隠蔽方法とは相性が悪いです。 というわけで、結構有名な方法だと思うのですが、S2JTAを利用してSpringのJtaTransactionManagerとHibernateEntityManagerをそれぞれ連携させ、Java
4月から再びJavaの仕事をやることになったので、開発環境を再度調査しています。 id:da-yoshi:20070421:1177143777の日記で、Maven2 Eclipse PluginによるWTPとの連携を調べましたが、今回改めて調べたところ、より便利になってることがわかりました。 今回書いてみたpom.xmlはこんな感じです。次の仕事がStruts+Spring+Hibernateのシステムなので、この3つのFWをWTP上で使う組み合わせを書いてみました。 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 htt
今年に入ってからPHPの仕事をやってます。最近ネット上ではフルボッコ状態だったPHPですが、たしかに言語だけ見ると同意する部分大ですが・・・、でもフレームワークの方はRailsより後発のFWが多い分、調べているとなかなか面白いです。Railsに比べて実行環境の面では安心して使える点も魅力です。 PHPもJavaと同じくフレームワークが乱立しており混沌とした状況にありますが、その中で今回は、本命と言われるZend Frameworkを調べてみました。Railsに比べて各機能の独立性が高く、デフォルトの規約が少ない分個別機能だけを簡単に利用することが出来ます。反面、無設定の状態ではいちいち機能を呼び出してやらないと使えないことが多く、無駄な記述が増えてしまうのが欠点でしょうか。・・・ただ、拡張性が高いので、比較的簡単な設定で規約前提の挙動にすることも十分可能です。 というわけで、Zend Fr
JIS X 0213ではUNICODEの補助文字が一部で使われています。VistaやMac OSX、またはJIS2004対応フォントをインストールしたXpなど、この補助文字が入力可能な環境はこれから徐々に増えていくと思われます。結局、いつかはシステム側も対応しなくてはいけなくなるでしょう。だったら今からプログラマーはUNICODE補助文字を意識した文字列操作を記述するよう心がけておくべきなのではないかと考えます。データベースとロジック側が対応しておけば、後は補助文字の利用可否はフィルター等で別途管理すればいい訳ですから。 というわけで、自分がよく使う言語であるJavaとJavaScriptでの文字列操作を確認してみました(とりあえず動けばいいというレベルですが・・・)。まずはJavaScriptから util.js var StringUtil = {}; StringUtil.lengt
以前からUnixマシンが欲しかったのと、自分のWindowsノートがVGA出力にトラブることが多いのとで、GW期間を利用して思い切ってMacに移行することにしました。ちなみにMacの知識はゼロです・・・ 買ったのはMacBookの黒。iPodと色を合わせたかったので・・・ 以下、覚え書き&ハマったところ等 WinマシンのThunderbirdからMacのThunderbirdに移行するときは、プロファイルのMailディレクトリ配下をコピーすればOK・・・と聞いたんだけど、移行したThunderbirdでメッセージフィルタの振り分けが失敗してしまいました。「〜フォルダが見つからない」ってメッセージが出るので、FinderでMailディレクトリを見てみたところ、コピーしたフォルダがUNIX実行ファイルと認識されてしまっていました。Thunderbird上で新たに作ったフォルダは書類として認識さ
近所なので行ってきました。 13:00に着いたら1階から4階まで広場前はギッシリ人が集まっていました。会場のアナウンスだと1000人来てたそうです。一般客が多そうでした。子供や女性も結構見かけました。自分は2階の正面の方で見てました。 チョコレイト・ディスコ (MC) コンピューターシティ エレクトロ・ワールド (MC) ポリリズム 途中にMCを挟みながらの進行。3人だけでトークしてました。最初のMCの時点で、切り込み隊長あーちゃんが泣き出してしまって、ちょっとグダグダな展開。4階まで埋まったお客さん達を何度も見上げて眺めていたのが印象的でした。 自分は生ライブはおろか、3人が動いてる映像もほとんど見たことがなかったのですが、第一印象は「予想外にダンス上手い」ってことでした。振り付けはかなりキモカワイイのですが(笑)、それをしっかりしたダンスでこなすのがかなり意外でした。自分の位置からは、
Maven2をなかなか覚えきれずにいる自分ですが、最近少しずつですが日々のプログラミングにも使えるようになってきました。 近頃挑戦しているのが、Maven2でwebアプリのプロジェクトを作成して、Eclipse WTPのプロジェクトに変換するって方法。 たとえばS2Hibernate-JPAを使ったWebプロジェクトを作ってみようと思ったら・・・ mvn archetype:create -DgroupId=examples -DartifactId=testweb -DarchetypeArtifactId=maven-archetype-webapp これでwebプロジェクトを作成。次に、作成されたpom.xmlに修正を加えます。 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org
Tomcat6(Servlet2.5)のDI機能は、何度か日記に書いたとおり、JNDIを使ってます。InitialContextを使わなくともフィールドに欲しいコンポーネントをインジェクションしてくれるのは便利です。・・・がしかし、DIコンテナ環境に慣れてしまった今、今更server.xmlにちまちまとインジェクション対象コンポーネントを書く気にはなれません。ですが、ServletはDIコンテナの管理外に存在するので、このままではServletだけがDI環境から取り残されてしまいます(というか現にそうなってます)。Servletを何とかもっと簡単に使う為には、やはりDI機能をDIコンテナにお任せしたいものです。 ・・・というわけで、id:da-yoshi:20070209#1170971160の続きを考えてみました。 まずは、org.apache.catalina.Contextインターフ
ちょっとハマったのでメモ iOS5を入れたiPhoneで、iCloudのリマインダーをオフにするとリマインダーの入力ができなくなるという問題が発生。 メールアカウント等でExchangeを設定していた状態でiOS4からアップデートした場合、どうもExchangeクライアントが内部的にリマインダーとも同期をとるような設定になるっぽい(同期対象に表示されるけど、アカウント編集画面ではリマインダーは出てこない) 一度Exchangeのアカウントを削除して、再度アカウントを設定すると、リマインダーが正常動作するようになりました HTML5の仕様にHistory APIなるものがあるそうで、Ajax通信等で画面遷移を行わないけど、URLは変更する・・・みたいな用途に使うんだそうです。GitHubで既に使われており、現状「#!」を使ってhashchangeによってAjax遷移するような手法(twitt
次のページ
このページを最初にブックマークしてみませんか?
『TYAGE EMOTION』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く