在Portfolio Manager演示期间连接到网站时抛出异常

时间:2014-03-26 22:04:30

标签: datastax-enterprise

我已按照文档安装DataStax Enterprise并运行Ubuntu Server和MacOSX的Portfolio Manager演示。对于这两种操作系统,当我运行dse-demos / portfolio-manager / website / start然后在浏览器中导航到给定的url时,在我的终端窗口中,我可以看到消息底部列出的异常。浏览器中没有数据显示。

nodetool status和opscenter都显示我的节点正在运行。我在用 来自Oracle,DS 4.0.1和cassandra 2.0.5.24的jdk1.7.0_51.jdk。

我假设我遗漏了类路径中的某些内容,或者没有安装必要的.jar。我在您的支持论坛上找不到其他此类实例,我不确定我需要做些什么来解决这个问题。你知道导致这个例外的原因吗?

/ portfolio / service出错 java.lang.NoClassDefFoundError:com / thinkaurelius / thrift / util / TBinaryProtocol $ Factory     在com.datastax.bdp.util.CassandraProxyClient.getConnection(CassandraProxyClient.java:668)     在com.datastax.bdp.util.CassandraProxyClient.createConnection(CassandraProxyClient.java:319)     在com.datastax.bdp.util.CassandraProxyClient.initialize(CassandraProxyClient.java:396)     在com.datastax.bdp.util.CassandraProxyClient。(CassandraProxyClient.java:376)     在com.datastax.bdp.util.CassandraProxyClient.newProxyConnection(CassandraProxyClient.java:259)     在com.datastax.bdp.util.CassandraProxyClient.newProxyConnection(CassandraProxyClient.java:306)     在com.datastax.demo.portfolio.controller.PortfolioMgrHandler.getClient(PortfolioMgrHandler.java:204)     在com.datastax.demo.portfolio.controller.PortfolioMgrHandler.get_portfolios(PortfolioMgrHandler.java:73)     at com.datastax.demo.portfolio.PortfolioMgr $ Processor $ get_portfolios.getResult(PortfolioMgr.java:177)     在com.datastax.demo.portfolio.PortfolioMgr $ Processor $ get_portfolios.getResult(PortfolioMgr.java:162)     在org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)     在org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)     在org.apache.thrift.server.TServlet.doPost(TServlet.java:83)     在javax.servlet.http.HttpServlet.service(HttpServlet.java:727)     在javax.servlet.http.HttpServlet.service(HttpServlet.java:820)     在org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)     在org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:367)     在org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)     在org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)     at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)     在org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)     在org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:211)     在org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)     在org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)     在org.mortbay.jetty.Server.handle(Server.java:285)     在org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:502)     at org.mortbay.jetty.HttpConnection $ RequestHandler.content(HttpConnection.java:835)     在org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:641)     在org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:208)     在org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:378)     at org.mortbay.jetty.bio.SocketConnector $ Connection.run(SocketConnector.java:226)     在org.mortbay.thread.BoundedThreadPool $ PoolThread.run(BoundedThreadPool.java:442) 引起:java.lang.ClassNotFoundException:com.thinkaurelius.thrift.util.TBinaryProtocol $ Factory     在java.net.URLClassLoader $ 1.run(URLClassLoader.java:366)     在java.net.URLClassLoader $ 1.run(URLClassLoader.java:355)     at java.security.AccessController.doPrivileged(Native Method)     在java.net.URLClassLoader.findClass(URLClassLoader.java:354)     at java.lang.ClassLoader.loadClass(ClassLoader.java:425)     at java.lang.ClassLoader.loadClass(ClassLoader.java:358)     在org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:375)     在org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:337)

1 个答案:

答案 0 :(得分:0)

不幸的是,这是Portfolio演示战争文件打包的错误。好消息是它将在4.0.2 DSE版本中修复,并且有一个解决方法。解决方法是在演示战中添加一个丢失的jar,你可以使用几个shell命令。

首先,您需要找到应该包含但不包含的jar。此文件名为thrift-server-0.3.3.jar,与DSE安装中的其他Cassandra库一起包含在内。如果您从tarball运行DSE,可以在resources/cassandra/lib directory中找到它。如果您从.deb或.rpm软件包安装了DSE,它位于/usr/share/dse/cassandra/lib。接下来,您需要创建正确的目录结构,以便在添加到war文件时jar具有正确的路径。

mkdir -p /tmp/WEB-INF/lib
cp thrift-server-0.3.3.jar /tmp/WEB-INF/lib/

最后,您需要将jar添加到Portfolio demo war中。在tarball安装中,这是demos/portfolio_manager/website/webapps/portfolio.war,在软件包安装中,它位于/usr/share/dse-demos/portfolio_manager/website/webapps/portfolio.war中。运行以更新战争的命令是(使用此处的tarball位置):

jar uf demos/portfolio_manager/website/webapps/portfolio.war -C /tmp WEB-INF/lib

(请注意/tmp& WEB-INF

之间的空格

您需要在路径上使用jar可执行文件,或使用其完整路径。

更新war文件并重新启动网络服务器后,您会发现错误消失,您可以在浏览器中打开该页面。