プログラミングの最近のブログ記事を表示しています。
過去のブログ記事については下部のリンクより参照ください。

思うように書けない。

最近は久々に技術ブログっぽくなってきました。先進かつ有用なネタは全くないのだけど。
(釣り目的でこのサイトに訪れている方には申し訳ないのだが。)

前の記事に書いた通り、そのサイトはGoogle App Engineで動かしているので、処理には少し気を使います。
とはいえ、弱小サイトなので無料運用は余裕ですが...。
ただ、本人的にはもう少し利用者を増やすぞという気持ちもあるので、利用者が増えても大丈夫にしたいと思っています。

Google App EngineではDatastoreへのアクセス回数を減らしてMemcacheにデータを乗せるというのがセオリーです。
Datastoreへのアクセス回数は可能な限り少なくできれば、無料運用しやすいので。

Slim3 ModelのModelRefでレイジーロードするときにDatastoreにアクセスするので、そこを改造していました。
ModelRefを継承したCachedModelRefを作成し、refreshメソッドの処理を書き換えて...と。

作成したクラスは以下みたいな感じで書きましたが、呼び出し元での書き方がわからず...。
package xxx.base.datastore;
import org.slim3.datastore.ModelRef;
/**
* CachedModelRef
*/
public class CachedModelRef<M> extends ModelRef<M> {
  private Class<CachedDaoBase<M>> daoClass;
  @Override
  public M refresh() {
    try {
      return daoClass.newInstance().get(key);
    } catch (InstantiationException | IllegalAccessException e) {
      throw new RuntimeException(e);
    }
  }
  public CachedModelRef(Class<M> modelClass, Class<CachedDaoBase<M>> daoClass) throws NullPointerException {
    super(modelClass);
    this.daoClass = daoClass;
  }
}

結局、コンストラクタのClass<CachedDaoBase<M>>をClass<?>にしちゃいました。

久々のGoogle App Engineではまりまくり。

Google App Engineで構築しているサイトがあるのですが、2014年に構築して以来、放置状態でした。
放置状態なのでアクセス数もほとんどないのですが、スマホ対応化&広告付与をしようと思って久々に触ってみました。

Eclipseを最新化して、Google App EngineのEclipse Pluginを導入して...と環境構築に勤しんでから、
Subversionのリポジトリからコードをチェックアウト。

動かしてみるとまともに動かない...。

はまりポイント① java.lang.NoClassDefFoundError

とりあえず動かしてみたら、いきなり例外発生。
あまり真面目に解析しなかったがSlim3内部で使っているのだろうか?
Base64DecorderExceptionが見つからないみたいなエラー。

Google App Engineをむやみやたらと更新したのが裏目に出たのと反省。
とりあえず稼働実績のあるGoogle App Engine 1.7.0にしてみることに。

はまりポイント② org.apache.jasper.JasperException

今度こそと思い、動かすと新たな例外発生。その名もJapserException。
調べたらJava7にしたら治るらしい。そもそもGAEの推奨はJava7らしい。
というわけでJava7にしたらエラーはでなくなりました。

はまりポイント③ 500 Internal Server Error

今までのエラーを解消してローカル環境では動くようになりました。
とりあえずの既存コードのデプロイを試してみると、デプロイは成功したもののHTTPステータスコード500が返ってくる。
ログを見てみるとjava.lang.UnsupportedClassVersionErrorが出ていて、Unsupported major.minor version 52.0とのこと。

JSPのバイトコードは52.0(Java8)で生成されてしまっているらしい。
Java7に変えたのに何故だろうと思っていたが、どうやらEclipseが動作しているJavaのバージョンでコンパイルされている様子。

eclipse.iniを弄ってJava7に振り替えるとEclipseが起動しない。
どうやらEclipse 4.6(Neon)はJava7で動作はできないのだろうか。

というわけで諦めてEclipse 4.3(Kepler)としました。
そうしたところ、正常に動作しましたとさ。

今回の結果から、Slim3構成 かつ JSP使っている場合は以下の組み合わせがよさそうですね。
IDE:Eclipse 4.3(Kepler)
JDK:JDK7 Update80
GAE SDK:1.7.7
Slim3:1.0.16

ほんと、非互換って恐ろしい。

スマホ対応化

スマホやタブレットからこのブログを見ると、文字が小さくてとても見ずらかったので、スマホ対応にしてみました。
どうやるのかと思って軽く調べてみましたが、結構簡単でした。
(凝りだしたら大変なのでしょうけど...。)

CSSで画面サイズごとにスタイルを変えるように設定
@media screen and (min-width: 768px){
// PC向け
}
@media screen and (max-width: 768px){
// スマホ向け
}

HTMLのヘッダにviewportの定義を追加



単純だけど、これだけで随分と見やすくなります。CSSは考える必要がありますが...。

プログラミングの過去のブログ記事