2013-04-11 2 views
2

Наконец-то я смог создать экземпляр сервера в своем приложении Java, которое использует встроенную базу данных, как описано here. Это работает правильно, пока я запускаю его из Eclipse, но на самом деле это не моя цель (мое приложение, между прочим, кормит базу данных новыми узлами и отношениями). У меня есть блок Neo4j, который должен быть моим экземпляром сервера, и я хочу развернуть мое приложение там как файл JAR. Таким образом, я хотел бы получить доступ к веб-интерфейсу оттуда. Я уже тестировал его: при запуске приложения java на моей машине разработки любая машина в той же частной сети может без проблем получить доступ к интерфейсу. Проблема возникает при попытке упаковать все в JAR для распространения сервера.Данные Spring Neo4j: использование сервера Neo4j со встроенной: упаковка JAR

Конкретное стек ошибка выглядит следующим образом:

<!-- bean initialization stuff --> 

Apr 11, 2013 1:14:30 PM org.neo4j.kernel.impl.transaction.xaframework.XaLogicalLog doInternalRecovery 
INFO: Non clean shutdown detected on log [/data/production/graph.db/nioneo_logical.log.2]. Recovery started ... 
Apr 11, 2013 1:14:32 PM org.neo4j.kernel.impl.transaction.xaframework.XaLogicalLog doInternalRecovery 
INFO: Non clean shutdown detected on log [/data/production/graph.db/index/lucene.log.2]. Recovery started ... 
2013-04-11 13:14:34,787 INFO [org.springframework.transaction.jta.JtaTransactionManager] - Using JTA UserTransaction: [email protected] 
2013-04-11 13:14:34,787 INFO [org.springframework.transaction.jta.JtaTransactionManager] - Using JTA TransactionManager: [email protected]c08 
Apr 11, 2013 1:14:35 PM org.neo4j.server.logging.Logger log 
INFO: Starting Neo Server on port [7474] with [40] threads available 
Logger not configured, logging to std out instead: [FINE] Adding JAXRS packages [org.neo4j.server.rest.discovery] at [/] 
Apr 11, 2013 1:14:35 PM org.neo4j.server.logging.Logger log 
INFO: Mounted discovery module at [/] 
Logger not configured, logging to std out instead: [FINE] Adding JAXRS packages [org.neo4j.server.rest.web] at [/db/data] 
Apr 11, 2013 1:14:35 PM org.neo4j.server.logging.Logger log 
INFO: Mounted REST API at [/db/data] 
Logger not configured, logging to std out instead: [FINE] Adding JAXRS packages [org.neo4j.server.webadmin.rest] at [/db/manage] 
Apr 11, 2013 1:14:35 PM org.neo4j.server.logging.Logger log 
INFO: Mounted management API at [/db/manage] 
Apr 11, 2013 1:14:35 PM org.neo4j.server.logging.Logger log 
INFO: Mounted webadmin at [/webadmin] 
2013-04-11 13:14:35,494 INFO [org.mortbay.log] - Logging to org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog 
Apr 11, 2013 1:14:35 PM org.neo4j.server.logging.Logger log 
INFO: Mounting static content at [/webadmin] from [webadmin-html] 
Logger not configured, logging to std out instead: [FINE] Found [jar:file:/home/jaranda/cicerone/cicerone-crawlers/target/cicerone-crawlers-0.0.1-SNAPSHOT.jar!/webadmin-html] 
Logger not configured, logging to std out instead: [FINE] Mounting static content from [jar:file:/home/jaranda/cicerone/cicerone-crawlers/target/cicerone-crawlers-0.0.1-SNAPSHOT.jar!/webadmin-html] at [/webadmin] 
Logger not configured, logging to std out instead: [FINE] Mounting servlet at [/db/manage] 
Logger not configured, logging to std out instead: [FINE] Mounting servlet at [/db/data] 
Logger not configured, logging to std out instead: [FINE] Mounting servlet at [/] 
2013-04-11 13:14:35,556 INFO [org.mortbay.log] - jetty-6.1.x 
2013-04-11 13:14:35,915 INFO [org.mortbay.log] - NO JSP Support for /webadmin, did not find org.apache.jasper.servlet.JspServlet 
Apr 11, 2013 1:14:36 PM com.sun.jersey.api.core.PackagesResourceConfig init 
INFO: Scanning for root resource and provider classes in the packages: 
    org.neo4j.server.webadmin.rest 
Apr 11, 2013 1:14:39 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses 
INFO: Root resource classes found: 
    class org.neo4j.server.webadmin.rest.JmxService 
    class org.neo4j.server.webadmin.rest.ConsoleService 
    class org.neo4j.server.webadmin.rest.MonitorService 
    class org.neo4j.server.webadmin.rest.RootService 
