【问题标题】:Inserting into cassandra using hector on Glassfish 3.1在 Glassfish 3.1 上使用 hector 插入 cassandra
【发布时间】:2012-03-04 05:50:39
【问题描述】:

我正在尝试使用 hector 和 hector wiki 给出的 SchemaManipulation 示例将键空间插入 cassandra。

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> 

我在 Eclipse 3.7.1 Indigo 中运行此代码,该代码在作为 java 应用程序执行时可以工作并插入到 cassandra 中,但是当我在服务器上运行它时却没有。

Cassandra 作为本地主机在其默认端口上运行,而 glasfish 也在端口 8080 上的本地主机上运行。

我认为问题在于我没有将赫克托罐子放在正确的位置,赫克托罐子已经添加到构建路径中,但我不确定这是否也将它们添加到服务器中。

任何帮助将不胜感激,因为我找不到有用的 cassandra 文档。

编辑:我已将 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)

【问题讨论】:

  • 您是说它在本地运行时有效,但在 cassandra 在远程服务器上运行时无效?您是否更改了 cassandra conf 中的“rpc_address”设置?它仅使用默认设置侦听本地接口。
  • cassandra 和 glassfish 都在本地运行。
  • 我不熟悉 glassfish 或 jsp 的东西,所以我不确定如何调试。如果您添加任何堆栈跟踪或崩溃时生成的错误输出,这可能会有所帮助。
  • 感谢您的帮助,我在 edin 中添加了堆栈跟踪。

标签: eclipse jsp glassfish cassandra hector


【解决方案1】:

我想你只是忘了添加 slf4j jar。

这应该可以解决问题。

事实上,堆栈跟踪表明它找不到包含在 slf4j jar 中的类 org.slf4j.LoggerFactory。

赫克托需要这个罐子,赫克托确实引发了异常。

【讨论】:

  • 我已经添加了 jar 文件,但我认为我只将它们添加到 eclipse 项目而不是实际的服务器。构建路径:link 我虽然添加了它,但显然我没有正确完成。我确实将汽车放在“C:/glassfish3/glassfish/lib”中有关如何解决此问题的任何想法,因为当我尝试将罐子添加到网络服务器的构建路径时,无论如何它都会将它们添加到库文件夹中。 (我对 eclipse 真的很陌生,这是我的大部分问题都来自 =/)
猜你喜欢
  • 2013-08-27
  • 2012-08-04
  • 2012-02-28
  • 2012-07-05
  • 2012-04-25
  • 2015-05-06
  • 2015-06-03
  • 1970-01-01
  • 2012-08-03
相关资源
最近更新 更多