2012-05-10 13 views
0

javaサーブレットを使用してリモートデータベースas400に接続し、JSONオブジェクトをユーザーに返す必要のあるアンドロイドアプリケーションを開発しようとしています。サーブレットをデータベースに接続する

これは私のdoGetメソッドのコードです:私は日食を通じてサーブレットを起動

protected void doGet(HttpServletRequest request,HttpServletResponse response) throws  ServletException, IOException { 
    response.setContentType("application/json"); 
    PrintWriter out = response.getWriter(); 
    out.println("{"); 

    Connection conn = null; 
    try { 
    Class.forName("com.ibm.as400.access.AS400JDBCDriver").newInstance(); 
     conn = DriverManager.getConnection("jdbc:as400://ipaddress;database name=dbname", "username", "password"); 
     System.out.println("Connected to the database"); 
    } catch (Exception e) { 
     System.out.println("error! 1"); 
     e.printStackTrace(); 
    } 


    try { 
     conn.close(); 
     System.out.println("Disconnected from database"); 
    } catch (Exception e) { 
     System.out.println("error! 2"); 
     e.printStackTrace(); 
    } 

} 

した後、それは「Class.forNameの(....)」で停止し、それは私に次のエラー与える: エラー! 1 ます。java.sql.SQLException:アプリケーション・リクエスターが接続を確立(接続がタイムアウト:接続)することはできません

at com.ibm.as400.access.JDError.throwSQLException(JDError.java:565) 
at com.ibm.as400.access.AS400JDBCConnection.setProperties(AS400JDBCConnection.java:3332) 
at com.ibm.as400.access.AS400JDBCDriver.prepareConnection(AS400JDBCDriver.java:1393) 
at com.ibm.as400.access.AS400JDBCDriver.initializeConnection(AS400JDBCDriver.java:1230) 
at com.ibm.as400.access.AS400JDBCDriver.connect(AS400JDBCDriver.java:371) 
at java.sql.DriverManager.getConnection(Unknown Source) 
at java.sql.DriverManager.getConnection(Unknown Source) 
at it.liuc.webtest.Servlet1.doGet(Servlet1.java:31) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
at java.lang.Thread.run(Unknown Source) 
Caused by: java.net.ConnectException: Connection timed out: connect 
at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
at java.net.PlainSocketImpl.connect(Unknown Source) 
at java.net.SocksSocketImpl.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at com.ibm.as400.access.PortMapper.getSocketConnection(PortMapper.java:273) 
at com.ibm.as400.access.PortMapper.getServerSocket(PortMapper.java:161) 
at com.ibm.as400.access.AS400ImplRemote.signonConnect(AS400ImplRemote.java:2334) 
at com.ibm.as400.access.AS400ImplRemote.signon(AS400ImplRemote.java:2250) 
at com.ibm.as400.access.AS400.sendSignonRequest(AS400.java:3042) 
at com.ibm.as400.access.AS400.promptSignon(AS400.java:2606) 
at com.ibm.as400.access.AS400.signon(AS400.java:3921) 
at com.ibm.as400.access.AS400.connectService(AS400.java:1175) 
at com.ibm.as400.access.AS400JDBCConnection.setProperties(AS400JDBCConnection.java:3324) 
... 20 more 
java.lang.NullPointerException 
at it.liuc.webtest.Servlet1.doGet(Servlet1.java:43) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
at java.lang.Thread.run(Unknown Source) 

をそして、それがサーバーに接続できないように思えるが、私は確信しているユーザ名、パスワード、 dbnameは正しいです。 IPアドレスの後ろにポートを挿入する必要がありますか?その他の提案はありますか?

ありがとうございます!

+1

これはアンドロイドとは関係がありませんし、サーブレットとは関係ありません。 – SJuan76

+0

私はas400 DBについてあまり考えていませんが、接続文字列にはDBサーバーのポート番号がありません。 –

答えて

1

it stops at "Class.forName(....)"

これは間違っています。その行は実行された。失敗した場合は、ClassNotFoundExceptionが表示されます。

接続先の行を実行しようとしています。それが失敗しているのです。

使用しているURLを確認してください。また、実行しているクライアントマシンにデータベースサーバーが表示されていることを確認します。クライアントマシンからデータベースサーバーにpingできますか?何かの非JDBCクライアントを使用してデータベースに接続できますか?指定した資格情報でそのデータベースにアクセスする権限がありますか?そのデータベースを所有しているDBAは、アプリケーションがアプリケーションに接続しようとしていることを認識していますか?

更新:あなたが正しく理解していることを確認するために、Javaクライアントを実行しているマシンにコマンドシェルを開いて「ping ip-address」と入力すると、「ip-アドレス "は、接続URLに入力した値と同じです。

私は私のマシンとping Googleでコマンドシェルを開いた場合、それは次のようになります。

C:>ping www.google.com 

Pinging www.l.google.com [74.125.130.147] with 32 bytes of data: 

Reply from 74.125.130.147: bytes=32 time=29ms TTL=42 
Reply from 74.125.130.147: bytes=32 time=27ms TTL=42 
Reply from 74.125.130.147: bytes=32 time=29ms TTL=42 
Reply from 74.125.130.147: bytes=32 time=28ms TTL=42 

Ping statistics for 74.125.130.147: 
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 
Approximate round trip times in milli-seconds: 
    Minimum = 27ms, Maximum = 29ms, Average = 28ms 

C:> 

あなたがない場合、あなたはあなたの答えがあります:あなたのクライアントマシンは、ネットワーク上のデータベース・サーバを見ることができません。

データベースを設定したDBAがデフォルトポートを使用していない可能性があるため、ポートは重要です。あなたは、データベースを所有している人と話し合い、これを整理する必要があります。

+0

まず、お返事ありがとうございます。私は悪い英語とJava言語についてお詫びしますが、私はこのサーバーに怒っています。 Pingが機能しません。私はアクセス許可を持っており、資格情報は正しいです。はい、あなたがこれを意味するなら、所有者は私のアプリケーションについて知っています。 ポートについてはどうですか?どちらを使うのが正しいですか?私はそれらの多くをWebで見つけようとしましたが、まだ接続できませんでした。 – user1386736

2

スタックトレースでConnectionTimedOutはどちらか

  • AS/400は、TCPコネクション
  • に返信するように設定されていない場合、ファイアウォールはどこか途中
でありとして、それはのように見えます

アプリケーションサーバーのマシンから、DBサーバーのAS/400ポートへのtelnetを実行し、接続が自動的に切断されたかどうか、またはハングしたままになっているかどうかを確認します。 Wiresharkを使って、起こっていることをより詳細に知ることができます。

+0

AS/400はTCP接続に何か応答する必要がありますか? ADO/ODBCを使用してこのデータベースに接続するもう​​1つのソフトウェアがあり、うまく動作します。私はtelnetをやってみましたが、接続を確立できないと言います。 – user1386736

+0

AS/400の構成方法がわかりませんが、データベースがJDBCドライバーに応答していません。すでにODBC接続がある場合は、回避策としてODBC-JDBCブリッジを使用できます。 – SJuan76

1

このプログラムには適切なドライバライブラリがありますか?まず、データベース接続ドライバをダウンロードし、プログラムにインポートします。リモートデータベースへの接続を作成し、クラスパスと接続パスを与えます。そしてあなたのプログラムでは、クラスパスと接続パスがあなたのプログラムに与えます。プログラムを実行します。あなたの問題を解決します。