Question

I have followed the documentation to install DataStax Enterprise and run the Portfolio Manager demo for both Ubuntu Server and MacOSX. For both operating systems, when i run dse-demos/portfolio-manager/website/start and then navigate to the given url in a browser, in my terminal window I can see the exception listed at the bottom of my message. No data shows up in the browser.

nodetool status and opscenter both show that my node is working. I am using jdk1.7.0_51.jdk from Oracle, DS 4.0.1 and cassandra 2.0.5.24.

I assume I am missing something from my classpath or a necessary .jar is not installed. I cannot find other instances of this on your support forums, and I am unsure what I need to do to fix the issue. Do you know what is causing this exception?

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

Était-ce utile?

La solution

Unfortunately this is a bug with the packaging of the Portfolio demo war file. The good news is that it will be fixed in the 4.0.2 DSE release and that there is a workaround. That workaround is to add a missing jar to the demo war, which you can do with a couple of shell commands.

First, you need to locate the jar that should be included but isn't. This file is named thrift-server-0.3.3.jar and is included along with the other Cassandra libraries in a DSE installation. If you're running DSE from a tarball, you can find it in the resources/cassandra/lib directory. If you installed DSE from the .deb or.rpm packages, it's located in /usr/share/dse/cassandra/lib. Next, you need to create the correct directory structure so that when you added to the war file the jar has has the right path.

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

Finally, you need to add the jar to the Portfolio demo war. In a tarball installation this is demos/portfolio_manager/website/webapps/portfolio.war and in package installs it is found in /usr/share/dse-demos/portfolio_manager/website/webapps/portfolio.war. The command to run to update the war is (using the tarball location here):

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

(note the space between /tmp & WEB-INF)

You'll need to have the jar executable on your path, or use its full path.

After updating the war file and restarting the webserver, you should find that the errors disappear and you can open the page in a browser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top