Verständnis KE 2 + EA 2

Hallo zusammen,

suche dringend einen Ansatz, wie ich den Kurstext 2 verstehen und die Aufgaben zur EA2 lösen kann.
Mein Problem ist, dass ich nur oberflächige Kenntnisse vom Programmieren mit Java habe.

Habt Ihr eine Idee, wie ich vorgehen kann?

Vielen Dank!
 
Was ist denn bei dem Kurstext genau dein Problem? Ist ja erstmal nur Theorie und kein Programmiercode. Wenn du spezielle Fragen hast, kannst du die gerne stellen.

Zum Thema Java hilft nur eclipse installieren, vielleicht ein Tutorial und dann reinfuchsen. Ich kann dein Problem gut verstehen, am Anfang meines Bachelorstudiums an einer Präsenzuni war Java für mich auch keine Insel sondern ein böhmisches Dorf.
 
Wow. Hallo zusammen.
Also ich verstehe in der Einsendeaufgabe 2 auch noch nicht viel. Ist das jetzt ein Programmierkurs Java? Kann jemand bei 2.1 und 2.3 zumindest beim Einstieghelfen? Dass OOP dran kommt war ja bekannt, aber so was...!?
 
Genau.
Aber da für den Kurs Programmiererfahrungen erwartet werden, sollte man den Kurs denke ich mal machen. Vor allem dann wenn man nicht programmieren kann...

Ich freu mich auch schon drauf
 
Naja, ein Programmierkurs ist es nicht gerade, aber bei der Bearbeitung der Aufgabe verfestigt sich das Verständnis der Client-Server-Kommunikation. Mit ein bisschen Java-Verständnis ist es recht leicht.
 
Hallo zusammen,
hat hier jemand einen Einstieg zu den Aufgaben 2.1 und 2.3? Ich will ja nicht schnorren, aber habe echt keine Idee. Gerne auch einfach eine Beschreibung würde helfen. Ich versuche mal die anderen Aufagen zu lösen und stelle meine Ideen ein.
 
2.4 Heterogenitätssubsystem

Aufgabe: Fachliche Heterogenität wird durch Transformation und Rücktransformation überwunden.

Anwendungsbereich: Wenn beispielsweise zwei Unternehmen kooperieren möchten, können sie sich auf einen Standard für den elektronischen Datenaustausch einigen. Der EDI-Standard legt bspw. fest, wie Dokumente aussehen müssen. Für die Transformation vor der Datenübermittlung und die Rücktransformation beim Empfänger wird ein Heterogenitätssubsystem verwendet.

Technologie: EDI-Standards können auf der Basis von XML entwickelt werden, auf diese Weise sind sie auch im Webbrowser darstellbar.

Erklärung anhand des gegebene Beispiels: ..........
 
Hier mal ein paar Ideen:
Zu 2.2:
a)IP-Adresse un dPort müssen Client bekannt sein! Objekt, Eigenschaften, Methoden müssen gleich heißen?
b)Technologie: Was für eine Frage? Es wirde i Skript von technologieebene gesprochen. Was nun TCP/IP? C-S? Ich verstehe die Frage nicht.
Zu 2.4: Heterigenitätssubsystem (gibt es inder Literatur gar nicht?)
Ist ein Dolmetscher/Transformator von proprietären Format in verabredetes Format, gerne EDI in XML. Aber was soll hier ein DTD. Worauf zielt die Frage ab? Ich verstehe die Gedankensprünge des Aufgabenstellers nicht!

Und wer kann nun etwas zu den Javaaufgaben sagen?

Gruß wok
 
bei 2.2a geht es darum, dass jeder das (Un-)Marshalling anders vornimmt und das Vorgehen nicht standardisiert ist.
So wird die Bestellposition, die ein Student zum anderen überträgt, vom anderen nicht "ausgepackt" werden können, da er nicht weiß wie diese aussieht.
Objekte, Eingeschaften und Methoden müssen nicht bekannt sein, da ja einfach nur ein Datenstrom an den Server übertragen wird.
2.2b wird dann wahrscheinlich der EDI-Standard sein, mit dem ein abgesprochenes Format zwischen den Partnern ausgetauscht wird und die Informationen für den Server an der Stelle stehen, an der er sie erwartet.
 
hallo
habt ihr eventuell online tips für für das vorgehen in diesem aufgabenteil gefunden:
public static String marshall( BestellPosition bp) {
//Implementieren Sie eine geeignete Serialisierung (Marshalling) der Objekte der Klasse BestellPosition
}

ich habe nicht rausgefunden wie das geht.
 
Hallo manitee,
es geht darum, dass du dir überlegst, wie du die Bestellposition in einen String basteln kannst um alle Elemente der Position in einem Rutsch zu übertragen und auf der anderen Seite wieder auseinander zu schneiden.
Du kannst dir zum beispiel eine XML-Struktur überlegen, oder, wie ich es auch gemacht habe, einfach die Teile hintereinander schreiben mit einem Sonderzeichen dazwischen. Zum Beispiel #TISCH#5#15,53
Das überträgst du und musst es auf der anderen Seite wieder auseinander schneiden. Dazu suchst am besten mal bei google nach "java String-Operationen".
 
danke dir für die erklärung. sehr gut verständlich.
dachte, ich müsste einen algorithmus implementieren der das übernimmt, bzw. wieder rückgängig macht. werde deine idee ausprobieren.
 
Einen Algorithmus schreibst du schon, aber der kann natürlich total einfach sein. Es geht ja nur darum die Bestellpostion automatisch zu übertragen und sie hinterher wieder auseinander zu schneiden.
 
Also ich lese in verschiedenen Java-Büchern. Aber bin nur immer verwirrter...
Und bei der letzten Aufgabe bin ich mir sicher, dass xml und dtd nicht zusammen passen. Ich glaube das soll man zeigen. 2.1 und 2.3 werde ich nicht ganz lösen können. Ich versuche es weiter. Aber wenn jemand ne eine Lösung mit Hilfe hätte... wäre prima.
 
aber dtd und xml gehören doch zusammen. die deklaration muss doch stattfinden. oder wie meinst du, dass das nicht zusammen passt?

habe mich weiter an 2.1. und 2.3 versucht. über eine musterlösung würde ich mich auch freuen, ansonsten warte ich eben auf die musterlösung des LS (und hoffe, das Java-Programmierung nicht allzu klausurrelevant sein wird).
 
Hallo vok2012,
bei 2.4 geht es um das Heterogenitätssubsystem, also die Transformation zu übertragender Daten in den EDI-Standard. Sieh dir mal Bulletpoint 3 auf Seite 24 und Abbildung 2.12 im Skript an. Dort wird es deutlich.

Zu Aufgabe 2.3 hätte ich auch gerne ein paar Tipps. Komme da irgendwie mit der Registrierung nicht ganz klar.

Für Aufgabe 2.1 ist ja der Link in der Kursmappe ganz nützlich.
 
Kopiert ihr die Java-Klassen noch in die schriftliche Abgabe mit rein oder schreibt ihr nur etwas wie: "Diese Aufgabe wurde dem Lehrstuhl als Textdatei per E-Mail zur Verfügung gestellt."?
 
Also ich halte das ganze in der 2.3 ein wenig minimalistisch weil ich die Aufgabe wirklich nicht gelungen finde. Auf externe Links verweisen und dann dort auch noch die Hälfte weglassen bzw. nichtmal wichtige Sachen hervorheben.

Der Servercode wird jetzt einfach so abgegeben und geschaut wieviel Punkte das gibt.

Code:
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;


interface BestellServer extends Remote {
  
   public void bestelle( BestellPosition bp) throws RemoteException;
  
   }
  
public class BestellServerImpl implements BestellServer{
  
  

   public void bestelle( BestellPosition bp) throws RemoteException {
     System.out.println("Bestellung erhalten:\n###########");
     System.out.println( bp );
   }
  
   public static void main(String[] args) throws Exception {
     LocateRegistry.createRegistry( Registry.REGISTRY_PORT );
    
    BestellServerImpl besteller = new BestellServerImpl();
    BestellServer stub = (BestellServer) UnicastRemoteObject.exportObject( besteller, 0 );

    Registry registry = LocateRegistry.getRegistry();
    registry.rebind( "BestellServer", stub );

    System.out.println( "BestellServer angemeldet" );
    }
  
}
 
Zuletzt bearbeitet:
Weil so schön minimalistisch auch hier noch meine Client-Seite der 2.3 :) Wieder bin ich gespannt auf die Punktzahl.

Code:
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;


public class Client {
    public static void main(String[] args) throws Exception {
       
        BestellPosition bp = new BestellPosition();
        bp.material = "Stuhl";
        bp.preis = "302.91";
        bp.anzahl = 5;

        Registry registry = LocateRegistry.getRegistry();
        BestellServer besteller = (BestellServer) registry.lookup( "BestellServer" );
       
        besteller.bestelle(bp);
    }
}
 
Ich stolpere noch über Aufgabe 2.4 und das Beispiel mit der XML und DTD. Muss man das wohl so verstehen, dass die Definition beim Empfänger eine "Ware" erwartet, aber "Material" in der XML bekommt und das Heteroblubsystem das Mapping vornehmen soll?
 
Hallo ChWe,
ich verstehe das so: xml und dtd haben 2 inkomp. Strukturen. Diese soll man finden (evtl. Ware-Material/kg-Einheiten). Was ist die Herausforderung eine HSS als Ableitung der Erkenntnisse...
 
Hallo,

ich habe auch eine Frage zu 2_1:
meine Marshall Methode lautet so:
public static String marshall( BestellPosition bp) {
return "#MATERIAL#" + bp.material +"#PREIS#" + bp.preis + "#ANZAHL#" + bp.anzahl;

Ich habe mir gedacht das man den String ja dann eigentlich ganz gut Anhand der Rauten auseinanderpflücken kann, aber irgendwie scheint mir substring dann doch nicht zu funktionieren.

Habt ihr eine Idee?
 
Hi,

also einfacher wird es, wenn du ein Zeichen oder eine konstante Zeichenkette als Delimiter verwendest, z. B. ";". Dann kannst du mit der split-Methode arbeiten.
Wenn du aber bei deiner Logik bleiben möchtest, würde ich vorschlagen du benutzt lediglich eine # vor deinen Tags und keine dahinter (#MATERIAL# --> #MATERIAL). Dann kannst du auch mit split arbeiten und deinen String beim Unmarshalling in "#MATERIALStuhl", "#PREIS302.91", "#ANZAHL5" unterteilen. Danach musst du dann noch die Tags jeweils aus dem String entfernen.

Ich hoffe ich konnte ein wenig weiterhelfen.

Gruß
 
ich hab der Klases Bestellposition die @XmlRootElement hinzugefügt und
und hab es über den JAXBContext und seinen marschaller serialisiren/deserialisieren lassen.

Ansonsten schließe ich mich Granado an, am besten mit ";" (CSV-Format)
 
Danke, ja das war hilfreich.

Habe es jetzt so gelöst:

static public BestellPosition unmarschalNachricht( String msg ) {
BestellPosition bp = null;
String[] sArray = msg.split(";");
sArray[1].substring(9);
sArray[2].substring(6);
sArray[3].substring(7);

bp.material = sArray[1];
bp.preis = sArray[2];
bp.anzahl = sArray[3];
return bp;
 
Das ganze geht noch minimalistischer. Einfach jeden Wert der Bestellposition in eine neue Zeile beim Marshaling:

StringBuilder sb = new StringBuilder();
sb.append(bp.getClass().getName().toString()); // hier wird noch der Klassenname mitgegeben (ist nicht nötig)
sb.append("\n");
sb.append(bp.material);
sb.append("\n");
sb.append(bp.preis);
sb.append("\n");
sb.append(bp.anzahl);
return sb.toString();


Da die Reihenfolge bekannt ist, kann das splitten auf Zeilen erfolgen und jedes Feld im Array einem Attribut der Bestellposition zugeordnet werden (Unmarshaling):

BestellPosition bp = null;
if (msg != null || msg != "")
{
String[] lines = msg.split("\n");
bp = new BestellPosition();
if (lines[0].equals(BestellPosition.class.getName().toString()))
{
bp.material = lines[1];
bp.preis = lines[2];
bp.anzahl = Integer.parseInt( lines[3]);
}
}
return bp;
 
Top