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

如何在运行eclipse的GWT中获取neo4j Graph数据库

洪飞扬
2023-03-14

嗨,我试图用eclipse在GWT中创建neo4j图形数据库。我用了这个视频https://www.youtube.com/watch?v=WSj5hNwDnEc但是chrom和nappi的gwt有一些错误(通过像windows 7一样运行chrom来修复)

我这样写代码:

/**
 * The server-side implementation of the RPC service.
 */
@SuppressWarnings("serial")
public class GreetingServiceImpl extends RemoteServiceServlet implements
GreetingService {

private static enum RelTypes implements RelationshipType
{
    KNOWS
}

private static final String DB_PATH = "target/neo4j-hello-db";
private static String result;

GraphDatabaseService graphDb;
Node firstNode;
Node secondNode;
Relationship relationship;

public String greetServer(String input) throws IllegalArgumentException {
    // Verify that the input is valid. 
    if (!FieldVerifier.isValidName(input)) {
        // If the input is not valid, throw an IllegalArgumentException back to
        // the client.
        throw new IllegalArgumentException(
                "Name must be at least 4 characters long");
    }

    String serverInfo = getServletContext().getServerInfo();
    String userAgent = getThreadLocalRequest().getHeader("User-Agent");

    // Escape data from the client to avoid cross-site script vulnerabilities.
    input = escapeHtml(input);
    userAgent = escapeHtml(userAgent);
    System.out.println("1");

    result="";



    createDb();
    System.out.println("2");
    removeData();
    System.out.println("3");
    shutDown();






    return result + input + "!<br><br>I am running " + serverInfo
            + ".<br><br>It looks like you are using:<br>" + userAgent;
}

private void shutDown() {
    // TODO Auto-generated method stub
    //         System.out.println();
    //          System.out.println( "Shutting down database ..." );
    //          // START SNIPPET: shutdownServer
    graphDb.shutdown();
    // END SNIPPET: shutdownServer

}

private void removeData() {
    // TODO Auto-generated method stub
    try ( Transaction tx = graphDb.beginTx() )
    {
        // START SNIPPET: removingData
        // let's remove the data
        firstNode.getSingleRelationship( RelTypes.KNOWS, Direction.OUTGOING ).delete();
        firstNode.delete();
        secondNode.delete();
        // END SNIPPET: removingData

        tx.success();
    }

}

private void createDb() {
    deleteFileOrDirectory( new File( DB_PATH ) );
    System.out.println("2.1");
    // START SNIPPET: startDb
    graphDb = new GraphDatabaseFactory().newEmbeddedDatabase( DB_PATH );
    registerShutdownHook( graphDb );
    System.out.println("******************2.2*******************************************");
    registerShutdownHook( graphDb );
    // END SNIPPET: startDb

    // START SNIPPET: transaction
    try ( Transaction tx = graphDb.beginTx() )
    {
        // Database operations go here
        // END SNIPPET: transaction
        // START SNIPPET: addData
        firstNode = graphDb.createNode();
        firstNode.setProperty( "message", "Hello, " );
        secondNode = graphDb.createNode();
        secondNode.setProperty( "message", "World!" );

        relationship = firstNode.createRelationshipTo( secondNode, RelTypes.KNOWS );
        relationship.setProperty( "message", "brave Neo4j " );
        // END SNIPPET: addData

        // START SNIPPET: readData
        result +=firstNode.getProperty( "message" );
        result +=relationship.getProperty( "message" );
        result +=secondNode.getProperty( "message" );
        // END SNIPPET: readData


        // START SNIPPET: transaction
        tx.success();
    }
    // END SNIPPET: transaction

}

private static void deleteFileOrDirectory( File file )
{
    if ( file.exists() )
    {
        if ( file.isDirectory() )
        {
            for ( File child : file.listFiles() )
            {
                deleteFileOrDirectory( child );
            }
        }
        file.delete();
    }
}

private static void registerShutdownHook( final GraphDatabaseService graphDb )
{
    // Registers a shutdown hook for the Neo4j instance so that it
    // shuts down nicely when the VM exits (even if you "Ctrl-C" the
    // running application).
    Runtime.getRuntime().addShutdownHook( new Thread()
    {
        @Override
        public void run()
        {
            graphDb.shutdown();
        }
    } );
}


/**
 * Escape an html string. Escaping data received from the client helps to
 * prevent cross-site script vulnerabilities.
 * 
 * @param html the html string to escape
 * @return the escaped string
 */
private String escapeHtml(String html) {
    if (html == null) {
        return null;
    }
    return html.replaceAll("&", "&amp;").replaceAll("<", "&lt;")
            .replaceAll(">", "&gt;");
}

}

