当前位置: 首页 > 知识库问答 >
问题:

非托管服务器插件中Spring数据Neo4j中的Jersey/Spring集成

夹谷浩宕
2023-03-14

在尝试将spring和jersey集成到我的spring-data-neo4j非托管服务器插件中时,我有点不知所措。我已经创建了带有neo4j注释的POJO模型,以便在商店中持久化。除此之外,我还为数据操作创建了spring-data-neo4j存储库。我创建了一个springContext。xml文件并将其放在resources文件夹下。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:neo4j="http://www.springframework.org/schema/data/neo4j" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
    http://www.springframework.org/schema/data/neo4j http://www.springframework.org/schema/data/neo4j/spring-neo4j.xsd">

    <context:annotation-config />
    <context:spring-configured />

    <neo4j:repositories base-package="com.mycompany.poc.graph.repositories" /> 
    <context:component-scan base-package="com.mycompany.poc.rest" /> 
</beans>

此外,我已经设置了Spring显示器初始化器并初始化了Spring上下文.xml。

import com.mycompany.poc.graph.repositories.NodeObjectGraphRepository;
public class SpringExtensionInitializer extends SpringPluginInitializer {

    @SuppressWarnings("unchecked")
    public SpringExtensionInitializer() {
        super(new String[] {
            "META-INF/spring/springContext.xml"
        }, expose("template", Neo4jTemplate.class), 
           expose("nodeObjectGraphRepository", NodeObjectGraphRepository.class),
           expose("pathController", PathController.class));        
    }

}

我已通过路径控制器暴露了泽西岛Restendpoint的业务服务。

package com.mycompany.poc.rest;
import com.mycompany.poc.graph.repositories.NodeObjectGraphRepository;

@Path("/path")
@Component
public class PathController {

    @Autowired NodeObjectGraphRepository nodeObjectGraphRepository;

    @GET
    @Path("/paths")
    @Produces(MediaType.APPLICATION_JSON)
    public Response paths(@QueryParam("startNode") Long startNodeId, @QueryParam("endNode") Long endNodeId) {
        Response response = null;
        if( startNodeId != null && endNodeId != null){
            try{
                EndResult endResult = nodeObjectGraphRepository.getPathsBetweenNodes(startNodeId, endNodeId);
                response = Response.ok().entity(endResult).build();

            }catch(Exception e){
                response = Response.serverError().entity(ExceptionUtils.getFullStackTrace(e)).build();
            }
        }else{
            response = Response.serverError().entity("Invalid Inputs").build();
        }        
        return response;
    }
}

我已经用Spring构造型“组件”注释了PathController类,并且还通过Spring自动布线注入了“节点对象图存储库”对象。但是,我得到一个空节点对象图形存储库对象,因此无法使用存储库。在springContext.xml中,我设置了对Spring数据neo4j存储库和泽西岛控制器的扫描,并用Spring构造型“组件”注释。我无法弄清楚如何注入Spring依赖性。任何帮助都非常感谢。

共有1个答案

鱼恩
2023-03-14

我解决了。多亏了陶伦.米尔斯。我听从了他的建议。必须使用@InjectParam而不是@Autowired。我能够通过使用@InjectParam而不是@Autowired注释来注入spring beans。但是,我不能注入Spring数据Neo4j存储库。当我启动Neo4j社区服务器时,控制台日志中出现错误。

INFO: Root resource classes found:
  class com.mycompany.poc.rest.PathController
May 03, 2014 6:36:55 AM com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.
May 03, 2014 6:36:55 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.9 09/02/2011 11:17 AM'
May 03, 2014 6:36:56 AM com.sun.jersey.spi.inject.Errors processErrorMessages
SEVERE: The following errors and warnings have been detected with resource and/or provider classes:
  **SEVERE: The class com.mycompany.poc.graph.repositories.NodeObjectGraphRepository is an interface and cannot be instantiated.**
06:36:56.397 [AWT-EventQueue-0] WARN  /extensions - unavailable
com.sun.jersey.spi.inject.Errors$ErrorMessagesException: null
    at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170) ~[neo4j-desktop-2.0.2.jar:2.0.2]
    at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136) ~[neo4j-desktop-2.0.2.jar:2.0.2]
    at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199) ~[neo4j-desktop-2.0.2.jar:2.0.2]
 类似资料:
  • 问题内容: 我了解托管bean的工作方式类似于控制器,因为你的唯一任务是将“视图层”与模型“链接”。 要将bean用作托管bean,我必须声明注释,这样我就可以直接与bean通信JSF。 如果要在此managedBean中注入某些组件(来自Spring),则有两种可能的方法: 在ManagedBean中选择属性(例如“ BasicDAO dao”),然后在该属性上方进行声明。这样做,我是将”bas

  • 我理解托管bean的工作方式类似于控制器,因为您唯一的任务是将视图层与模型“链接”。 要将bean用作托管bean,我必须声明注释,这样我就可以直接与bean进行JSF通信。 如果我想在这个managedBean中注入一些组件(来自Spring),我有两种可能的方法: > 选择ManagedBean中的属性(如“basicdao dao”)并在该属性上方声明。为此,我在ManagedBean中注入

  • 我部署了一个Neo4j非托管扩展。可以使用REST客户端调用非托管扩展并成功返回结果。问题是,当我尝试从另一个java类调用/调用非托管扩展时,它会继续抛出未经授权的401。 我使用Spring RestTemboard来调用非托管扩展。 我的代码: 完全错误:

  • 问题内容: 我有Neo4j非托管扩展。我希望将某些服务创建为单例并通过我的资源提供。 像这样: 如何做到这一点? 问题答案: Neo4j具有PluginLifecycle接口,这使我们有可能进入Neo4j服务器生命周期,并为注入博客文章提供我们自己的服务。 因此,我们有服务。让我们以这个为例: 现在,我们需要进行自己的实现: 如您所见,可注射列表目前为空。我们将很快在那里添加我们的服务。 重要提示

  • 我终于能够在我的java应用程序中创建一个服务器实例,使用嵌入式数据库,如下所述。当我在Eclipse上运行它时,它可以正常工作,但这实际上不是我的目的(我的应用程序在其他事情之间,为数据库提供新的节点和关系)。我有一个Neo4j盒子,它应该是我的服务器实例,我想把我的应用程序作为JAR文件部署在那里。这样,我想从那里访问web界面。我已经对它进行了测试:在我的开发机器上运行java应用程序时,同

  • 我想用Spring构建一个RESTful应用程序,使用Neo4j作为数据库。我(非常简单地)想要的是一个应用程序,它通过POST获取实体(如用户),将它们保存在Neo4j数据库中,并将它们加载到GET上。 为此,我尝试了spring教程(构建嵌入式graphdb,并通过rest访问外部graphdb),效果不错,但我似乎无法使用neo4j单机版实时查看数据库,因为它似乎被我的应用程序锁定。 对我来