Apr 11, 2013 1:14:39 PM com.sun.jersey.api.core.ScanningResourceConfig init 
INFO: No provider classes found. 
Apr 11, 2013 1:14:39 PM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate 
INFO: Initiating Jersey application, version 'Jersey: 1.9 09/02/2011 11:17 AM' 
Apr 11, 2013 1:14:40 PM com.sun.jersey.api.core.PackagesResourceConfig init 
INFO: Scanning for root resource and provider classes in the packages: 
    org.neo4j.server.rest.web 
Apr 11, 2013 1:14:43 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses 
INFO: Root resource classes found: 
    class org.neo4j.server.rest.web.ResourcesService 
    class org.neo4j.server.rest.web.RestfulGraphDatabase 
    class org.neo4j.server.rest.web.DatabaseMetadataService 
    class org.neo4j.server.rest.web.ExtensionService 
    class org.neo4j.server.rest.web.CypherService 
    class org.neo4j.server.rest.web.BatchOperationService 
Apr 11, 2013 1:14:43 PM com.sun.jersey.api.core.ScanningResourceConfig init 
INFO: No provider classes found. 
Apr 11, 2013 1:14:43 PM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate 
INFO: Initiating Jersey application, version 'Jersey: 1.9 09/02/2011 11:17 AM' 
Apr 11, 2013 1:14:43 PM com.sun.jersey.api.core.PackagesResourceConfig init 
INFO: Scanning for root resource and provider classes in the packages: 
    org.neo4j.server.rest.discovery 
Apr 11, 2013 1:14:46 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses 
INFO: Root resource classes found: 
    class org.neo4j.server.rest.discovery.DiscoveryService 
Apr 11, 2013 1:14:46 PM com.sun.jersey.api.core.ScanningResourceConfig init 
INFO: No provider classes found. 
Apr 11, 2013 1:14:46 PM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate 
INFO: Initiating Jersey application, version 'Jersey: 1.9 09/02/2011 11:17 AM' 
2013-04-11 13:14:46,751 INFO [org.mortbay.log] - Started [email protected]:7474 
Apr 11, 2013 1:14:46 PM org.neo4j.server.logging.Logger log 
INFO: Server started on [http://172.20.100.33:7474/] 
2013-04-11 13:14:47,616 INFO [org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler] - Initializing ExecutorService 'taskScheduler' 
2013-04-11 13:14:47,714 INFO [com.twitter.hbc.httpclient.BasicClient] - New connection executed: Hosebird-Client-02, endpoint: /1.1/statuses/filter.json?delimited=length&stall_warnings=true 
2013-04-11 13:14:48,346 INFO [com.twitter.hbc.httpclient.ClientBase] - Hosebird-Client-02 Establishing a connection 
Apr 11, 2013 1:14:48 PM com.sun.jersey.spi.container.ContainerResponse write 
SEVERE: A message body writer for Java class [B, and Java type class [B, and MIME media type application/json was not found 
Apr 11, 2013 1:14:48 PM com.sun.jersey.spi.container.ContainerResponse write 
SEVERE: The registered message body writers compatible with the MIME media type are: 
*/* -> 
    com.sun.jersey.server.impl.template.ViewableMessageBodyWriter 

Apr 11, 2013 1:14:48 PM com.sun.jersey.spi.container.ContainerResponse logException 
SEVERE: Mapped exception to response: 500 (Internal Server Error) 
javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body writer for Java class [B, and Java type class [B, and MIME media type application/json was not found 
    at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:285) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1437) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339) 
    at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
    at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:326) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:926) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410) 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 
Caused by: com.sun.jersey.api.MessageException: A message body writer for Java class [B, and Java type class [B, and MIME media type application/json was not found 
    ... 22 more 

Я должен сказать, что я довольно новыми для Spring, Maven и сам Neo4j. Я совершенно потерял, как избавиться от этой проблемы. Веб-интерфейс фактически загружается, но без какой-либо функциональности. См. Прилагаемый снимок:

Neo4j web interface with no functionality.

Бэкэнд моего приложения прекрасно работает, несмотря на эту проблему, и фактически создаются новые узлы/отношения.

Я думаю, что этот вопрос (или его вид) обсуждался here, но ответ мне непонятен.

Любые предложения? Заранее спасибо!

ответ

4

Наконец-то я нашел решение, которое сделало трюк. Я просто расскажу об этом, если у кого-то еще будет такая же проблема. Проблема заключалась в том, что некоторые файлы в META-INF/services были перезаписаны во время процесса упаковки в банку, так как по умолчанию их содержимое не слилось. По ссылке Maven-тень плагин:

JAR-файлы, обеспечивающие реализацию некоторых интерфейсов часто поставляться с а/услуги/ каталог META-INF, который отображает интерфейсы для их классов реализации для поиска локатором , До слияние несколько реализаций одного и того же интерфейса в одну служебную запись, СервисыResourceTransformer.

Так добавить этот трансформатор в моем П просто работал, например .:

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>2.0</version> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <transformers> 
       <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> 
       </transformers> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 

Надеется, что это помогает!