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

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

新規登録して質問してみよう
ただいま回答率
85.51%
Hibernate

HibernateとはJava言語のobject-relational mapping (ORM)ライブラリであり、Object/Relational Mappingよりはるか多くの方法でアプリケーションをPOJOで機能付けることができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Cassandra

Cassandraは、key-valueストア型のデータベース管理ソフト及び オープンソースの分散データベース管理システムのことです。

Q&A

1回答

3904閲覧

Spring + Hibernate + Cassandraで動かしたいが、TTransportExceptionが発生する

microcosm

総合スコア10

Hibernate

HibernateとはJava言語のobject-relational mapping (ORM)ライブラリであり、Object/Relational Mappingよりはるか多くの方法でアプリケーションをPOJOで機能付けることができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Cassandra

Cassandraは、key-valueストア型のデータベース管理ソフト及び オープンソースの分散データベース管理システムのことです。

1グッド

1クリップ

投稿2016/12/09 23:15

編集2022/01/12 10:55

はじめまして

Spring + Hibernate + Mysqlの動作するサンプルがあり、
これをDBを NoSQLのCassandraにして動作させたいのですが、下記のようなエラーが出て動作しません。
この解決する方法ご存知の方がいらっしゃれば、どうぞご教授ください。

※具体的には、spring.xmlでのdataSourceの設定部分に誤りがあるとみています。

※なお、SpringやHibernateを使用しない Java + Cassandra での通常のJDBC接続には成功しています。

状況

Tomcat8起動時点:エラーなし
アプリケーションへのアクセス時点:以下のエラー(長いので一番最後に掲載します。)

アクセス先URL
http://localhost:8080/databasesample/deptList

環境

IDE:pleiades-e4.5
JRE:JavaSE-1.8
Tomcat:8.0.26
org.springframework-version:4.0.3.RELEASE
hibernate.version:4.3.6.Final
Cassandra:version3.9

ソース変更点抜粋

ソース自体はそのまま使いたいので、DBの変更部分コンフィグ系のみの修正です。

$ git diff 75b846f22b7a666c72a91d153dbec7075acd41bf 969c0d976a68e6e9e1ee26cbd9b697a2f5085af2 diff --git a/pom.xml b/pom.xml + <!-- https://mvnrepository.com/artifact/org.hibernate.ogm/hibernate-ogm-core --> + <dependency> + <groupId>org.hibernate.ogm</groupId> + <artifactId>hibernate-ogm-cassandra</artifactId> + <version>4.2.0.Final</version> + </dependency> + <!-- https://mvnrepository.com/artifact/org.apache-extras.cassandra-jdbc/cassandra-jdbc --> + <dependency> + <groupId>org.apache-extras.cassandra-jdbc</groupId> + <artifactId>cassandra-jdbc</artifactId> + <version>1.2.5</version> + </dependency> diff --git a/src/main/resources/spring.xml b/src/main/resources/spring.xml - <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> - <property name="driverClassName" value="com.mysql.jdbc.Driver"/> - <property name="url" value="jdbc:mysql://localhost:3306/spring_database"/> - <property name="username" value="hoge"/> - <property name="password" value="xxxx"/> <property name="testOnBorrow" value="true"/> <property name="testOnReturn" value="true"/> <property name="testWhileIdle" value="true"/> <property name="numTestsPerEvictionRun" value="3"/> <property name="minEvictableIdleTimeMillis" value="1800000"/> <property name="validationQuery" value="SELECT 1"/> </bean> + <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> + <property name="driverClassName" value="org.apache.cassandra.cql.jdbc.CassandraDriver"/> + <property name="url" value="jdbc:cassandra://localhost:9160/spring_database"/> + <property name="username" value=""/> + <property name="password" value=""/> <property name="testOnBorrow" value="true"/> <property name="testOnReturn" value="true"/> <property name="testWhileIdle" value="true"/> <property name="numTestsPerEvictionRun" value="3"/> <property name="minEvictableIdleTimeMillis" value="1800000"/> <property name="validationQuery" value="SELECT 1"/> </bean>

エラーログ

例外 org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.exception.GenericJDBCException: Could not open connection org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108) 原因 org.hibernate.exception.GenericJDBCException: Could not open connection org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54) org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126) org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112) org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:235) org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:171) org.hibernate.engine.jdbc.internal.StatementPreparerImpl.connection(StatementPreparerImpl.java:63) org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:162) org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:186) 原因 org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (org.apache.thrift.transport.TTransportException: java.net.SocketException: Connection reset) org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549) org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388) org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) ... 原因 java.sql.SQLNonTransientConnectionException: org.apache.thrift.transport.TTransportException: java.net.SocketException: Connection reset org.apache.cassandra.cql.jdbc.CassandraConnection.<init>(CassandraConnection.java:159) org.apache.cassandra.cql.jdbc.CassandraDriver.connect(CassandraDriver.java:92) org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556) ... 原因 org.apache.thrift.transport.TTransportException: java.net.SocketException: Connection reset org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:129) org.apache.thrift.transport.TTransport.readAll(TTransport.java:84) org.apache.thrift.transport.TFramedTransport.readFrame(TFramedTransport.java:129) org.apache.thrift.transport.TFramedTransport.read(TFramedTransport.java:101) ...

以上、よろしくお願いいたします。

調査続行

cassandra 3.9 から、cassandra 2.1.16 に変えてみたらエラーが少し変わりました。

org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (line 1:7 no viable alternative at input '1' (SELECT [1]) 'SELECT 1') org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549) org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388) org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)

まあ、version 3.9 で動かしたい気もありますが、とりあえず 2.X で確認してみます。
spring.xmlは読み込まれてはいて、「<bean id="dataSource"」のproperty設定部分の問題かと。
そこで、spring.xmlの以下をコメントアウトし

<!-- <property name="validationQuery" value="SELECT 1"/> -->

再度実行してみると、また次のエラーに変わりました。

原因 org.hibernate.exception.SQLGrammarException: could not prepare statement org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:80) org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126) ... 原因 java.sql.SQLSyntaxErrorException: InvalidRequestException(why:line 1:113 extraneous input 'department0_' expecting EOF) org.apache.cassandra.cql.jdbc.CassandraPreparedStatement.<init>(CassandraPreparedStatement.java:103) org.apache.cassandra.cql.jdbc.CassandraConnection.prepareStatement(CassandraConnection.java:388) org.apache.cassandra.cql.jdbc.CassandraConnection.prepareStatement(CassandraConnection.java:372) ... 原因 InvalidRequestException(why:line 1:113 extraneous input 'department0_' expecting EOF) org.apache.cassandra.thrift.Cassandra$prepare_cql3_query_result.read(Cassandra.java:39567) org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78) org.apache.cassandra.thrift.Cassandra$Client.recv_prepare_cql3_query(Cassandra.java:1625) ...

departmentsテーブル(COLUMN FAMILY)が対象ではあるけど、「department0_」というのはなくて、どこかで作られているのか不明です。Cassandraの内部で生成されているのだとすると、Cassandraまではたどり着いているとみていいだろうか。。

現状は、ここまでしかわかっていません。

A-pZ👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

解決はしていないのですが、いくつか設定ファイルを調整しているうちに、エラーの内容もコロコロと変わってきてしまい、どうもよくわからなくなってきました。

自分はどうやら、CassandraとHibernateがわかっていないようです。。。

解決していないということは、見落としている箇所がほかにもあるはずで、ここの記載情報は少ないかもしれません。環境面とソースコード面、そして設定ファイル面にて総合的に追跡していかなければいけないと感じています。

そこで、ソース全体は以下のGithubにあげました。
https://github.com/hidetarou2013/SpringDataBaseSample

奮闘中のbranchは、feature/cassandra_1 になります。

目下エラーは

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'departmentsListController' defined in file [C:\pleiades\pleiades-e4.5\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SpringDataBaseSample\WEB-INF\classes\com\example\springdatabasesample\controller\DepartmentsListController.class]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class com.example.springdatabasesample.controller.DepartmentsListController at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1076) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1021) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)

となっており、hibernate.dialect あたりの設定が不安です。
設定は以下のようにしています。

<property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.ogm.dialect.cassandra.CassandraCQL2Dialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.ogm.datastore.provider">org.hibernate.ogm.datastore.cassandra.impl.CassandraDatastoreProvider</prop> <prop key="hibernate.ogm.datastore.host">localhost</prop> <prop key="hibernate.ogm.datastore.port">9042</prop> <prop key="hibernate.ogm.datastore.database">spring_database</prop> <prop key="hibernate.search.lucene_version">LUCENE_CURRENT</prop> <prop key="hibernate.ogm.cassandra.url">jdbc:cassandra://localhost:9160</prop> <prop key="hibernate.ogm.cassandra.default_keyspace">spring_database</prop> <prop key="hibernate.ogm.cassandra.autogenerate">update</prop> </props> </property>

投稿2016/12/10 18:27

編集2016/12/10 18:35
microcosm

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

microcosm

2016/12/10 18:46

ちなみにエラーで気になるのが、以下になります。 ``` Caused by: org.hibernate.boot.registry.selector.spi.StrategySelectionException: Unable to resolve name [org.hibernate.ogm.dialect.cassandra.CassandraCQL2Dialect] as strategy [org.hibernate.dialect.Dialect] at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.selectStrategyImplementor(StrategySelectorImpl.java:128) at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveDefaultableStrategy(StrategySelectorImpl.java:155) at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveStrategy(StrategySelectorImpl.java:136) ```
microcosm

2016/12/12 07:45

以下の情報を参考にしているのですが、「hibernate.dialect」に関する情報はのっていない。 ちなみに、artifactIdでhibernate-ogm-cassandraは設定しています。 http://docs.jboss.org/hibernate/ogm/4.2/reference/en-US/html/ch14.html#cassandra_specific_configuration_properties CassandraCQL2Dialectを含んでいる JARファイルの pom.xml のdependencyの設定が不足しているのではないかとにらんでいるのですが、情報が収集できていません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問