1

我是 vertx 的菜鸟,但我已经使用 java 类创建了 JDBC 连接管理器,我可以在其中打印结果集中的数据:

ConnectionManager cm=ConnectionManager.getInstance();
Connection conn = cm.getConnection();
try {
    Statement stmt=conn.createStatement();
    try {
        ResultSet rs =
        stmt.executeQuery("select username, password from users");              
        try {
            if (rs.next()){
                System.out.println(rs.getString(1));
            }
        } finally {
            rs.close();
        }

    } finally {
        stmt.close();
    }

} finally {
    conn.close();
}

现在我想将我的 vertx javascript 应用程序连接到这个 java 类。我似乎不知道从哪里开始。我从 Google Groups 中找到了一些来源,但似乎没有一个能说明问题:

从 JavaScript https://groups.google.com/forum/?fromgroups#!topic/vertx/_oJQaeH07Sg加载 JDBC 驱动程序

从 Javascript https://groups.google.com/forum/#!msg/vertx/VyZj2yqqGTM/tvnTg4T55kMJ执行 Java

我还为 Vert.x 找到了一个 jdbc-persistor:

JDBC-persistor https://github.com/timyates/mod-jdbc-persistor/

我仍在尝试了解如何将它与我的应用程序一起使用。我将发布我可以分享的任何信息,但现在,任何人都可以帮助我(持久性或直接 java 通信)吗?谢谢。

4

1 回答 1

2

AFAIK 唯一的方法是使用事件总线。您将 Java 代码放在 Verticle 类中(或者为目标创建一个模块)。像这样的东西

public class JavaFromEverywhere extends Verticle {

    @Override
    public void start() throws Exception {
        vertx.eventBus().registerHandler("invokeFromAnyLanguage", new Handler<Message<String>>(){
            public void handle(Message<String> e) {
                doSomething();
            }

        });
    }

    private void doSomething() {
        // your database code here
    }

}

然后在你的javascript中你应该只写

vertx.eventBus.send("invokeFromAnyLanguage", "");

这是一个简单的场景。如果你想做更复杂的事情,比如向你的 JS 发送从数据库接收到的字符串,你可以扩展BusModBase并发回数据。同时在您的 JS 中,您应该注册一个处理程序来处理回复

public class JavaReply extends BusModBase {

    @Override
    public void start() {
        eb.registerHandler("invokeFromAnyLanguage", new Handler<Message<String>>(){
            public void handle(Message<String> e) {
                String something = doSomething();
                e.reply(something);
            }                
        });           
    }

    private String doSomething() {
        // your database code here
        return "databaseResult";
    }

}

你的JS代码会是这样的

eb.send("invokeFromAnyLanguage", "", function(javareply) {
    // your answer in javareply
});

HTH,问候

卡罗

于 2013-06-01T19:47:14.480 回答