2016-06-01 22 views
0

Ich schreibe gerade ein kleines Java-Applet für den Zugriff auf HBase-Daten mithilfe der REST-API. Der Zugriff auf die Daten mit Java ist nicht besonders schwierig, ich habe das erfolgreich gemacht. Wenn Sie auf einem Computer in meinem HDP-Cluster arbeiten, sind die Ergebnisse perfekt. Wenn ich jedoch als Applet laufe, bekomme ich überhaupt keine Ergebnisse. (Ich habe ein Applet gewählt, da die Verteilung einer ausführbaren JAR-Datei etwas ist, das mein Chef vermeiden möchte)Zugriff auf HBase-REST-API über Java-Applet

Nachdem ich endlich das gefunden habe, was ich für das zugrunde liegende Problem halte, habe ich die folgende Laufzeitausnahme gefunden: hbase-default.xml file seems to be for an older version of HBase (null), this version is 1.1.2.2.4.0.0-169. Meine Annahme ist, dass dies durch die Tatsache verursacht wird, dass meine lokale Maschine überhaupt kein HBase hat. Die Absicht ist, dass Benutzer in der Lage sein werden, ihre eigenen Daten von einem lokalen Rechner zu sehen, und so kann ich erwarten, nicht alle Benutzer HBase (oder etwas anderes als ein Browser) haben

Meine Frage wirklich hat zwei Teile:

  • Gibt es trotzdem ein Applet wie dieses zu funktionieren?

  • Gibt es eine bessere Alternative zu einem Applet für diese Art von Arbeit?

Posting meinen Code für den Fall, ich habe einige erhebliche Fehler gemacht:

public class HBaseConnector extends JApplet 
{ 
    private Cluster cluster; 

    public void init() 
    { 
     System.out.println("Applet initialising"); 
     cluster = new Cluster(); 
     cluster.add("hbase_server", 9080); 
    } 

    public void start() 
    { 
     System.out.println("Applet starting"); 
     Client client = new Client(cluster); 
     RemoteHTable table = new RemoteHTable(client, "table_name"); 
     Get get = new Get(Bytes.toBytes("key")); 
     get.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("Record")); 
     try 
     { 
      Result result1 = table.get(get); 
      JOptionPane.showMessageDialog(null, Bytes.toString(result1.getValue(Bytes.toBytes("f1"), Bytes.toBytes("Record"))), "Result", JOptionPane.INFORMATION_MESSAGE); 

     } 
     catch (Exception ex) 
     { 
      System.err.println("Exception occurred"); 
     } 
    } 

    public void stop() 
    { 
     System.out.println("Applet stopping"); 
    } 

    public void destroy() 
    { 
     System.out.println("Applet destroyed"); 
    } 
} 
+0

1) * "(Ich habe ein Applet ausgewählt, da die Verteilung einer ausführbaren JAR etwas ist, das mein Chef vermeiden möchte)" * Warum will der Chef das vermeiden? Ich kann fast garantieren, dass die Verteilung als Applet ** das festgestellte Problem nicht beheben wird. Und zwar zum Thema Applets: Siehe [Java Plugin-Unterstützung nicht mehr unterstützt] (http://www.gizmodo.com.au/2016/01/rest-in-hell-java-plug-in/) und [Wechsel zu a Plugin-freies Web] (https://blogs.oracle.com/java-platform-group/entry/moving_to_a_plugin_free). 2) 'catch (Exception ex) { System.err.println (" Ausnahme aufgetreten "); } '... –

+0

.. Ändern Sie das zu' catch (Exception ex) { ex.printStackTrace(); } 'bietet mehr Informationen für weniger Tipparbeit. 3) Stellen Sie sicher, dass [Java Console] (http://www.java.com/de/download/help/javaconsole.xml) zur Anzeige konfiguriert ist. Wenn auf der Standardstufe keine Ausgabe erfolgt, erhöhen Sie die Stufe und versuchen Sie es erneut. –

+1

Vielen Dank für Ihren Rat. Erstens wusste ich wirklich nichts über die Java-Konsole (ich habe in ~ 7 Jahren kein Applet erstellt). Zweitens entfernte ich mich von einem Applet zu einer JNLP-Anwendung, die mein Problem löste. Dies deutet darauf hin, dass das Problem mit der Sandbox-Sicherheit des Applet zu tun hatte. Nochmals vielen Dank. – swinefish

Antwort

1

Während ich dieses Problem nicht in der Lage gewesen, für ein Applet selbst zu lösen, ich schaffte es die App zum Laufen zu bringen, indem Bewegen über die JNLP-App (JNLP). Angesichts dieser Tatsache vermute ich, dass das zugrunde liegende Problem ein Berechtigungsproblem aufgrund der Tatsache war, dass Applets in einer Sandbox ausgeführt werden. Das ist gut, da mir bewusst ist, dass sich die meisten Browser von Java-Plugins entfernen.

Eine weitere mögliche Ursache, die ich entdeckt habe: hbase-default.xml muss im Stammverzeichnis des jar sein.