2012-02-12 13 views
2

hectorとhector wikiから与えられたSchemaManipulationの例を使用して、cassandraにキースペースを挿入しようとしています。Glassfishでhectorを使用してcassandraに挿入3.1

package net.zanity.live; 

import java.util.Arrays; 
import java.util.List; 

import me.prettyprint.cassandra.model.BasicColumnDefinition; 
import me.prettyprint.cassandra.model.BasicColumnFamilyDefinition; 
import me.prettyprint.cassandra.serializers.StringSerializer; 
import me.prettyprint.cassandra.service.ThriftCfDef; 
import me.prettyprint.hector.api.Cluster; 
import me.prettyprint.hector.api.ddl.*; 
import me.prettyprint.hector.api.exceptions.HectorException; 
import me.prettyprint.hector.api.factory.HFactory;  

/** 
* 
* @author zznate 
* 
*/ 
public class SchemaManipulation { 

private static final String DYN_KEYSPACE = "YOUWantToSeeThis"; 
private static final String DYN_CF = "DynamicCf"; 
private static final String CF_SUPER = "SuperCf"; 

private static StringSerializer stringSerializer = StringSerializer.get(); 

public static void main(String[] args) throws Exception { 

    Cluster cluster = HFactory.getOrCreateCluster("TestCluster", "localhost:9160"); 

    try { 
     if (cluster.describeKeyspace(DYN_KEYSPACE) != null) { 
      cluster.dropKeyspace(DYN_KEYSPACE); 
     } 

     BasicColumnDefinition columnDefinition = new BasicColumnDefinition(); 
     columnDefinition.setName(stringSerializer.toByteBuffer("birthdate")); 
     columnDefinition.setIndexName("birthdate_idx"); 
     columnDefinition.setIndexType(ColumnIndexType.KEYS); 
     columnDefinition.setValidationClass(ComparatorType.LONGTYPE.getClassName()); 

     BasicColumnFamilyDefinition columnFamilyDefinition = new BasicColumnFamilyDefinition(); 
     columnFamilyDefinition.setKeyspaceName(DYN_KEYSPACE); 
     columnFamilyDefinition.setName(DYN_CF); 
     columnFamilyDefinition.addColumnDefinition(columnDefinition); 

     BasicColumnFamilyDefinition superCfDefinition = new BasicColumnFamilyDefinition(); 
     superCfDefinition.setKeyspaceName(DYN_KEYSPACE); 
     superCfDefinition.setName(CF_SUPER); 
     superCfDefinition.setColumnType(ColumnType.SUPER); 



     ColumnFamilyDefinition cfDefStandard = new ThriftCfDef(columnFamilyDefinition); 
     ColumnFamilyDefinition cfDefSuper = new ThriftCfDef(superCfDefinition); 

     KeyspaceDefinition keyspaceDefinition = 
      HFactory.createKeyspaceDefinition(DYN_KEYSPACE, "org.apache.cassandra.locator.SimpleStrategy", 
       1, Arrays.asList(cfDefStandard, cfDefSuper)); 

     cluster.addKeyspace(keyspaceDefinition); 

     // insert some data 

     List<KeyspaceDefinition> keyspaces = cluster.describeKeyspaces(); 
     for (KeyspaceDefinition kd : keyspaces) { 
      if (kd.getName().equals(DYN_KEYSPACE)) { 
       System.out.println("Name: " +kd.getName()); 
       System.out.println("RF: " +kd.getReplicationFactor()); 
       System.out.println("strategy class: " +kd.getStrategyClass()); 
       List<ColumnFamilyDefinition> cfDefs = kd.getCfDefs(); 
       for (ColumnFamilyDefinition def : cfDefs) { 
        System.out.println(" CF Type: " +def.getColumnType()); 
        System.out.println(" CF Name: " +def.getName()); 
        System.out.println(" CF Metadata: " +def.getColumnMetadata()); 
       } 


      } 
     } 


    } catch (HectorException he) { 
     he.printStackTrace(); 
    } 
    cluster.getConnectionManager().shutdown(); 
    } 

} 

