我已按照文档安装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)
答案 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文件并重新启动网络服务器后,您会发现错误消失,您可以在浏览器中打开该页面。