トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   サーバ関連【CGI・FCS・XMLSocket etc】
     Flash + Flash Remotingからの実行でJavaのPropertiesファイルが読めない
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
neoneo
Åê¹ÆNo.6057
投稿日時: 2004-4-6 23:14
新米
居住地: 福岡市
投稿: 4
使用環境:
WinXP, Flash MX, FlashRemoting MX, eclipse, Tomcat, Oracle8i(9i)
Flash + Flash Remotingからの実行でJavaのPropertiesファイルが読めない
はじめまして。
Flash超初心者のneoneoと申します。
早速ですが、今仕事で困っております。
FlashからサーバサイドのJava(POJO)を利用するため、Flash Remotingのクラスライブラリを用いてJavaっているのですが、JavaのIDE(Eclipse)から単独でデバッグしている分にはPropertiesファイルを読めるのですが、ドライバ用のFlashからテストすると、ファイルが見つからない例外が発生してしまいます(クラスの所在は解決しています)。
環境は、
 ・Web:Tomcat4.1x
 ・Eclipse2.1x
 ・Flash Remoting MX
です。
Tomcatのコンソール(本当はEclipse上からKickしているのでEclipse上のコンソールですが)にも例外のメッセージが出力されているので、Tomcatの設定なのかな?とも考えているのですが、いまいち理解できずにいます。
ちなみにプロジェクト自体は、書籍「FlashクライアントとJavaサーバー」で紹介されているサンプル通り、Tomcatのwebapps配下にRemotingをデプロイし、classes配下に作成しています。
また問題のpropertiesファイルもclasses直下です。

もしご存知の方がいらっしゃいましたら、是非ともご教授頂きたい次第です
ゲスト
Åê¹ÆNo.6068
投稿日時: 2004-4-7 11:37
Re: Flash + Flash Remotingからの実行でJavaのPropertiesファイルが読めない
こんにちは、taijiです。
私も、「FlashクライアントとJavaサーバー」は読みましたよ。

現在は、FlashRemotingを使用してjava+Flashでのアプリケーション開発を行っています。
お力になれればと思いレスします

情報が足りないのでいくつか確認させてくださいませ。

ここで言うpropertiesファイルとは、自分で定義した設定ファイルのことという認識であっていますでしょうか?

引用:

FlashからサーバサイドのJava(POJO)を利用するため、Flash Remotingのクラスライブラリを用いてJavaっているのですが、JavaのIDE(Eclipse)から単独でデバッグしている分にはPropertiesファイルを読めるのですが、ドライバ用のFlashからテストすると、ファイルが見つからない例外が発生してしまいます(クラスの所在は解決しています)。


Flashからjavaクラスは呼べていますか?
呼べているのだとしたら、クライアントFlashからjavaクラスは見つかるけれども、そのjavaクラスの中でpropertiesファイルを探しに行ったところで落ちてるととらえてよろしいでしょうか?
それともjavaクラスを呼び出す際の、Remotingで落ちてるのでしょうか?

引用:

ちなみにプロジェクト自体は、書籍「FlashクライアントとJavaサーバー」で紹介されているサンプル通り、Tomcatのwebapps配下にRemotingをデプロイし、classes配下に作成しています。
また問題のpropertiesファイルもclasses直下です。


書籍のサンプルどおりということは、
%TOMCAT_ROOT%/webapps/flashgateway/WEB-INF/classes
以下にプロジェクトがあるということでよろしいですか?

最後に、実際にpropertiesファイルを読みに行っているロジックや
Exceptionのスタックトレースなんかを載せていただけると解析しやすいです。
neoneo
Åê¹ÆNo.6074
投稿日時: 2004-4-7 14:31
新米
居住地: 福岡市
投稿: 4
使用環境:
WinXP, Flash MX, FlashRemoting MX, eclipse, Tomcat, Oracle8i(9i)
Re: Flash + Flash Remotingからの実行でJavaのPropertiesファイルが読めない
taiji様
はじめまして
ご教授ありがとうございます。
早速ですが、
引用:
ここで言うpropertiesファイルとは、自分で定義した設定ファイルのことという認識であっていますでしょうか?

はい、その通りです。
データベースアクセス用のプロパティファイルを作成し、
 %TOMCAT_ROOT%/webapps/flashgateway/WEB-INF/classes
にDB.propertiesという名前で配置しています。

それから、
引用:
Flashからjavaクラスは呼べていますか?
呼べているのだとしたら、クライアントFlashからjavaクラスは見つかるけれども、そのjavaクラスの中でpropertiesファイルを探しに行ったところで落ちてるととらえてよろしいでしょうか?
それともjavaクラスを呼び出す際の、Remotingで落ちてるのでしょうか?

呼び出しは問題なく、Eclise上でのブレークポイントも止まってくれます。
以下のコードを示します(prop.load()の行で落ちてしまいます)。
		Properties prop = null;
		try{
			prop = new Properties();
			prop.load(new FileInputStream(propertyName));

		} catch (FileNotFoundException e) {
			e.printStackTrace();
			throw e;
		} catch (IOException e) {
			e.printStackTrace();
			throw e;
		}

		return prop;


それから、
引用:
書籍のサンプルどおりということは、
%TOMCAT_ROOT%/webapps/flashgateway/WEB-INF/classes
以下にプロジェクトがあるということでよろしいですか?

上記内容と一致します。

