今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

Java

springでJUnitテストを書くとtomcat起動時にClassNotFoundExceptionが発生する

ちょっとしたアルゴリズムの動作確認のために、JUnitテストを作成したら、tomcat 起動時に ClassNotFoundException が発生するようになってしまった。 WARN : org.springframework.core.type.classreading.AnnotationAttributesReadingVisitor - Failed to c…

Hibernateで更新するときにNonUniqueObjectExceptionが発生

Hibernateでデータを更新しようとしたら、NonUniqueObjectExceptionというのが発生した。 public Hoge update(Hoge hoge) { Session session = sessionFactory.getCurrentSession(); try { Hoge h = (Hoge)session.get(Hoge.class, hoge.getId()); hoge.setS…

SpringでJSON受信時に400エラーが返される問題

ブラウザからajax でJSONを送信したときに、サーバーから400エラーが返されてオブジェクトの追加や更新ができない問題が発生した。 サーバー側ではまったくログが表示されていないけど、ブラウザ側には400エラーが返されている。HTMLの中にはこんなメッセー…

HibernateでSession#update()してもDBに反映されない

Hibernateでエンティティを更新しようとしても、DBに反映されないので困ること20分ほど。 ぐぐててみたら、Session#flush()を呼べと書いてあった。 Session session = sessionFactory.getCurrentSession(); try { session.update(entity); session.flush(); …

warをデプロイしたらFileNotFoundExceptionが発生してWebアプリが起動しない問題

Spring MVC のプロジェクトで、プロジェクト名を右クリックして[Run As]-[maven build]を選択してターゲットで package を指定して実行。 生成された war ファイルを tomcat にデプロイしたら、起動に失敗した。 1 30, 2014 9:11:04 午前 org.apache.catalin…

SpringのEclipseプラグインのインストールでドはまりした

お客様からSpringフレームワークを指定されて、まずは動かしてみないとってことで、Eclipseにプラグインをインストールすることにした。使ってたEclipseはJuno。ここを参考に。。。≫[Java] Eclipse に Spring Tool Suite (STS) をインストールする | tekboyE…

slim3のインクルードしたJSPで文字化けしたときの対処方法

slim3で開発していて、header.jsp と footer.jsp を jsp:include タグでインクルードした。そして、header.jsp と footer.jsp の中に日本語を書いたら文字化けした。 Eclipse上保存しようとした時にISO-8859-1じゃ保存できんからエンコードを選べって言われ…

Android で Google Cloud Endpoint を使う時のデバッグ版とリリース版の Client ID を切り替える方法

先に書いた、Google Maps M2 API for Android では、デバッグ版とリリース版で同一の API key が使えたけ。だけど、Cloud Endpoint の Client ID を設定するところは、複数の SHA1 を書けるようになってないので、別々の Client ID を生成するしかない。 な…

Google Maps V2 の API key はデバッグ版とリリース版の両方に使える

AndroidアプリでGoogle Maps V2 API を使うには、AndroidManifest.xml の中に、API keyを記述する必要がある。 <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" /> デバッグ版とリリース版で API key を使い分けるにはどうすれば簡単にできるのかわからずにぐぐってたら、同一の API key でデバッグ版とリリー</meta-data>…

App Engine のデプロイができなくなったときの解決方法

数日前の話。Google App Engine にGAEアプリをデプロイしたんだけど、90%くらいのところでリトライばかりしてて全然進まなくなった。 しばらく放置したけど状況が変わらないので、スクリプトを中止して、最初からデプロイをやり直してみた。すると、「409 Co…

GCMの実装中のIllegalAccessExceptionに悩まされた件

AndroidでGCMを受け取るためのサービスGCMIntentServiceを実装して試しに動かした時に、IllegalAccessExceptionが発生してた。 java.lang.IllegalAccessException: access to constructor not allowedその少し上を見ると、 Could not find class android.app…

Failed to create secure container smdl2tmp1 でAndroidアプリをインストールできない

新しいAndroidアプリを作って、Android2.2.1の端末で実行しようとしたら、こんなエラーがでて実行できなかった。コンソールのキャプチャ画像。 こちらはLogCatの内容。 Failed to create secure container smdl2tmp1 Failed to create container smdl2tmp1 a…

Google Playのアルファ/ベータテストを使ってみた

Google Play Developer Console でAndroidアプリのアルファ/ベータテストができるようになってたので、使ってみた。To make a great app, it’s important to get feedback from users early and often. Google Play Developer Console lets you test your ap…

Viewを画面の一番下に配置する方法

OK/キャンセルとか保存など、画面の一番下にボタンを配置したい時がある。 そのような場合のレイアウトの書き方。 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > // 上の方に配置するViewを書く </linearlayout>

Listに要素を追加しようとしたらUnsupportedOperationExceptionだった

AndroidアプリでListViewに設定するAdapterに新しい要素を追加しようとしたところで例外が発生してた。Listの元をたどると、 List<Hoge> list = Arrays.asList(new Hoge[0]); ってやってた。 その先は確認してないけど、Arrays.asList()でList化したオブジェクトは</hoge>…

コマンドラインからGoogle App Engineにデプロイする方法

EclipseからApp Engine にデプロイしようとしても、エラーが発生してなかなかデプロイできないことがときどきある。 意地になって何度も繰り返しても、なかなかうまくいかなかったので、コマンドラインから実行する方法を調べてみた。画面から操作するのがめ…

Google Cloud Endpoint で JsonMappingException が出る場合の対処方法

entity クラスのフィールドに、独自のクラスを追加してたりすると、クライアント側から取得しようとした時にこの例外が発生する。独自のクラスがサーバーサイドだけで利用しているのであれば、単にクライアント側に送信しないように設定すれば、例外の発生を…

コマンドラインからGoogle App Engine にデプロイする方法

WebアプリをGoogle App Engine にデプロイしようと思って、Eclipseでプロジェクトを右クリックして[Google]-[Appエンジンへデプロイ]をやるけど、何度やってもエラーになってデプロイできなかった。 出まくるエラーはこちら。ログを参照しろって、どこにログ…

GoogleのMobile Backend Starterのデモを動かしてみた - その2

昨日に引き続き、GoogleのMobile Backend Starterのデモを動かしてみる。今回は Getting Started の次に書かれてある Adding Google Cloud Messaging to the Sample というのを試してみる。Google Cloud Messaging(GCM)というのは、リアルタイムにサーバー…

GoogleのMobile Backend Starterのデモを動かしてみた

いまどきのモバイル アプリケーション開発では「クラウドとの連携」が欠かすことができません。とはいっても、データベース アクセスやユーザー認証といった定番の機能を利用するためだけに毎回サーバーを自分で立てたりサーバー側のコードをひと通り書いた…

EclipseのAndroidプロジェクトでRクラスが生成されない件

昨日、ひさしぶりにEclipseでAndroidプロジェクトを作成したら、何も新しいコードを書いたわけでもないのにエラーが出てた。genの中にあるはずのRクラスが生成されていない。プロジェクトをクリーンしてビルドしなおしても生成してくれないし、res内のxmlを…

slim3で謎の404エラーに悩まされた件

たぶん、あんまり需要はないと思うけど書いとく。slim3でOAuthを使ったサービスを作ろうとしてた。OAuthを使った認証は前にも作ってるので、そこで作ったログイン関連のControllerクラスを新しいプロジェクトの中にコピーした。コピペで動いて楽勝なんて喜ん…

Slim3の開発でJettyのプロセスを停止する方法

EclipseでSlim3を使ったWebアプリを作ってる時に、Jettyを止めたくなる時がある。Jettyの起動直後であれば、コンソールビューの右側にある赤い■をクリックすれば止まる。 けど、JUnitテストなんかを動かすと、そのボタンは操作できなくなってしまう。そのよ…

Activityのソース巨大化を防止するには

Androidのアプリケーションを作っていると、Activityのソースが巨大化しやすい。その最大の理由はサンプルソースに有ると思う。世の中にあふれているサンプルソースとして書かれているコードのほとんど全部が、Activityのクラス内にコードを書いてしまってい…

GAEのDatastoreに保存したオブジェクトのIDは同じ値になることがある

今日、GAEのDatastoreに保存したオブジェクトの内容をチェックしようとしてびっくりした。 Datastore Viewerから参照してみたら、同じID/Nameが複数並んでた。 Keyはprimary keyだから同じ値になるはずがないのに、なんて思いつつ「id=????」をクリックしてE…

Slim3のServiceの初期化で無限ループしてStackOverFlowErrorが発生した

Slim3で複数のサービスを作ったけど、サービスがそれぞれ相互のデータを必要としていたために、それぞれでサービスのインスタンスを作った。 public class FooService { private FooService fooService = new FooService(); private BarService barService =…

変数のnullチェックを手抜きする方法

AからBを取得してBからCを取得して、を繰り返して最終的な値に辿り着く、みたいなことをやるケースって意外と多い。途中で何かの取得エラーがあった場合は、デフォルト値を返すって感じの。例えばWebアプリの場合。 Object default = DEFAULT_VALUE; HttpSes…

Servlet/JSPのデータをJavaScriptに渡す方法

サーバー側でsetAttribute()などでJSPに渡した値をJavaScriptでも使いたいときは、JSPで以下のようなコードを書けば可能。 <script type="text/javascript"> var hoge = '<%=request.getAttribute("hoge") %>'; </script> メッセージを国際化対応したいときはこんなコードで。 <script type="text/javascript"> var i18n = '<fmt:mess</script>…

JSONICでローカライズした日付データにエンコードする方法

JSONICは、デフォルトではDate型をlong値にエンコードする。この値をクライアント側のJavaScriptで取得しても、JavaScriptでは国際化対応が不十分なのでローカライズした日時の文字列に変換するのは難しい。 そもそもクライアント側で日時データをどうこうし…

JSONIC+Slim3+DatastoreでUnsupportedOperationExceptionが出るときの回避方法

エンティティクラスに com.google.appengine.api.datatore.Text型を使ったプロパティを追加したら、クライアント側からJSONを送信した時に、JSONICがUnsupportedOperationExceptionってのを出すようになった。 JSONICがDatastoreのText型なんて知らねーよ、…