menu
書いてる野郎
orebike@gmail.com
絶対すんなり進むことが無いJava開発なのでもうしょうがないねコレは
SAStrtusそのものじゃないけど開発中に遭遇したエラーはここに書いておく。
起動しないのだ。
数字の部分は環境によってまちまちらしい。Windows環境でhotdeploy時じ発生した。
原因はjdbc.dicon
に書いてあるMySQLの文字化けに対する文字化けないための tips の文字コードみたいだ。
Linux環境では発生しないのだがWindows環境ではこれをShift-JISで書かれていると解釈してしまうらしくぶっ壊れて読めねーよボケ!と言われる。
なのでこのコメント部分を削除すればとりあえず回避できる。 他のdiconファイルにも日本語があるならば削除するといいかも
おそらく Eclipse のメニューの「Project」の中の「Build Automatically(自動的にビルド)」のチェックが外れている
エラーメッセージにも書いてあるんだが logback のような slf4j に依存性がある jar の中にもうすでに slf4j がビルドインされている場合、別にオリジナルの slf4j をクラスパスに含めているとコケる
どうにかしてどちらかをクラスパスから外すとコケなくなる。
このへんにJavaのパッケージ管理の限界を感じる
Tomcat本体のconf/server.xmlの8080番ポートの設定が書いてある所に
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" useBodyEncodingForURI="true" redirectPort="8443" />
↓を追記する
useBodyEncodingForURI="true"
つまりcooldeployで起動すると、DI関係のエラーが出まくってactionがひらけなくなったりとかいろいろ挙動がおかしくなる
OSを丸々再起動したら回避できたりする。
hotdeploy が処理できるのは1リクエストのみ。なのでブラウザからのアクセスで一杯一杯になってしまう。
サーバへのアクセスでサーバがサーバに通信するような処理を書いた場合ブラウザはサーバのレスポンスを待ち、サーバはブラウザの通信が終わるのを待つのでデッドロックになってしまう
なんかの弾みでHotdeployが効かず、ソースコードを修正しても結果に反映されなくなることがあった。
Eclipse の Project の build automatically が何らかの原因で外れている可能性がある。
これは Java8 の問題でもあり、動作させなくても同じプロジェクト中に Java8 のコード(ラムダとか stream とか)があった場合、AOP を司る「javassist」が古い場合おかしくなったりする。
この場合 javassist のバージョンを Java8 対応のモノに差し替えると解決する。
これはバイトコードの並びに依存するようで、Java8 コードが有っても運良く動いてしまう場合もある。 ここで、プロジェクト全体で大きくファイル構成やクラス構成、ソースの並びを変更した場合に突然何も関係なかった部分でエラーが出たりする。
resetメソッドが怪しい
100 個を超えるような大量の値を一気にブラウザ側から送信するとそうなる可能性がある。
parseIntでミスってしまうことがある
hoge[0]=a&hoge[1]=b
とかいうパラメータで来る予定が
hoge[]=a&hoge[]=b
こんな感じで来るとなる
なにやら深くネストしているプロパティに対してはgetterが生成されないらしく、それでこけているっぽい。
なので、Map の中の List の中のエンティティの中のプロパティみたいな深い部分の値にアクセスできなくなる。
getter を生成してくれないから、エラーになるので、明示的に書いてやれば回避できる。
まーそれよりも深い入れ子の設計を見なおせというフレームワークからのメッセージと捉えて設計を改めるほうがいいと思う。
$ mvn war:inplace
のようなエラーが出る。その画面からリンクされているActionに同一の urlPattern が指定されている場合に出る。
java.lang.NoSuchMethodError: org.junit.runner.manipulation.Filter.apply(Lorg/junit/runner/Runner;)V
みたいなのが出る。
使っているjunitのバージョンが新しすぎると出る。4.4にすべし! 個別にテストできないだけであって、まとめて全部はできる。
ビルド時に出たりする。
resources のエンコードを直接指定すると回避できる。
<build> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <encoding>utf-8</encoding> </configuration> </plugin> </build>
Windows 環境で何かの弾みでこの状態になることが多い。
SAStruts の本体側とテストは別のシステムで JDBC Driver の JAR へのビルドパスを本体とはまた別に指定してやる必要がある。
Tomcat Plugin に設定するコンテキスト名を明示的にスラッシュから始まるものにしないと出る可能性がある。
多分 プラグインがバグっている。 プロジェクトのディレクトリの .tomcatplugin
の中をエディタで直修正することで回避できる。
以前はできていたのの突然できなくなった場合は .m/repository
ディレクトリを削除してやりなおすと出来る場合がある。