質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.58%

Elipseを使用し、javaから Cassandra に接続ができない。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,098

kenji267

score 50

 前提・実現したいこと

Eclipseを使用した開発環境で、Javaからcassandraにアクセスし、何か(キースペース等、とりあえずcassandraにアクセスして何か)を表示しようと試みています。

以下のサイト等参考にしながら行っています。
http://d.hatena.ne.jp/akishin999/20100430/1272642657

 該当のソースコード

import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Map;

import org.apache.cassandra.thrift.Cassandra;
import org.apache.cassandra.thrift.Column;
import org.apache.cassandra.thrift.ColumnPath;
import org.apache.cassandra.thrift.ConsistencyLevel;
import org.apache.cassandra.thrift.InvalidRequestException;
import org.apache.cassandra.thrift.NotFoundException;
import org.apache.cassandra.thrift.TimedOutException;
import org.apache.cassandra.thrift.UnavailableException;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;

import com.datastax.driver.core.KeyspaceMetadata;

/**
 * シンプルなインサート。
 * 
 */
public class SimpleInsert1 {

    public static void main(String[] args) {
        try {

            // Thrift を使用して Cassandra に接続
            TTransport port = new TSocket("localhost", 9160);
            TProtocol protocol = new TBinaryProtocol(port);
            Cassandra.Client client = new Cassandra.Client(protocol);
            port.open();

            // クラスタ名の表示
            System.out.printf("Cluster name : [%s]\n", client.describe_cluster_name());

            // バージョンの表示
            System.out.printf("Version : [%s]\n", client.describe_version());

//            // 接続中クラスタの全キースペースを取得
//            for (String keyspace : client.describe_keyspaces()) {
//                // キースペース名の表示
//                System.out.printf("Keyspace : [%s]\n", keyspace);
//                // キースペース内の全 Column Family の取得
//                for (Map.Entry<String, Map<String, String>> entry : client.describe_keyspace(keyspace).entrySet()) {
//                    System.out.printf("\tColumn Family : [%s]\n", entry.getKey());
//                    for (Map.Entry<String, String> innerEntry : entry.getValue().entrySet()) {
//                        System.out.printf("\t\t[%s]:[%s]\n", innerEntry.getKey(), innerEntry.getValue());
//                    }
//                }
//            }

            port.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 補足情報(使用バージョンなど)

Eclipse:Version: 2018-09 (4.9.0)
cassandra:apache-cassandra-3.11.3 6

 発生している問題・エラーメッセージ

上記バージョンでおこなていますが、デバッグするとport.open();のところでエラーが検出されます。
一体どういう理由が考えられるのでしょうか?

org.apache.thrift.transport.TTransportException: java.net.ConnectException: Connection refused (Connection refused)
    at org.apache.thrift.transport.TSocket.open(TSocket.java:187)
    at SimpleInsert1.main(SimpleInsert1.java:34)
Caused by: java.net.ConnectException: Connection refused (Connection refused)
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at org.apache.thrift.transport.TSocket.open(TSocket.java:182)
    ... 1 more

以下のメッセージにもはまっており、デバッグができかねる状況です。

「注: この要素の Javadoc は、添付されたソースまたは添付された Javadoc で見つかりませんでした。」

 試したこと

以下を設定しましたが表示されません。
イメージ説明

調べていますが解決していません。可能であればこちらもご教授頂ければ助かります。

 状況

これくらいは自力で調査していけと言われそうですが、このテーマを行ってから結構時間がたっています。
java、eclipseにもそんなに詳しいわけではなく、調べるところが多いです。
効率のいい道筋があればいいですが試行錯誤でできることから少しずつでも前に進めています。
もう少しスピードをあげたいです。
解決の方向としておそらく今回のバージョンに合わせ、接続箇所を変更する必要があると思いますので、そこを中心に調査中です。
しかしながらその調査にあたりわからないことが色々あり、例えば上記のjavadocに関してで、これを設定しないとデバッグの調査が進みません。
1つ1つの調査に時間がかかりすぎています。
調査はもちろん進めますが、何かわかることがあればお力いただきたいです。

どうかよろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

【1】
エラーメッセージにConnection refused (Connection refused)とありますので、接続できなかったよエラーですね。
現時点で出されている情報から推測すると、下記が考えられます。

  • ローカルにCassandraが構築されていない。
  • Cassandraのポートが空いていない。
  • Cassandraにログインするための情報を別の場所で持ってるんでしょうけど、そのパスワード等が間違っている。

【2】
自分が業務で、WebアプリケーションでCassandraを使用した時は、下記URLに乗ってる感じで接続させましたが、絶対Thrift使わないといけないんでしょうか?(datastaxのJavaのドライバーとか

http://blog.katty.in/6408

【3】
注: この要素の Javadoc は、添付されたソースまたは添付された Javadoc で見つかりませんでした。
については、単純にJavadocが書かれていないか、関連付いてないかと思うので下記を試すのはいかがでしょうか。
http://www.atmarkit.co.jp/ait/articles/0408/03/news106.html

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/06 01:05

    あと、Javaのバージョン関係あるかもなので確認してみると良いです。https://stackoverflow.com/questions/29446187/cassandra-refusing-connection

    キャンセル

  • 2018/11/06 01:08

    連投すみません。この記事も確認してみて下さい。pc_ipaddressの設定について書かれてます。http://app.road.jp.net/?p=1801

    キャンセル

  • 2018/11/06 22:52

    回答ありがとうございます。
    本件に取り組むにあたり他に行うことがあるだろうと考えまずはvagrant環境でcqlの処理など基本的な所から取り組んでいます。近い日に何とか上記回答を活かせるようにしたいと思います。
    本件は一旦クローズし、近いうちに仕切り直したいと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.58%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る