1

私はこの独特の問題に直面しています。私の webapp は、私のローカルホストで正常に動作します。JSP/Struts-Tomcat-MySQL アプリです。ただし、hostjava.net (共有 tomcat) でホストすると、データベースに接続できません。

いくつかのデバッグの後、データソースの JNDI ルックアップに問題があることを特定しました。必要に応じて、 http://rohitesh.hostjava.net/MapsDummyLog.htmでログを確認できます。

コンテキスト情報の場所に関する詳細: /META-INF/context.xml には次が含まれます。

<Context path="" docBase="" debug="5" reloadable="true" crossContext="true" override="true">
   <Resource name="jdbc/ConnectionPooling" auth="Container" type="javax.sql.DataSource"
    maxActive="10" maxIdle="5" username="[username]" password="[password]" driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost/[db name]?autoReconnect=true" />
</Context>

どこが間違っているのか、誰でも教えてくれますか?

乾杯、ロヒテッシュ。

4

9 に答える 9

3

これはいけません:

url="jdbc:mysql://localhost/[db name]?autoReconnect=true"

データベースがホストされているサーバーの名前を本当に指していますか? リモート ホストでは、データベース サーバーが Tomcat インスタンスと同じマシンではない可能性があります。私はあなたが言わなければならないと思います

url="jdbc:mysql://[サーバー名]/[データベース名]?autoReconnect=true"

于 2008-10-25T14:31:27.383 に答える
2

これが私の推測です:

あなたはそれが共有ホスティングだと言いました。それならすべきではない

<Context path="" 

特定のアプリケーションのコンテキスト パスが含まれていますか?

http://tomcat.apache.org/tomcat-5.5-doc/config/context.html この Web アプリケーションのコンテキスト パス。各要求 URI の先頭と照合して、処理する適切な Web アプリケーションを選択します。特定のホスト内のすべてのコンテキスト パスは一意である必要があります。空の文字列 ("") のコンテキスト パスを指定すると、このホストのデフォルトの Web アプリケーションが定義され、他のコンテキストに割り当てられていないすべての要求が処理されます。

したがって、コンテキストは無効であり、おそらく見えないだけです(それがnullドライバーとnull urlの理由です)。

"" は、デプロイされたすべてのアプリ (自分のアプリを含む) の共有コンテキストであるため、ローカルで機能します。

于 2008-10-26T02:53:41.567 に答える
1

この制限はどうですか:

http://wiki.hostjava.net/index.php/HostJava.net_FAQ 共有 Tomcat を使用すると、server.xml ファイルへのアクセスが制限されます。レルム (JDBC レルムなど) を server.xml ファイルに追加できるのは、サポート スタッフだけです。

データソースを追加するには、サポートに依頼する必要があるようです。

于 2008-10-26T12:51:49.160 に答える
1

ロヒテシュ、

Vladimir の回答とコメントに従って、サーバー コンテキスト (server.xml、またはよりグローバルにスコープされた context.xml) の更新を要求することを検討することをお勧めします。

他に何もないとしても、これは私の意見ではベストプラクティスです。Tomcat では、Web アプリケーション自体からコンテキスト (JNDI リソースを含む) を定義できますが、この機能を使用する唯一の場所は、開発者のローカル テスト サーバーです。外部リソース (この場合はデータベースですが、メール サーバー、コンテンツ サーバー、ルール エンジンなど) の構成をアプリケーションから独立して変更できるため、Web アプリケーションの移植性が向上します。

これが役立つことを願っています。

于 2008-10-26T18:44:26.687 に答える
0

ごめんなさい。これは、私とホスティング施設のサポート チームとの間の誤解の問題でした。構成の衝突がありました。彼らは server.xml に古い設定をいくつか設定していました。それは他のコンテキスト情報よりも優先されるため、私はそれらの問題に直面していました。今はお世話になっています。

しかし、共有構成で人々がコンテキスト情報を META-INF/context.xml ファイルに持つことを許可することは、より良いオプションであると私はまだ感じています。そうすれば、彼らはそれをより細かく制御できます。

しかし、時間を割いて回答してくれた皆さんに感謝します。私はあなたから多くのことを学びました。ありがとうございました。

乾杯、R

于 2008-10-27T19:11:18.580 に答える
0
  • ドライバーは利用できますか?Class.forName("com.mysql.jdbc.Driver"); を試してください。- コンテナー (Tomcat) にインスタンス化を要求しているため、webapps WEB-INF/lib に配置できません: サーバーのクラスパスに配置する必要があります。
  • Tomcat 5.5.x または 6.0.x を実行していますか? 5.0.x では、context.xml 構文、特にリソース定義が異なります。5.5 以降のより適切で単純な属性の代わりに、より多くの xml タグが使用されています。
于 2008-10-25T21:38:44.293 に答える
0

org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor) で com.Actions.UserAction.execute(UserAction.java:66) で com.DAO.UserDAO.userLogin(UserDAO.java:109) で "java.lang.NullPointerException .java:431) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) で org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) で "

これは、何かが正しく初期化されていないことを示しています。UserDAO.java の 109 行目でどのオブジェクトを呼び出していますか?

"10/25/08 (2:08 AM) ajp-127.0.0.1-8015-1 ERROR UserDAO.java:104 Cannot create JDBC driver of class '' for connect URL 'null'
10/25/08 (2:08 AM) ajp-127.0.0.1-8015-1 ERROR UserDAO.java:105 org.apache.tomcat.dbcp.dbcp.SQLNestedException: 接続 URL 'null' のクラス '' の JDBC ドライバーを作成できません "

DBのURLを確認しましたか。URL が無効または NULL のようです。JDBC 接続 URL に手動で値を指定できますか?

于 2008-10-25T07:25:08.847 に答える
0

奇妙な点は、同じアプリケーションの別の部分が、ハードコーディングされた URL (JNDI ルックアップからのデータソースではなく、DriverManager を使用) を使用してデータベースにアクセスし、正常に動作することです (ログの最初の 2 行を確認してください。データベースから読み取られる料理名を含む次の数行)。したがって、データベースも同じサーバー上にあることは確かです。

乾杯、R

于 2008-10-25T15:05:52.980 に答える
0

別のメモ: 投稿したログ ファイル以外のログ ファイルにアクセスできますか? サーバーの logs/catalina.out ファイルにアクセスできる場合は、Tomcat がデータ ソースを設定している正確な問題が表示される場合があります (これは、Tomcat の起動時に表示されます)。

于 2008-10-26T18:48:16.663 に答える