. . . .

现在我的问题是线路:

    graphDb = new GraphDatabaseFactory().newEmbeddedDatabase( DB_PATH );

我得到的错误是:

服务方法'公共抽象java.lang.Stringneo4jingwtpackage.client.GreetingService.greetServer(java.lang.String)抛出java.lang.IllegalArgumentException'抛出了一个意外异常:java.lang.RuntimeException:错误启动org.neo4j.kernel.EmbeddedGraphDatabase, C:\Users_yogev\workspace\temp\neo4jinjgwt\war\target\neo4j-hello-db...

原因:java。lang.RuntimeException:启动组织时出错。neo4j。内核EmbeddedGraphDatabase,C:\Users\yogev\workspace\temp\neo4jinjgwt\war\target\neo4j hello db。原因:组织。neo4j。内核生命周期。生命周期异常:组件组织。neo4j。内核impl。交易XaDataSourceManager@30e1e97f'已成功初始化,但无法启动。请参阅随附的原因例外。

有人知道这个问题吗?我试图通过以下方式修复它:EmbeddedGraphDatabase(storeDir、params、dependencies)

但是我不知道在参数和依赖项中放什么。。。当我使用null时,它也会给我错误。

谢谢大家

共有1个答案

宋铭
2023-03-14

如果你没有将Neo4j交叉编译到客户端,你必须将Neo4j作为后端服务的一部分来运行。并通过GWT远程基础设施访问它。

创建新GDB实例的API是:

new GraphDatabaseFactory().newEmbeddedDatabase()

请参阅:http://neo4j.com/docs/stable/tutorials-java-embedded-hello-world.html#_prepare_the_database

 类似资料:
  • 我正在处理一个客户的请求,用GWT制作一个简单的小部件。我只是想在Eclipse市场上用Eclipse Oxygen和GWT插件来设置环境。当我运行向导项目时(调试为->GWT开发模式)。我明白了:“在书签栏中放置dev on/dev off按钮,当模块打开时,按dev on”有帮助吗?

  • 问题内容: 这是我的类,用于从数据库中获取数据 这是我的文件: 当我运行该程序时,出现异常后,请帮助我如何解决它。我是Hibernate的新手,尝试学习但被卡住了。 虽然我能够将数据存储在数据库中,但我有2个用于第一和第二类的数据获取数据,但在获取数据时遇到了问题PLZ帮助。 问题答案: 让我引述一下: 据我所知,您正在使用表名。 所以应该是这样的:

  • 我需要在CloudKit中获取CkAsset的web url。然而,在swift中,苹果不允许我们获取直接的WebURL,它只下载资产并给我们文件。但是,有了javascript,这是可能的。因此,我编写了一个JS文件来获取CkAsset Weburl。当我在浏览器中运行这个javascript文件时。我试图用下面的代码在swift中运行它,但我不能。我搜索到一个名为“StringByEvalua

  • 问题内容: 我在中定义了一个macrodef ,并用来完成这项工作。在这种情况下,我正在验证。 问题是没有检索传递的属性的值。有人知道您如何从javascript中获取属性的值吗? 问题答案: 原来我使用了错误的标签类型。为了使用脚本定义蚂蚁任务,我应该使用not 。使用预定义的对象可以访问任务中的属性和嵌套元素。 这适用于从Ant中的javascript访问属性:

  • 问题内容: 我们有以下课程 和这个 现在,我需要在运行时知道is是否为 。由于这是jpa自动处理的,因此我无法获取此值。 我们正在调用一个带有as参数的方法,我想避免使用它来检查它是什么类型。如果我可以做些类似的事情会更酷 问题答案: 您可以将鉴别符映射为只读属性:

  • 问题内容: 我正在尝试创建一个自定义的视图,该视图可以让我获得数据库所有视图和表的行数。 在SQL Server中该死的表计数 现在,我需要获取VIEWS的行数 我觉得唯一的方法是从视图中计算行数,即 但是,我找不到一种方法来让视图的行数以及view_name,table_schema等。 在这方面的任何进步将是有帮助的。 问题答案: 这是最终的解决方案: