プログラミング: 2016年3月アーカイブ

Eclipse Luna 2(4.4.2)で SVN ロケーションの作成に失敗する。

workspace\.metadata\.log を見ると、

!ENTRY org.eclipse.team.svn.core.svnnature 4 0 2016-03-04 10:54:11.119
!MESSAGE SVN: '0x00400107: リポジトリー・リソース改訂の取得' 操作がエラーで完了しました
!SUBENTRY 1 org.eclipse.team.svn.core.svnnature 4 0 2016-03-04 10:54:11.119
!MESSAGE Get repository resource revision operation failed.
!STACK 0
org.eclipse.team.svn.core.connector.SVNConnectorException: svn: E180001: Unable to open an ra_local session to URL
svn: E180001: Unable to open repository 'file://server01/project/hogehoge/svn'
svn: E160043: Expected FS format between '1' and '5'; found format '6'
at org.polarion.team.svn.connector.svnkit.SVNKitService.handleClientException(SVNKitService.java:59)
at org.polarion.team.svn.connector.svnkit.SVNKitConnector.getInfo(SVNKitConnector.java:1776)

とログが吐かれている。

Expected FS format between '1' and '5'; found format '6'

と出ているので、SVN のバージョンと SVN コネクターのバージョンが合っていないものと思われるが、実は同じエラーが最初にロケーション作成した時に出てて、その時は Eclipse の SVN コネクターを、

SVNKit 1.7.13 r10273_v20140502_1419(SVN 1.7.11 compatible)

から

SVNKit 1.8.7 r10376_v20141223_2131(SVN 1.8.1 compatible)

に変更したことで解決した。

しかし、今回、数日ぶりに Eclipse を起動したら、コネクターは 1.8.7 のままなのに、またエラーが出るようになってしまった。

どうしたことだ!?

エラーメッセージは相変わらずバージョン違いを匂わせるものなので、マジ原因不明。
TortoiseSVN のバージョンを正常に動いているマシンに合わせて TortoiseSVN-1.9.3.27038 から TortoiseSVN-1.8.11.26392 に落とすという、「ま、無駄じゃろうのお」と思うことまで藁をも掴む思いでやってみたが、まあ、ダメだった(^^; ま、ダメだよな(笑)

Eclipse も Luna(4.4) から Mars(4.5) に入れ替えたりとかすったもんだしたんだけど、結局解決せず。

・・・というか、実は解決した。

原因は、多分・・・

単なる権限の問題?

・・・(^^;

Eclipse(pleiades)を C:\ 直下にインストールしていたので、ワークスペースの位置も C:\pleiades\workspace だったのだが、これを自分のドキュメントフォルダの下に作りなおしたら、問題なく SVN ロケーションの作成が行えるようになった。
これ、実行ユーザに C:\pleiades\workspace 以下のファイル等を更新する権限がなかったってことじゃ?(ちなみに、OS は Windows 8.1 Pro です)

じゃあ、なんで最初はうまくいったんだって話だけど、この時は色々試してて、管理者権限で Eclipse を起動したりしてたんで、それでうまくいったんかなあ?
それか、ここ最近 Windows 8.1 関連のアップデートが毎日のように発生しているんで、その関係でセキュリティ関係の何かがどうにかなってこうなったか(←全然わかってない(^^;)

いや、もう一回試せやって話なんだけど、すでに作業スケジュールが遅れ気味なので、もう変なことしたくない、この PC じゃ(^^;

多分、ここに書いておくと、偉い人に指導してもらえるかなと(^^;
よろしくお願いします。

・・・というのが、今、Java で組まれた Web アプリケーションのテスターをしてるんですけど、

    1. クラスライブラリの追加があった。(仮に HogeHogeClassLib)
    2. 先に JSP のソースだけ持ってきたら、当然のごとく「インポートされた com.hogehoge.commons.HogeHogeClassLib は見つかりません。」のエラーが。
    3. 追加されたクライスライブラリを含む(新しく圧縮された)jar ファイルを、WEB-INF/lib の下にコピー(Eclipse のパッケージ・エクスプローラーで一覧表示しているところに、ファイル・エクスプローラー上からドラッグ&ドロップしてコピー)
    4. でも、JSP のエラー消えず・・・

という状況で。

ググってみると、「古い情報がキャッシュされているので、Eclipse を再起動すればフラッシュされる」なんて情報があったので再起動してみたけどダメ。

うーん・・・

結局、

    1. 一旦この jar ファイルを WEB-INF/lib 内から削除。
    2. 大量のインポートエラーが発生。
    3. 新しい jar ファイルを WEB-INF/lib コピー(追加)

とすると、新しい jar ファイルの内容が読み込まれてインポートエラーも解消したんだけど・・・

多分、Eclipse の操作で、差し替えられた jar ファイルの中身をすぐに適用させる方法あるんよね?

このエントリーが識者の方の目に触れたら、ぜひご教示いただければ幸いです。

とりあえず、このベタな方法でもフラッシュできるで・・・ということで、書くだけ書いとくけど(^^;

<追記>
わかりました。
WEB-INFO/JSP の上で右ボタンメニューを出して「リフレッシュ」をしていたのだが、一番上のプロジェクト名のところでやらないとダメだったのね。
まずは、いきなりオリジナルのアプリケーションではなく、何か簡単なサンプル的なものを動かしてみたほうが理解が進むなあ・・・と思ったら、会社の本棚に「最強フレームワーク Apache Struts 1.2 パーフェクトガイド」(黒住幸光+芦沢嘉典著)という書籍を発見。
ああ、以前、Java の勉強しようと思って買ったんだろうなあ、俺。完全に忘れてたけど(^^;
平成17年2月25日初版発行の本なので、11年前か(^^;古っ(^^;

でも、昨日、帰りの電車で読んで Struts1系の概要はだいたいわかったわ。やっぱ書籍で読んだ方が、さわりの、例えば概要説明的なものは頭に入りやすいな。
サンプルソースの説明なんかは(自分の環境に簡単にソースをコピペできるし)Web の方が良いけどね。
まあ、なにはともあれ、買っといて正解だったよ、11年前の俺(笑)その時は買うだけ買って、全然中は読まなかったようだがな(笑)

で、この書籍に載っているログオンサンプル・アプリケーションってやつを作成してみることにしよう。

とりあえず、logonExsample という動的 Web プロジェクトを新規作成。

それから、logonExsample プロジェクトに struts-blank のファイル群をコピー。

まずは、今回のサンプル作成で使用しない/新規に作成するため予め削除するファイルとして、

/pages/welcome.jsp
/WEB-INF/classes/MessageResources.properties
/WEB-INF/classes/resources/MessageResource.properties
/WEB-INF/src/java/resorces/application.properties
/index.jsp

が挙げられているが、Ver 1.2 と 1.3.10 の違いか、

/WEB-INF/classes/resources/MessageResource.properties は存在しない。/WEB-INF/src/java/MessageResources.properties てのが存在しているが、これ?

/WEB-INF/src/java/resorces/application.properties も存在しない。application.properties はどこにも存在しない。

と、いきなりつまずいてしまう(^^;

ま、1.2 と 1.3 の違いなんかも調べつつサンプル作成すれば、細かい部分の理解も深まるかも(^^;・・・とポジティブに考えることにしましょう。

1.2 と 1.3 の違いについては、ググってみると検索候補に「Struts 1.2 1.3 違い」みたいなのがすぐ出てくるので、1.3がリリースされた当時はみなさん色々苦労されたのかもね。

と、ググってたら、上記書籍を執筆された方が、自社サイトにて「Strutsをはじめとするオープンソースプロダクト情報」と題して、Struts 1.3 を使用した上記書籍内容のリライト版のようなものを公開されています。

素晴らしい!

というわけで、株式会社アークシステムのエンジニアさんが作成されたこのサイトを参考に勉強していくことにします。

ええ。Java フレームワークのひとつである Struts の最新バージョンが 2.3.24.1 であること。Struts1系 と Struts2系では互換性がないこと。世の中、やっと Struts1系の業務アプリケーションが寿命を迎え、Struts2系の時代になったこと・・・等などは知っていますよ。ええ。

でも、諸処の事情により Struts1 系のお勉強をしないといけないのですよ。

まあ、そういうことで、Eclipse を使って Struts1 系フレームワークを使った Java アプリケーションを作ってみようかと。実践的なお勉強として。

どうせなら実用的なものを作りましょうかね。
取り敢えず「顧客情報管理」を。そしたらそこからプロジェクト管理(請求システムなども含む)へ発展していけるからねえ。

ということで、Java 新規プロジェクトを cusman という名前で作成。
「カスマン」です。何か、「売女の性器」みたいな名前になっちゃったけど、もちろん Customer management の略ですよ(笑)

Eclipse で「ファイル」→「新規プロジェクト」→「動的 Web プロジェクト」を選択。
ターゲット・ランタイムは「Tomcat8(Java8)」を選択。他はそのままで。あ、名前は「カスマン(cusman)」ね(笑)


で、↑こっから落としてきた Struts 1.3.10 を解凍して出来上がったファイル群の中の、

struts-1.3.10\apps

このディレクトリの下にある struts-blank-1.3.10.war の拡張子を zip に変更して解凍。
war ファイルは zip ファイルと構造が一緒なので、拡張子を変えてやるだけで解凍ソフトで処理できると。

そしたら、struts-blank-1.3.10 というディレクトリの下に、

META-INF
pages
WEB-INF

というディレクトリと、

index.jsp

というファイルができているので、Eclipse のプロジェクトディレクトリの下にコピーしよう。

具体的には(今回は cusman というプロジェクトなので)、cusman\WebContent ディレクトリの下ね。ここにコピーする。ちなみに、cusman\WebContent ディレクトリの下にはすでに META-INF と WEB-INF というディレクトリができているので、上書きで。

ファイルエクスプローラー上で作業をしたので、その後、Eclipse のプロジェクトエクスプローラー上の cusman の上で右クリックメニューを出して「リフレッシュ」。表示されているファイル一覧を更新しておこう。

で、いろいろググってると、この後で「Java のビルド・パスでライブラリ選んでJARファイルの追加処理をしろ」とか書いてあったりするんだけど、特にそういうことをしなくても、

・「Tomcat」→「Tomcat の起動」
・「実行」→「実行」

で、ブラウザで http://localhost:8080/cusman/ にアクセスすれば、Welcome!画面を見ることができた。

20160302_java.jpg

struts-config.xml の message-resources の parameter を修正しろという記述もあったが、それも不要だった。というか、そう書いてあるサイトの通りに修正したらエラーが出てダメだった(^^;

ということで、取り敢えず初期セットアップまではできたか。ふう。もう今日は寝る(^^;
しかし、まあ、「五十の手習い」で今更ながら Java の勉強なんか始めると、いろいろ戸惑うことも多いですなあ。

いろいろテストしてみるためにサーバに Tomcat を入れたんですが(インストール自体は仕事で何度もしたことありますが)、webapps の下の ROOT ってなんですのん?

いや、いわゆる DocumentRoot なんだろうけど、でも、war ファイルを webapps 上にデプロイして展開した Web サービスって、ROOT ディレクトリと同じ並びにできるじゃん?

例えば、struts1 のサンプルである struts-examples-1.3.10.war ファイルを webapps 上に転送すると、デプロイされて、struts-examples-1.3.10 ってディレクトリ以下にコンテンツが配置されるじゃん。ROOT の下にじゃなくて、ROOT と同じ並びに。

で、

http://www.exsample.jp:8080/

にアクセスすれば webapps/ROOT の下が参照されるし、

http://www.exsample.jp:8080/struts-examples-1.3.10/

にアクセスすれば、webapps/struts-examples-1.3.10 の下が参照されるよね。(Tomcat のポート番号が 8080 の場合)

で、これ、ROOT の下に同じ名前「struts-examples-1.3.10」ってのが存在していたらどうなるんかね?

うちのテストサーバで試してみた。

うちは Apache と Tomcat を連携させていて、直接ポート番号指定で Tomcat にアクセスしてもダメなようにしてる。

httpd.conf には、

<Location /s/>
    ProxyPass ajp://localhost:8080/
</Location>

こういうプロキシ設定が書き込まれている。

これで、http://www.exsample.jp/s/ にアクセスすると、http://www.exsample.jp:8080/ にアクセスしたのと同じ内容が参照できるわけやね。Tomcat の webapps/ROOT ディレクトリ以下を見ている。

で、http://www.exsample.jp/s/struts-examples-1.3.10/ にアクセスすれば、http://www.exsample.jp:8080/struts-examples-1.3.10/ にアクセスしたのと同様の内容が参照される。

まあ、/s/ を Tomcat の /(ルート)に連携しているんだからそうなるわな。

この時、ROOT の下に struts-examples-1.3.10 という名前のディレクトリを掘って、http://www.exsample.jp/s/struts-examples-1.3.10/ にアクセスしても、決して webapps/ROOT/struts-examples-1.3.10 は参照されない。
参照されるのは、必ず webapps/struts-examples-1.3.10 である。

どこかに設定が書き込まれているのかと grep してみたけど無いようだなあ。
ということは、Tomcat が(例えば起動時や、デプロイ時に)webapps の下を見て動的に制御してるってことか。

もちろん struts-examples-1.3.10 以外の、例えば test というディレクトリを ROOT 以下に掘ってやれば、http://www.exsample.jp/s/test/ でそのディレクトリが参照される。
つまり、ROOT と同じ並びにあるディレクトリと同じ名前のディレクトリを ROOT 以下に作ってもダメってことだな。

webapps ディレクトリが DocumentRoot で、Apache で言えば、

<Location />
    ProxyPass /webapps/ROOT/
</Location>

<Location /struts-examples-1.3.10/>
    ProxyPass /webapps/struts-examples-1.3.10/
</Location>

みたいなプロキシ情報が自動で生成されているってことか?

なんかこの ROOT の存在がほんと気持ち悪いんだけど、気にせず先に進むことにしよう(^^;

このアーカイブについて

このページには、2016年3月以降に書かれたブログ記事のうちプログラミングカテゴリに属しているものが含まれています。

前のアーカイブはプログラミング: 2016年2月です。

次のアーカイブはプログラミング: 2016年4月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら