2017-10-14 16 views
0

J'inspecte Vert.x, une infrastructure qui peut exécuter une application dans plusieurs langages JVM différents.Vert.x. Comment créer une application JVM polyglotte réelle?

Il existe un grand nombre d'exemples disponibles à vertx-examples.

Mais le problème est, (et je n'ai encore rien trouvé) comment pourrions-nous écrire une application Vert.x sur une vraie voie polyglotte (en utilisant tous les langages JVM supportés en même temps)?

Par exemple, comment pouvons-nous écrire un code qui utilise les fichiers suivants: Java.java, Kotlin.kt, Javascript.js, Ruby.rb. Où chacun a une fonction simple à l'intérieur de celui-ci qui impriment le nom de la langue (par exemple le Ruby.rb imprime ruby).

Par exemple, lorsque vous utilisez cette entrée:

$vertx run Polyglot.java

comment pouvons-nous obtenir la sortie suivante?

java, kotlin, javascript, ruby

Modifier, ma tentative:

Polyglot.java

import io.vertx.core.AbstractVerticle; 
import io.vertx.core.Launcher; 

import java.lang.management.ManagementFactory; 

public class Polyglot extends AbstractVerticle { 

    public static void main(args: String[]) { 
    Launcher.main(new String[] { "run", Polyglot.class.getName(), "-ha"}); 
    } 

    @Override 
    public void start() { 

    vertx.createHttpServer().requestHandler(req -> { 
     final String name = ManagementFactory.getRuntimeMXBean().getName(); 
     req.response().end(
     Java.message() 
     + Kotlin.message() 
    ); 
    }).listen(8080); 
    } 
} 

Java.java

public class Java { 

    public static String message() { 
     return "Java\n"; 
    } 
} 

Kotlin.kt

class Kotlin { 

    companion object { 
     fun message() { 
      return "Kotlin\n" 
     } 
    } 
} 

vertx run Polyglot.java

+0

en supposant que vous avez essayé, quel barrage spécifique avez-vous frappé? – the8472

Répondre

1

Mais vous pouvez :)

Voilà comment:

  1. Créer une verticle en java
  2. Créer un verticle dans JS
  3. Créer un verticle dans Kotlin

Maintenant, soit exécuter chaque verticle indépendamment avec le mode cluster sur (si verticles communiquent sur la EventBus qui est une abstraction commune dans toutes les langues) ou créer un verticle supplémentaire qui déploie tous verticles dans le même JVM et encore utiliser le EventBus pour faire du développement piloté par les messages à travers les langues.

+0

Hum, alors, ne pouvons-nous pas utiliser le même code de base? Mon but final à cet égard est d'utiliser par exemple JRuby sur Rails et Kotlin avec Spring Boot par exemple. Pensez-vous que c'est possible? – GarouDan

+0

Cela dépend. Par exemple, vous pouvez mélanger et faire correspondre dans une certaine mesure. Dites que vous avez un verticle JS alors vous pouvez compter sur nashorn pour faire interop avec java et puisque kotlin peut aussi être utilisé à partir de Java, vous pouvez interagir avec kotlin. Je ne mentionne pas ruby ​​parce que je ne connais pas l'intérieur du moteur.Voici un exemple de JS avec Java: http://www.jetdrone.xyz/2017/01/25/Vertx-Polyglot-Proxy-Services.html –