我是 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 网上论坛找到了一些来源,但似乎没有一个能说明一些问题:
从 JavaScript 加载 JDBC 驱动程序 https://groups.google.com/forum/?fromgroups#!topic/vertx/_oJQaeH07Sg
从 Javascript 执行 Java https://groups.google.com/forum/#!msg/vertx/VyZj2yqqGTM/tvnTg4T55kMJ
我还找到了一个用于 Vert.x 的 jdbc-persistor:
JDBC 持久化 https://github.com/timyates/mod-jdbc-persistor/
我仍在尝试了解如何将它与我的应用程序一起使用。之后我会发布我可以分享的任何信息,但是现在,任何人都可以帮助我(持久性或直接 Java 通信)吗?谢谢。
最佳答案
据我所知,唯一的方法是使用事件总线。 您将您的 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,此致
卡罗
关于java - 如何使用 Vert.x 从 JDBC + Java 获取数据到 Javascript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16767667/