0

外部のopenSUSEサーバーでホストされるGWT Webアプリを作成しました。私は Google の GWT RPC を使用してサーバーと通信し、MySQL データベースが更新されるサーバーにクライアントからデータを送信します。すべてが Eclipse で完全に正常に動作しますが、/war ディレクトリをサーバー (java-connector に必要な mysql-connector-java-5.1.18-bin.jar ファイルを含む) に移動するとすぐに、私のローカル SQL データベースがサーバーが更新されていません。なぜ機能しないのですか?これは何らかの mysql 構成の問題ですか?

ローカル マシン (Eclipse でデバッグしていた場所) のデータベースとまったく同じ名前とテーブルを使用して、サーバー上にデータベースをセットアップしました。GWT からエラーは発生せず (サーバー アクセスは正常に機能します)、SQL ログ ファイルにもエラーは表示されません。

mysql の再起動を試み、mysql のポート 3306 が開いてリッスンしていることを確認し、ファイアウォールを無効にし、ホストに localhost と 127.0.0.1 の両方を試しました。

何が問題なのかわかりません。誰か助けてください! 私はここで夢中になる !

これは私のサーバー側のコードで、Eclipse では正常に動作しますが、サーバー上では動作しません!

package com.mycompany.mywebapp.server;

@SuppressWarnings("serial")
public class GreetingServiceImpl extends RemoteServiceServlet implements
    GreetingService {

public String[] greetServer(String[] input) {

    //Data is entered into MySQL database on server side 
    Connection con = null; 
    Statement st = null; 

    String url = "jdbc:mysql://127.0.0.1:3306/testdb";
    String user = "username";
    String password = "pass";

    try{
        con = DriverManager.getConnection(url,user,password); //establishes connection to database
        st = con.createStatement(); //object for sending SQL statements to database 

        for (int i=0;i<input.length;i++){
            String DataToSend = input[i];
            String part1 = DataToSend.substring(0,DataToSend.indexOf("["));
            String part2 = DataToSend.substring(DataToSend.indexOf("["),DataToSend.indexOf("]")+1);
            //store values into mysql database
            String query = "INSERT INTO boundingboxes(name, box) VALUES('"+part1+"','"+part2+"')";
            st.executeUpdate(query);
        }

    }catch (SQLException ex){
        Logger lgr = Logger.getLogger(Version.class.getName());
        lgr.log(Level.SEVERE, ex.getMessage(), ex);

    }finally{
        //make sure to avoid null pointerexception 
        try{
            if (st !=null){
                st.close();
            }
            if (con != null){
                con.close();
            }
        }catch (SQLException ex){
            Logger lgr = Logger.getLogger(Version.class.getName());
            lgr.log(Level.WARNING, ex.getMessage(), ex);
        }
    }

    return input; 
}



}
4

1 に答える 1

0

問題の解決策を見つけました。NoClassDefFoundErrorを取り除くには、アプリで使用される外部.jarファイルを/ WEB-INF /lib/に直接コピーする必要があります。

Apacheには、jdbc-msqlの追加の設定手順が必要です。まず、SQLデータベースに正しいGRANT権限が設定されていることを確認してください。

次に、http://dev.mysql.com/doc/refman/5.0/en/connector-j-usagenotes-j2ee.html#connector-j-usagenotes-tomcatから取得した彼のソリューションに従います。

まず、Connector/Jに付属の.jarファイルを$CATALINA_HOME/ common / libにインストールして、コンテナーにインストールされているすべてのアプリケーションで使用できるようにします。

次に、Webアプリケーションを定義するコンテキストで宣言リソースを$ CATALINA_HOME / conf / server.xmlに追加して、JNDIデータソースを設定します。

<Context ....>

...

<Resource name="jdbc/MySQLDB"
       auth="Container"
       type="javax.sql.DataSource"/>

<!-- The name you used above, must match _exactly_ here!

The connection pool will be bound into JNDI with the name
"java:/comp/env/jdbc/MySQLDB"
-->

<ResourceParams name="jdbc/MySQLDB">
<parameter>
 <name>factory</name>
 <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>

<!-- Don't set this any higher than max_connections on your
 MySQL server, usually this should be a 10 or a few 10's
 of connections, not hundreds or thousands -->

    <parameter>
      <name>maxActive</name>
      <value>10</value>
    </parameter>

 <!-- You don't want to many idle connections hanging around
   if you can avoid it, only enough to soak up a spike in
   the load -->

   <parameter>
    <name>maxIdle</name>
    <value>5</value>
   </parameter>

 <!-- Don't use autoReconnect=true, it's going away eventually
 and it's a crutch for older connection pools that couldn't
 test connections. You need to decide whether your application
 is supposed to deal with SQLExceptions (hint, it should), and
 how much of a performance penalty you're willing to pay
 to ensure 'freshness' of the connection -->

  <parameter>
   <name>validationQuery</name>
   <value>SELECT 1</value> <-- See discussion below for update to this option -->
  </parameter>

  <!-- The most conservative approach is to test connections
  before they're given to your application. For most applications
  this is okay, the query used above is very small and takes
  no real server resources to process, other than the time used
  to traverse the network.

  If you have a high-load application you'll need to rely on
  something else. -->

  <parameter>
   <name>testOnBorrow</name>
   <value>true</value>
  </parameter>

   <!-- Otherwise, or in addition to testOnBorrow, you can test
   while connections are sitting idle -->

   <parameter>
    <name>testWhileIdle</name>
    <value>true</value>
   </parameter>

  <!-- You have to set this value, otherwise even though
   you've asked connections to be tested while idle,
   the idle evicter thread will never run -->

 <parameter>
  <name>timeBetweenEvictionRunsMillis</name>
  <value>10000</value>
 </parameter>

 <!-- Don't allow connections to hang out idle too long,
 never longer than what wait_timeout is set to on the
 server...A few minutes or even fraction of a minute
 is sometimes okay here, it depends on your application
 and how much spikey load it will see -->

 <parameter>
  <name>minEvictableIdleTimeMillis</name>
  <value>60000</value>
 </parameter>

 <!-- Username and password used when connecting to MySQL -->

 <parameter>
  <name>username</name>
  <value>someuser</value>
 </parameter>

 <parameter>
  <name>password</name>
  <value>somepass</value>
 </parameter>

 <!-- Class name for the Connector/J driver -->

 <parameter>
  <name>driverClassName</name>
  <value>com.mysql.jdbc.Driver</value>
 </parameter>

 <!-- The JDBC connection url for connecting to MySQL, notice
 that if you want to pass any other MySQL-specific parameters
 you should pass them here in the URL, setting them using the
 parameter tags above will have no effect, you will also
 need to use &amp; to separate parameter values as the
 ampersand is a reserved character in XML -->

 <parameter>
  <name>url</name>
  <value>jdbc:mysql://localhost:3306/test</value>
 </parameter>
于 2011-12-03T18:39:03.573 に答える