エラーログですが、
doSubmitが呼び出されました
getCompany_Statusが呼び出されました メソッドを呼び出す際に、サービスが例外を投げました: null
エラータイプは java.lang.reflect.InvocationTargetException です
エラー詳細は java.lang.reflect.InvocationTargetException

	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

	at java.lang.reflect.Method.invoke(Method.java:324)

	at flashgateway.adapter.java.JavaAdapter.invokeFunction(JavaAdapter.java:49)

	at flashgateway.filter.AdapterFilter.invoke(AdapterFilter.java:200)

	at flashgateway.filter.SecurityFilter.invoke(SecurityFilter.java:84)

	at flashgateway.filter.LicenseFilter.invoke(LicenseFilter.java:58)

	at flashgateway.filter.ErrorFilter.invoke(ErrorFilter.java:44)

	at flashgateway.filter.LogFilter.invoke(LogFilter.java:43)

	at flashgateway.filter.BatchProcessFilter.invoke(BatchProcessFilter.java:63)

	at flashgateway.filter.DebugFilter.invoke(DebugFilter.java:38)

	at flashgateway.filter.SerializationFilter.invoke(SerializationFilter.java:59)

	at flashgateway.Gateway.invoke(Gateway.java:184)

	at flashgateway.controller.GatewayServlet.service(GatewayServlet.java:56)

	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)

	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)

	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)

	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)

	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)

	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)

	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)

	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)

	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)

	at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2422)

	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)

	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)

	at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)

	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)

	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:163)

	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)

	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)

	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)

	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)

	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)

	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)

	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)

	at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:199)

	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)

	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:700)

	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:584)

	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)

	at java.lang.Thread.run(Thread.java:536)

Caused by: java.io.FileNotFoundException: DB.properties (指定されたファイルが見つかりません。)

	at java.io.FileInputStream.open(Native Method)

	at java.io.FileInputStream.<init>(FileInputStream.java:103)

	at java.io.FileInputStream.<init>(FileInputStream.java:66)

	at some_prj.core.properties.PropertiesManager.getProperties(PropertiesManager.java:43)

	at some_prj.core.database.DBManager.getConnection(DBManager.java:44)

	at some_prj.app.tables.CompanyTable._getCompany(CompanyTable.java:200)

	at some_prj.app.tables.CompanyTable.getCompany(CompanyTable.java:83)

	... 45 more

 です

となっています(Flash側の出力です)。

最後になりますが、Tomcatもあやしいのかと思い、2つのバージョンで実行してみましたが、どちらも同様でした。
Apache Tomcat/4.1.29
Apache Tomcat/4.1.30

またJavaのバージョンは1.4.1_03-b02です。

お手数おかけしますが、よろしくお願い致します。
ゲスト
Åê¹ÆNo.6075
投稿日時: 2004-4-7 14:52
Re: Flash + Flash Remotingからの実行でJavaのPropertiesファイルが読めない
予想ですが、おそらく「propertyName」の変数の中ではないでしょうか?
java単体で、eclipsから実行すると上手くいくとのことでしたよね。
ファイルパスが相対パスになっていませんか?
そちらのディレクトリ構成が分からないので何とも言えませんが
絶対パスでファイルを指定してあげればよいのではないでしょうか?

「propertyName」の実態は何が格納されているのでしょうか?

もし見当違いでしたらごめんなさい。


参考までに、私の環境で動作しているサンプルを記載してみます。(やってる事は一緒ですね)
個人的にお勧めはtomcatの起動引数に、ファイルパスを変数として持たせておくのがスマートでGOODだと思います。

	/**
	 * propertiesの内容を取得します
	 * 
	 * @return Properties
	 * @throws Exception
	 */
	public static synchronized Properties getProperties() throws Exception {

		try {
			// まだ一度もpropertiesが読み込まれていなかった場合
			if(PROPS == null) {
				
				FileInputStream fs = new FileInputStream("ファイルパス");
				PROPS = new Properties();
				PROPS.load(fs);

			}
			return PROPS;
		} catch (Exception e) {
			throw new Exception();
		}

	}


neoneo
Åê¹ÆNo.6088
投稿日時: 2004-4-7 19:28
新米
居住地: 福岡市
投稿: 4
使用環境:
WinXP, Flash MX, FlashRemoting MX, eclipse, Tomcat, Oracle8i(9i)
Re: Flash + Flash Remotingからの実行でJavaのPropertiesファイルが読めない
早速ですが、
引用:
ファイルパスが相対パスになっていませんか?

お察しの通りです。
やはり絶対パスにする必要があるのでしょうか?
通常、Servletなどを作成する場合は、単純にclasses配下にpropertiesを置いておけば相対パスでOKになりますよね。
これがうまくいかないのはRemotingサーブレットからのPOJO呼び出しに制限がかかっているんでしょうか(例えば共通パッケージ内に存在しない等)?

いずれにせよ貴重な情報ありがとうございます!
私ももう少し、調査してみます。
ゲスト
Åê¹ÆNo.6099
投稿日時: 2004-4-7 23:47
Re: Flash + Flash Remotingからの実行でJavaのPropertiesファイルが読めない
おそらく、環境変数に指定したJAVA_HOMEをルートとしてそこからの相対を取りに行っていると思います。

試しにjavaで、ルートディレクトリをシステム変数から取得するだけのクラスを作ってFlashからコールしてみるとどこを見に行っているのかはっきりしますね

↓↓↓参考になるかな・・・
JavaHouse

RemotingでWebアプリを作成していて思いましたが、サーブレットやJSPでHTMLクライアントにするよりも軽くて見栄えも良いし、慣れてしまえばなんでも出来ますよね。

がんばってくださいね
neoneo
Åê¹ÆNo.6102
投稿日時: 2004-4-8 9:17
新米
居住地: 福岡市
投稿: 4
使用環境:
WinXP, Flash MX, FlashRemoting MX, eclipse, Tomcat, Oracle8i(9i)
Re: Flash + Flash Remotingからの実行でJavaのPropertiesファイルが読めない
色々とお手数お掛けし、ありがとうございました。
これからも頑張ります。
よろしくお願い致します。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops