# Applet mit XmlRpc läuft lokal nicht vollständig



## Tony2 (24. Feb 2011)

Ich ärgere mich seit längerer Zeit mit folgendem Problem herum, und bin nun an einer Stelle angelangt, an der ich nicht mehr weiter weiss...

Ich habe ein Applet, dass über XmlRpc mit Matlab kommuniziert, init und destroy funktionieren immer einwandfrei. Ich kann mit dem Applet auch von einem externen Computer problemlos auf den ursprünglichen Server zugegreifen und alle Methoden aufrufen.

Wenn ich nun jedoch lokal über localhost  mEvalString bzw execute innerhalb meines Programms aufrufe, schlägt die Kommunikation zu Matlab fehl. Es wird null als result zurrückgeliefert.

Da ich den Sourcecode nicht mehr habe, und das Decompilieren fehlschlägt, stehe ich nun ziemlich auf dem Schlauch. Hat jemand von euch vielleicht einen Tipp oder Hinweis? es kann sich ja nur um eine Kleinigkeit handeln.

Der Server auf dem es momentan läuft läuft mit Windows Server 2003 Enterprise, Tomcat 5, XmlRpc wird 3.0 verwendet.

Nun soll es lokal auf einer Windows XP Professional Distribution laufen, die anderen Programme sind alle gleich. Auf dem Server kann ich das Applet auch lokal benutzen, es muss also eigentlich an dem Computer auf dem es nun integriert werden soll liegen. 

Da bei der Initialisierung und dem Shutdown problemlos über XmlRpc das execute aufgerufen wird, sonst aber nicht, bin ich wirklich gerade etwas ???:L


Viele Grüße

Tony

Unten die Hauptklasse.... Ich habe die funktionierenden Methoden erstmal ausgespart.



```
import java.applet.Applet;
import java.io.IOException;
import java.io.PrintStream;
import java.net.URL;
import java.util.Vector;
import org.apache.xmlrpc.XmlRpcClient;
import org.apache.xmlrpc.XmlRpcException;

public class JSConnect extends Applet
  implements VCLab
{
  private XmlRpcClient xmlrpc;
  private String host;
  private String authCode;

  public void init()
  {
    this.host = getParameter("matlab_server");
    if (allocateWorkspace())
      System.out
        .println("Initialisiering des Matlab Applets erfolgreich");
    else {
      System.out.println("Initialisiering nicht erfolgreich.");
    }
    System.out.println("Initialisierung des Workspaces ...");
    execute(getParameter("init_command"));
    System.out.println("Initialisierung abgeschlossen ...");
  }

  public void destroy()
  {
    System.out.println("Workspace wird zurückgesetzt ...");
    execute(getParameter("shutdown_command"));
    freeWorkspace();
  }

  public boolean allocateWorkspace()
  {
    .....
  }

  public void freeWorkspace()
  {
    ......
  }

  public String execute(String cmd)
  {
    Vector args = new Vector();
    args.addElement(this.authCode);
    args.addElement(cmd);
    try {
      System.out.println("Starting to execute...");
      String result = (String)this.xmlrpc.execute("mwd.execute", args);
      return result;
    } catch (XmlRpcException ex) {
      ex.printStackTrace();
    } catch (IOException ex) {
      ex.printStackTrace();
    }
    return null;
  }

  public void mEvalString(String evalString) {
    execute(evalString);
  }

  public void mClear(String NameString) {
    execute("clear " + NameString);
  }

  public void mClearAll() {
    execute("clear all");
  }
.

  public double mGetArray(String MatrixName, String m, String n) {
    .....
  }

  public String mGetString(String MatrixName, String m) {
    .....
  }

  private String shortenResult(String result)
  {
    .....
  }
}
```


----------



## FArt (25. Feb 2011)

> Ich kann mit dem Applet auch von einem externen Computer problemlos auf den ursprünglichen Server zugegreifen und alle Methoden aufrufen.


Das war zu erwarten.


> Wenn ich nun jedoch lokal über localhost mEvalString bzw execute innerhalb meines Programms aufrufe, schlägt die Kommunikation zu Matlab fehl. Es wird null als result zurrückgeliefert.


Das auch.
What Applets Can and Cannot Do (The Java™ Tutorials > Deployment > Applets)


----------



## Tony2 (25. Feb 2011)

Oh sehr vielen dank!

Ich suche schon lange den möglichen Grund dafür, und habe diese Seite bisher noch nicht entdeckt!

Ich habe dazu jedoch immer noch eine Frage:

Wieso kann das Applett per Init und Shutdown jedoch auf das ganze problemlos zugreifen? Wieso sollte die gleiche Methode sich auf einmal anders verhalten?

Ich kann immer noch unter den "Not" Gründen nicht den einschlagenden erkennen, der Schuld ist.


----------



## FArt (25. Feb 2011)

Für eine genaue Analyse bräuchte man Informationen über deine Infrastruktur und natürlich Fehlermeldungen.


----------



## Tony2 (25. Feb 2011)

Ok, gerne...

Es gibt zu einem den Client, Tomcat, einen MatlabServer.

Der Client kommuniziert nur mit Tomcat, der wiederum Anfragen an den MatlabServer sendet.

Deswegen ruft das Applet selbst lokal auf dem Rechner nichts auf, es wird alles vom MatlabServer selbst gemacht.


Bisher sichtbare Exceptions außerhalb des Appletts habe ich korrigiert. Das Applet selbst kann ich decompiliert nicht ausführen, was die Sache zur Fehler bzw. Exceptionsuche erschwert. 

Da es auf dem Server fehlerfrei funktioniert, denke ich (auch anhand deines von dir gegebenen Links (vielen dank nochmal dafür!)), dass es bei der lokalen Installation nur ein Problem geben kann. Leider kenne ich mich in XmlRpc nicht genügend aus, dass ich sinnvoll einschätzen kann, was innerhalb des Computers geändert werden muss.

Der Client soll nun sozusagen gleichzeitig die Serverfunktionen mit übernehmen und nur noch über localhost mit Tomcat kommunizieren, wodurch Matlab aufgerufen wird.


----------