JSPコード:

<%@page language="java" import="net.zanity.live.*" contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
        "http://www.w3.org/TR/html4/loose.dtd"> 

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>GlassFish JSP Page</title> 
    </head> 
    <body> 
    <% out.println("CAKrE"); Test test = new Test(); out.println("sting displayed here: " + test.Testt()); %> 
    After this text loads the cassandra schema test will run and prolly crash the webapp 
    <% SchemaManipulation cI = new SchemaManipulation(); SchemaManipulation.main(new String [0]); %> 
    </body> 
</html> 

イム私が実行したときカサンドラへのJavaアプリケーションの動作およびインサートとして、実行時にEclipseでこのコード3.7.1インディゴとコードを実行しているが、サーバー上にはありません。

カサンドラは、ポート、私は問題はイムが正しい場所にヘクターのjarファイルを置くことではないと思います8080

、ヘクターにローカルホスト上で実行しているローカルホストとglasfishとしてそのデフォルトポートで実行されていますjarsはすでにビルドパスに追加されていますが、それがサーバーにも追加されているかどうかはわかりません。

私がcassandraの有用なドキュメントを見つけることに失敗しているので、助けてください。

EDIT:私は問題ではなかったサーバーにjarファイルを追加しましたが、問題は未解決です。エラーの

スタックトレース:

WARNING: StandardWrapperValve[jsp]: PWC1406: Servlet.service() for servlet jsp threw exception 
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 
    at me.prettyprint.cassandra.service.AbstractCluster.<init>(AbstractCluster.java:44) 
    at me.prettyprint.cassandra.service.ThriftCluster.<init>(ThriftCluster.java:21) 
    at me.prettyprint.hector.api.factory.HFactory.createCluster(HFactory.java:192) 
    at me.prettyprint.hector.api.factory.HFactory.getOrCreateCluster(HFactory.java:139) 
    at me.prettyprint.hector.api.factory.HFactory.getOrCreateCluster(HFactory.java:128) 
    at net.zanity.live.SchemaManipulation.main(SchemaManipulation.java:36) 
    at org.apache.jsp.index_jsp._jspService(index_jsp.java:61) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:403) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:492) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:378) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) 
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98) 
    at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170) 
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) 
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
    at java.lang.Thread.run(Thread.java:722) 
+0

ローカルで実行すると動作しますが、cassandraがリモートサーバーで動作している場合は動作しません。あなたはcassandra confの 'rpc_address'設定を変更しましたか?ローカルインターフェイス上でのみデフォルト設定でリッスンします。 – nickmbailey

+0

cassandraとglassfishの両方がローカルで実行されています。 –

+0

私はglassfishやjspのものに慣れていないので、どうやってデバッグするのかは分かりません。スタックトレースを追加したり、クラッシュしたときに生成されるエラー出力を追加すると役立ちます。 – nickmbailey

答えて

1

私はあなただけでも、SLF4Jのjarファイルを追加するのを忘れだと思います。

これで問題は解決します。

実際、スタックトレースは、slf4j jarに含まれるorg.slf4j.LoggerFactoryクラスを見つけることができないと言っています。

この瓶はヘクターにとって必要で、実際ヘクターは例外を起こします。

+0

私はjarファイルを追加しましたが、実際のサーバーではなく、Eclipseプロジェクトに追加したと思います。 ビルドパス:[リンク](http://prikachi.com/images/848/4399848B.jpg) 私はそれを追加しましたが、明らかに正しく行っていません。私は "C:/ glassfish3/glassfish/lib"に車を落としました これを修正する方法はありません。ウェブサーバーのビルドパスにjarファイルを追加しようとすると、ライブラリフォルダに追加されます。 (私は本当にEclipseに新しい、これは私の問題のほとんどがどこから来ているかです/) –

関連する問題