3

デスクトップアプリケーションがあり、JDBCを利用しています。localhostを使用するときはいつでもJDBCに問題はありません。ここで、リモート接続を許可しないサーバーに接続します。アプリケーションとデータベースの間のゲートウェイとして機能するWebサービスを提供するようにアドバイスされました。

私が考えることができる別の解決策は、リモート接続を許可するmysqlサーバーを探すことです。JavaのWebサービスを明確に理解できるチュートリアルを探すのは難しいと思います。私はいくつかの調査を行い、PHPを使用してWebサービスを記述してJSONファイルを生成し、それをJavaで解析できると言われました。ただし、これを行う場合は、すべてのJDBCコードを再コーディング/削除する必要があります。

JDBCコードを削除せずにデータベースにリモート接続することは可能ですか?または、TomcatをJDBCに組み込むことはできますか?ありがとうございました!

これが私が得るものです。

スレッド「メイン」の例外com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信リンクの障害原因:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信リンクの障害原因:java.net.ConnectException:接続のタイミングアウト:接続

4

6 に答える 6

1

あなたの質問はこれに似たアーキテクチャにつながっているようです: http://yuml.me/2cc6bd7f

しかし、あなたの質問が示唆していることとは異なり、サーバーサイドモジュールはデスクトップアプリケーションからデータベースにDBクエリを中継しません。それはクライアントアプリケーションになるデスクトップアプリケーションへのサーバーとして機能します。

これは、アプリケーションの再構築(私が思うに本当の言葉ではない)を意味しますが、一般的なベストプラクティスです。サーバー側モジュールは、ユーザーを認証および承認して、データベースに対して悪意のあるアクティビティを実行できないようにする責任があります。

ここに短い答えはありません-これがあなたが行きたい方向であるかどうかを考慮する必要があります。

他の人が提案した代替案は、ファイアウォールを介してデスクトップアプリケーションからデータベースへの直接アクセスを許可することです。データベースの整合性の責任者から、そうすべきではないと言われたので、ここに投稿していると思います。

于 2013-03-25T12:06:37.867 に答える
0

データベースをWebサービスに接続することはお勧めできません。

このように、Webサービスには入出力パターンがあると考えてください。したがって、method1を使用してtable1からデータをフェッチする必要があります。table2とmethod2など...

そのため、そのデータベースサーバーにリモートアクセスを提供します。これで問題ない場合があります。

于 2013-03-25T11:50:37.170 に答える
0

MySQLでリモート接続を許可できます。実行しているサーバーに応じて、詳細についてのガイドを検索する必要があります(これdebian用です)。アプリケーションを実行している人やDBに機密データが含まれていることを信頼できない場合でも、セキュリティ上の問題が多く発生するため、そのようなことはせず、代わりにPHPを使用することを強くお勧めします。一度に接続する必要があるのがIPアドレスだけである場合は、そのIPアドレスのみの接続を許可する必要があります。これにより、セキュリティの脆弱性が小さくなります。

于 2013-03-25T11:51:29.760 に答える
0

ファイアウォールルールを除けば、JDBCを使用してリモートデータベースにアクセスすることを妨げるものは何もありません。コードにハードコーディングされている場合でも、データベースのクレデンシャルをクライアント側に公開することは一般的に悪い習慣と見なされています。これはアーキテクチャ的に欠陥のあるアプローチであり、学校の宿題以上のものを考慮すべきではありません。

ただし、解決策が必要な場合は、次のオプションを確認できます。1)Mysqlが実行されているIPアドレスを確認します。ローカルホストではなく、192.168.1.2などのIPである必要があります。2)JDBCエラーが認証に関連しているかどうかを確認し、ユーザーアカウントに適切な権限を追加する必要があります。MySQLセキュリティモデルは、ユーザー名とユーザーがログインできるIPを結び付けます。それらを修正する必要があるかもしれません。

両方が正しい場合は、JDBCの使用中に発生する正確な例外を投稿してください。

于 2013-03-25T11:53:07.783 に答える
0

Webサービスを使用する必要はありません。Webサービス、REST、RMI、ネイティブソケットなど、あらゆる形式のクライアント/サーバー通信を実装できます。これらを調査して、どれが最も適切かを判断することは価値があります。でも....

これは、特定のテクノロジーを取り巻く問題ではなく、アーキテクチャの問題として私を襲います。データベースにアクセスできるだけでなく、より豊富なAPIを提供できるサービスを実装するための道を進んでいるように思えます。たとえば、クライアントをテーブルに挿入したくない場合です。買い物かごに追加するAPIを提供する必要があります。つまり、異なるレベルの抽象化で作業している(将来、データベースを完全に異なる方法で実装する可能性があり、クライアントを変更したくない)。

上記は、JavaEEの世界およびそれ以上の標準パターンです。

于 2013-03-25T11:54:49.413 に答える
0

ここではWebサービスは必要ないと思います。この問題に対処するために、MySQLサーバーでリモートアクセスを有効にすることができます。このブログにある指示に従ってください。Windows環境でホストされているMySQLサーバーの場合は、このドキュメントも参照してください。

その後、リモートMySQLサーバードメインまたはIPアドレスでJDBCURLを更新します。

于 2013-03-25T12:02:32.577 に答える