Autor Thema: programm code posten zur Diskussion  (Gelesen 9509 mal)

Offline qojote

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • I love YaBB 1G - SP1!
programm code posten zur Diskussion
« am: 13.02.04 - 08:55:19 »
Hi all,

in den vergangenen Monaten war ich sehr knapp mit der Zeit doch das ist jetzt zum Glück vorbei.
Ich habe einen Agent geschrieben der über JDBC Daten in einer NotesDB ergänzt nun wollt ich mal fragen ob jemand Lust hat wenn ich denn Code poste mit mir darüber zu sprechen was man wie besser machen kann und ob der Aufbau so sinnvoll ist.  Wäre bestimmt auch für die anderen Anfänger in dem Bereich Hilfreich weil sich bestimmt einige grundlegende Konzepte ableiten lassen.

Gruß
Qojote

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:programm code posten zur Diskussion
« Antwort #1 am: 13.02.04 - 18:45:59 »
ja tu das doch mal. ich kann dir wahrscheinlich keine megacoolen Tipps geben, die Java selbst betreffen, aber evtl was zum Design sagen.
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:programm code posten zur Diskussion
« Antwort #2 am: 13.02.04 - 21:10:15 »
ja. klar.
Mein Posting bezüglich source code ist vermutlich ziemlich missverständlich.
Es bezieht sich auf relativ konkrete und auch nicht raketenwissenschaftliche Dinge die mir bei der Arbeit begegnen.
Manchmal haben Kollegen konkret gute Ideen und da will ich ein bischen vorsichtig sein und das nicht im Überschwang hinausposaunen.

JDBC oder RDBMS-Zugriff allgemein ist ein mehr generelles und sowieso hervorragend dokumentiertes Thema.

Gruß Axel
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline qojote

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • I love YaBB 1G - SP1!
Re:programm code posten zur Diskussion
« Antwort #3 am: 13.02.04 - 23:41:51 »
Hi,
Jdbc RDBMS ist eben das aktuelle Programm was ich geschrieben habe mir geht es aber mehr um das Design und die no Nos zu finden.
Bei vielen Sachen die man sich selbst aneignet benutzt man oft einen zu komplizierten oder auch schlechten Weg nur weil man es besser nicht weiß und es auch so geht.
Ich sitze leider grad nicht an meinem Rechner poste meinen code morgen abend.
Gruß
qojote

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:programm code posten zur Diskussion
« Antwort #4 am: 14.02.04 - 07:38:42 »
um das Design zu kommentieren, wäre dann auch eine, zumindest grobe, Liste der Anforderungen sinnvoll. Und natürlcih ein Klassendiagramm, falls sowas vorhanden ist.
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline qojote

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • I love YaBB 1G - SP1!
Re:programm code posten zur Diskussion
« Antwort #5 am: 15.02.04 - 00:02:17 »
Okay Anforderung war einfach aus einer Relationalen Db infos in eine Notesdb zu holen primärschlüssel ist die Kundennummer.

Hier der Code.

import lotus.domino.*;
import java.sql.*;
import com.ibm.as400.*;
import java.lang.*;
import java.util.*;
import java.util.Date;
import java.text.*;
public class JavaAgent extends AgentBase {

   public void NotesMain() {

      try {
            //logdateien setzen und Konfigdokumente holen         
            Session session = getSession();
            AgentContext agentContext = session.getAgentContext();
            Database db = agentContext.getCurrentDatabase();
            View view=db.getView("(agents)");
            Document doc = view.getDocumentByKey("Import",true);
            Log dblog=session.createLog(doc.getItemValueString("Log_Eintrag"));
            dblog.openNotesLog(doc.getItemValueString("Log_db_server"),doc.getItemValueString("Log_db_path"));
            
            sql sql1=new sql();
            Verarbeitung verb=new Verarbeitung(session,doc,dblog,sql1);
            verb.process();
         
            view.recycle();
            db.recycle();
         
         }
catch(Exception e) {
//System.out.println("ausstieg");         
e.printStackTrace();
      }
}
}

import lotus.domino.*;
import java.sql.*;
import com.ibm.as400.*;
import java.lang.*;
import java.util.*;
import java.util.Date;
import java.text.*;


public class Verarbeitung
{
  public Document doc;
  public Document berichtdoc;
  public Document docnl;
  public Database db2;
  public Log dbLog;
  public String server;
  public String pfad;
  public String logtext;
  public Session session;
  public DocumentCollection dc;
  public View view;
  public sql sql1;
  public int i=0;
  public String kunden;
  public String sdatum;
  public Date sdatum2;
  public SimpleDateFormat sd=new SimpleDateFormat("mm.dd.yyyy ");
  public Date ddatum=new java.util.Date();      
  public Date lastrun=new java.util.Date();
  public String createdoc;
  public String makenull;
  public String kdnrupdate="0";
  public Verarbeitung(Session session,Document doc,Log dbLog,sql sql1)

{
   this.doc=doc;
   this.session=session;
   this.dbLog=dbLog;
   this.sql1=sql1;
try {   
this.dc=doc.getResponses();
}
catch(Exception e) {
//System.out.println("ausstieg");         
e.printStackTrace();
      }
}


public void process()
{

try {   
docnl=dc.getFirstDocument();   
while (docnl!=null)
{
   //informationen aus Konfigdoc holen z.b.sql
   i=0;
   server=docnl.getItemValueString("server");
   db2=session.getDatabase(server,docnl.getItemValueString("db_path"));
   makenull=docnl.getItemValueString("makenull");   
   view=db2.getView(docnl.getItemValueString("notes_view"));
   String sqlstatment=docnl.getItemValueString("sql");
   String btrida=docnl.getItemValueString("btrida");
   dbLog.logAction("Start der Verarbeitung für "+ btrida);
   String date=docnl.getItemValueString("Last_run");
   sql1.getrs(sqlstatment);
   sdatum=sd.format(lastrun);
   String useit=docnl.getItemValueString("use_it");
if(useit.equals("ja"))
{   
   while (sql1.rs.next() )
   {
            
         
         
      kunden=sql1.rs.getString("APAIDN");
      kunden=kunden.trim();
      
      if (makenull.equals("ja"))         
            {            
            kunden="0"+kunden;
            DocumentCollection dc2=view.getAllDocumentsByKey(kunden);
            if (dc2.getCount()<=0)
            {
                  dbLog.logError(1,"Kunde nicht vorhanden"+ kunden);
                  
                  }
            
               else
               {
                  this.updatebericht(dc2);
                  i=i+1;
                  }
            }
      else
            {
                  DocumentCollection dc2=view.getAllDocumentsByKey(kunden);
                  if (dc2.getCount()<=0)
               {      
               
                  dbLog.logError(1,"Kunde nicht vorhanden"+ kunden);
               
               }
               else
               {
                  this.updatebericht(dc2);
                  i=i+1;
                  }
            }      
}
}
dbLog.logAction("Es wurden "+i+ "Kunden in"+btrida+" geupdatet");
sdatum="'"+sdatum+"'";
docnl.replaceItemValue("last_run",sdatum);
docnl.save();
docnl=dc.getNextDocument();
}
sql1.con.close();
}
catch(Exception e) {
//System.out.println("ausstieg");         
e.printStackTrace();
      }
      
      
}


   public void updatebericht(DocumentCollection dc)
{
DocumentCollection dc1=dc;
Document berichtdoc;
Item item1;

   try{
         berichtdoc= dc1.getFirstDocument();
          item1=berichtdoc.getFirstItem("T1");
          if (item1==null)
          {
             sdatum2=sql1.rs.getDate("ERSTEZ");         
            DateTime dt=session.createDateTime(sdatum2);
             berichtdoc.replaceItemValue("T1",dt);
            berichtdoc.replaceItemValue("T2",dt);
            
         }
         else
         {
            
            sdatum2=sql1.rs.getDate("ERSTEZ");                  
            DateTime dt=session.createDateTime(sdatum2);
          berichtdoc.replaceItemValue("T2",dt);
         }      
                     
         
         berichtdoc.save();
         if(berichtdoc.save()==false)
         {
            dbLog.logError(1,"Fehler beim Speichern von "+ kunden);
                  
         }   
      dbLog.logAction("Kunde "+ kunden+ "geupdatet");
      sql1.updatesd(berichtdoc.getItemValueString("kundennr"));
      
      }
      catch(Exception e) {
//System.out.println("ausstieg");         
e.printStackTrace();
      }          
   }
}

import lotus.domino.*;
import java.sql.*;
import com.ibm.as400.*;
import java.lang.*;
import java.util.*;
import java.util.Date;
import java.text.*;
public class sql {

public String constr;
Connection con;
public ResultSet rs;

public sql()

{
         
         this.constr=constr;
         try{
         Class.forName("com.ibm.as400.access.AS400JDBCDriver");
         String connstr = ("jdbc:as400:myhost");
         con = DriverManager.getConnection(connstr,"Username","password");
}
catch(Exception e) {
//System.out.println("ausstieg");         
e.printStackTrace();
}
}
public void getrs(String sqlquery)
{
   String sqlstring;
   try
   {
         sqlstring=sqlquery;
         Statement stmt = con.createStatement();
         rs=stmt.executeQuery(sqlstring);
   }
   catch(Exception e) {
      
e.printStackTrace();
}
}
public void  updatesd(String kunden) throws SQLException
{

   String sql="update testbib.testtable set field = '1'  concat  (substring(field ,2,19))  where"
+" apaidn=cast('"+kunden+"' as Integer) and rrn(testbib.testfield) ="+this.rs.getString("satznummer") ;
   Statement stmt = con.createStatement();
   boolean update =stmt.execute(sql);
   int apaidn=this.rs.getInt("kunden");         
}
}

Bin noch nicht ganz fertig hab bestimmt noch variabelen deklariert die ich gar nicht mehr benutzte sollte euch aber nicht vom kommentieren abhalten.
Gruß
qojote

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:programm code posten zur Diskussion
« Antwort #6 am: 15.02.04 - 10:15:10 »
Ok. Ich fange im Laufe des Tages an. Da ich momentan wg. Zertifizierung auch am WE busy bin, werden wir dieses WE nicht fertig.

... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:programm code posten zur Diskussion
« Antwort #7 am: 15.02.04 - 13:16:24 »
ich kann dazu sagen, dass deine Anwendung nicht sehr objektorientiert programmiert ist. Im Prinzip hast du hier eine Klasse (Verarbeitung) mit einer Methode (process = verarbeite), die alles erledigt.

Wenn dein Ziel ist, dass das Teil läuft, egal wie, dann ist das in Ordnung.
Falls du sagst, "das ist doch objekorientiert, weil ich habe hier doch Objekte" oder falls du Tipps haben möchtest, wie du das vielleicht objektorientierter (und damit leichter erweiterbar, wartbar, verständlich, etc) machen kannst, dann sag nochmal bescheid.
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:programm code posten zur Diskussion
« Antwort #8 am: 15.02.04 - 20:50:41 »
Fühl mich momentan so als ob 2 fette Säcke Enterprise Java Beans auf meinen geschundenen Körper gefallen sind. Deshalb erstmal keinen code.

Thomas hat auf jedenfall Recht. Das ist nicht objekt-orientiert. Du kannst jede Methode, Eigenschaft um das Schlüsselwort static ergänzen.  

Design Überlegungen können schnell volumenmäßig ausarten. Aber ich kann nächste Woche mal anfangen.

2 Dinge vom reinen Java-Standpunkt:
- Dein Errorhandling ist nicht konsequent.
Ich würde die Exception auf jeden Fall in die Log Datenbank rausschreiben. Eine LogDatenbank zu benutzen ist grundsätzlich eine gute Idee.
- Wenn ich JDBC schreibe, benutze ich immer PreparedStatement.  
http://java.sun.com/docs/books/tutorial/jdbc/basics/prepared.html
Dies hat neben möglichen Performance-Vorteilen v.a. auch Vorteile hinsichtlich der Sicherheit. Wenn du dir SQL Statements direkt aus user eingaben aus Feldern zusammenbaust, können SQL-aficionados durch nested SQL statements und sowas relativ schnell Arten des Zugriffs auf die Daten erhalten, die du gar nicht willst.

Gruß Axel
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline qojote

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • I love YaBB 1G - SP1!
Re:programm code posten zur Diskussion
« Antwort #9 am: 15.02.04 - 22:25:02 »
Hallo Thomas,
es ist na klar nicht mein Ziel das es läuft egel wie.
Na klar will ich es besser machen deswegen habe ich den Code ja gepostet.
Jede Anregung ist na klar willkommen.
Geht aber nicht zu hart mit mir ins Gericht ich Anfänger :-))
Also Thomas tob dich ruhig aus. Selbes gilt na klar auch für dich Axel.

Ich hab na klar auch in den Büchern gestöbert aber die Objektorientierung an so einem einfachen Beispiel sieht eben doch ganz anders aus als wenn es dann selbst versucht.
Mann neigt doch dazu wenn man aus der Lotusschiene kommt den Code dann so runter zu hacken.
Das die errors im Log ausgegeben werden wollt ich noch machen aber erst als letztes auf der console ist es beim runprobieren bequemer.

Also schon mal vielen Dank in voraus.
Ich freu mich schon auf eure Hinweise.

Gruß
qojote

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:programm code posten zur Diskussion
« Antwort #10 am: 15.02.04 - 22:49:26 »
also austoben werde ich mich nicht. das solltest du machen zur Übung  ;)
ich kann nur versuchen mehr oder weniger wertvolle Tipps dafür zu geben.

Du hast schon Bücher zu OO gelesen, du kennst dich also schon etwas aus.

Als allererstes empfehle ich, nicht die VHIT-Methode anzuwenden und gleich in die Tasten zu hauen.
Für den Anfang wäre es z.B. ganz gut, mal zu überlegen, welche Klassen du später mal brauchen wirst. Wie machst du das? Ein Weg könnte sein, dass du diesen Satz
Zitat
Okay Anforderung war einfach aus einer Relationalen Db infos in eine Notesdb zu holen primärschlüssel ist die Kundennummer.

mal näher betrachtest und dein Problem vielleicht doch etwas detaillierter formulierst (in dieser Problembeschreibung könnten dann z.B. die Worte 'Konfiguration', 'Datensatz', 'Tabelle', usw. auftauchen).
In dieser Problembeschreibung sind Substantive ernsthafte Kandidaten für spätere Klassen. Für jede gefundene Klasse malst du einen Kasten und schreibst den Namen der Klasse rein.

Wenn du das hast, dann meld dich wieder.

Sorry, wenn sich das etwas oberlehrermäßig anhört. Es ist nicht so gemeint.
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline qojote

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • I love YaBB 1G - SP1!
Re:programm code posten zur Diskussion
« Antwort #11 am: 17.02.04 - 23:50:30 »
okay vielen Dank.

Hört sich nicht oberlehrerhaft an.Ich werd daa mal somachen wie von dir beschrieben und mich dann nochmal melden.

Gruß
qojote

Axel Janssen temp

  • Gast
Re:programm code posten zur Diskussion
« Antwort #12 am: 18.02.04 - 18:33:08 »
Hi,

das ganze ist nicht trivial.
Es läuft darauf hinaus ein notes-relationales Framework auf JDBC-Basis zu bauen.
Ich kann am Wochenende mal anfangen. Ich gebe mir genau 2 Stunden Zeit (werde also bestimmtenst nicht fertig).

Ich werde auch nicht mit OOAD-Analyse anfangen, sondern versuchen mich aufbauend auf dem Data Access Object J2EE Design Pattern der Geschichte zu nähern. OOAD-Analyse spielt natürlich eine Rolle, aber es fliessen weitere Sachen mit ein.

Das ist ein Problem von Notes+Java: In plain Java (oder mit App-Server) hat man immer bestehende Frameworks, die man einfach nutzt und nicht selber schreibt (Hibernate, Spring). In Notes lassen sich allenfalls Ideen davon nutzen. Das ist schwieriger.

Gruß Axel

Offline qojote

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • I love YaBB 1G - SP1!
Re:programm code posten zur Diskussion
« Antwort #13 am: 18.02.04 - 19:01:20 »
hi Axel,

wenn dich so hör dann beschleicht mich der Gedanke das ich mir da das falsche Porjekt zum lernen gesucht habe :-))

Aber ich hoffe doch das ich dabei eine ganze Menge von der vorgehensweise etc lernen kann.

Die Frameworks die du da aufzählst kenne ich nicht (newbie )
hast du da vielleicht einen Link.

Ich hab jetzt mal parallel angefangen mich mit dem oline course java paison (hast du mal denn Link gepostet )zu beschäftigen.
Kämpfe aber zur Zeit leider noch damit Ant auf meinem Notbook zum laufen zu bekommen.

Ich bin mal gespannt was deine Analyse zu Tage fördert.
Danke für deine Mühe.

Gruß
Qojote

Axel Janssen temp

  • Gast
Re:programm code posten zur Diskussion
« Antwort #14 am: 18.02.04 - 20:44:28 »
... hm. Ehrlichgesagt habe ich bei dem von mir empfohlenen Kurs dann nie mitgemacht  :-\

Vielleicht hilft das angeschlossene Yahoo-Groups Forum. Ich kann mich dunkel erinnern, dass da einige Leute Probleme mit der dort besprochenen ant-Konfiguration hatten.

Gruß Axel


Offline qojote

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • I love YaBB 1G - SP1!
Re:programm code posten zur Diskussion
« Antwort #15 am: 19.02.04 - 22:31:58 »
Ich glaube auch nicht das dir dieser Kurs no soviel gebracht hätte  ;)

Für mich ist das aber schon ein ganz guter Einstieg um mir einen kleinen Überlick über einen Teil dieses riesigen Themas zu verschaffen.

In dem Forum muß ich nochmal schauen.
Ich wills aber erst noch mal auf einem anderen Rechner versuchen mit einem vernünftigen OS.
Ich habs auf meinem Notebook getestet. Da hab ich leider aus Kompatilitäts gründen zu den Sesamstrassen spielen von meinem Sohn Windows ME drauf.

Gruß
qojote


Gruß
Sven

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:programm code posten zur Diskussion
« Antwort #16 am: 21.02.04 - 22:44:59 »
Hi,

es ist wesentlich einfacher anderer Leutes code nieder zu machen, als es selbst besser zu machen.

Du benutzt Java wie eine Skriptsprache. Das geht zwar auch, führt aber genau nicht zu Übersichtlichkeit und Wiederverwendbarkeit.

Klassen sollten durch "high cohesion" und "low coupling" geprägt sein.
high cohesion: Klassen sollten sich möglichst mit zusammenhängenden Themen befassen.
Das war dann auch in die richtige Richtung Verarbeitung beschäftigt sich mit Notes und sql mit RDBMS.
Wiederverwendbar ist aber gerade Verarbeitung nicht. Schon wenn du auf eine andere Tabelle der RDBMS zugreifen willst ginge es nur mit copy und paste Wiederverwendung, was auf die Dauer deutlich zu anstrengend ist.

Deine Exception Handling/Logging Strategie ist nicht konsequent. Das benutzen einer Log-Datenbank ist eine sehr gute Idee. Aber warum wird z.B. eine mgl. exception im SQL-statement Teil nicht geloggt?
Vernünftigste Regel ist wohl, dem Anwender eine für ihn verständliche Meldung zu liefern und das technische Zeugs in MÖGLICHST WENIGEN LOG-DATEIEN bzw. Mechanismen zu senden, damit sich das ein Fachmann anschauen kann.

In dieser Branche wird ständig nach Wiederverwendung geschrien. Besonders mehr Management orientierte Menschen haben aber oft deutliche Schwierigkeiten zu begreifen, dass Wiederverwendbarkeit eine tendentiell hohe intelektuelle Anforderung darstellt, die viel mit Erfahrung zu tun hat. Auch mit der Erfahrung von anderen Leuten. Deshalb beschäftige ich mich mit Design Patterns und Frameworks. Das ist zwar weniger sexy als einfach loszuhacken, aber imnsho mittelfristig eine gute Idee.
Meine Idee ist, die Anforderung erstmal mit klassisch mit dem DAO Access Pattern anzugehen, ibatis (http://www.ibatis.com/common/dao.html) abzuchecken und meine Rod Johnson Studien wieder aufzunehmen. Ausserdem ist es sinnvoll irgendwie eine Art von Connection Pooling aufzuabauen..

Fortsetzung folgt. Wg. der geschilderten, real existierenden Doppel-Belastung dauerts ein bischen länger.

Wir bräuchten erstmal eine vernünftige Debugging Umgebung. Ich habe eine Idee, wie man Notes-Agenten dadurch simmuliert, dass man aus Eclipse Notes von aussen anspricht. Dann hätte man Debugging von Java-Notes-Agenten ähnlichen Gebilden.

Gruß Axel
 
« Letzte Änderung: 21.02.04 - 22:58:16 von Axel_Janssen »
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:programm code posten zur Diskussion
« Antwort #17 am: 21.02.04 - 23:03:09 »
es ist wesentlich einfacher anderer Leutes code nieder zu machen, als es selbst besser zu machen.

Das sind wahre Worte :-)

Matthias
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline qojote

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • I love YaBB 1G - SP1!
Re:programm code posten zur Diskussion
« Antwort #18 am: 22.02.04 - 11:41:51 »
Hi Axel,

das mit der Verarbeitung ist mir leider auch schon beim programmieren aufgefallen  :-[.

Um nicht immer in den Agent einsteigen zu müssen habe ich die Sql Statements in die Konfigurations Dokumente ausgelagert was schon ganz gut ist damit ich mit dem Agent verschiedene Daten zurückgeben kann.
Mein großes Problem hierbei ist aber leider das die Notes Datenstrukturen und Datentypen ganz unterschiedlicher Art (zur Relationalen DB )sind was dazu führt das ich mir eigentlich jedes Feld anschauen und gegebenfalls wandeln muß.
Dies macht es na klar auch sehr schwer wieder verwendbaren Code zu schreiben.
Ich hab im Moment leider auch sehr wenig Zeit, hoffe aber das es ab morgen besser wird so das ich endlich mein Anforderungskonzept und den versuch das in Klassen zu packen fertig bekomme.
Da ich diese Art von Agenten in der nächsten Zeit öfters brauchen werde will ich mal versuchen so etwas wie ein Framework dafür zu bauen.

Gruß
Qojote

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:programm code posten zur Diskussion
« Antwort #19 am: 20.03.04 - 23:32:13 »
ok. hier kommt bald mein Vorschlag.

Habe das aber ein bischen anders gemacht.
Von "aussen" wird eine NotesDatenbank per Java ausgelesen und in eine MySQL Datenbank geschrieben.
Man kann das ganze auch als Notes-Agenten umschreiben. Benötigt aber ein bischen Anpassung. So konnte ich Eclipse benutzen. Ich schreib Notes-Java Agenten auch in Eclipse (und kopier die dann rüber). Alles in Eclipse zu schreiben ist noch besser, weil dann hab ich debugger und viele Dinge mehr.

So richtig voll objekt-orientiert ist das auch nicht.
Letztlich wird hier auch kein richtiger OO-Business-Layer gebildet, sondern die ganzen Daten nur so portiert: auslesen_aus_notes --> Datenstruktur (ohne behaviour, keine Methoden) --> RDBMS (konkret MySQL). Beziehungen zwischen Tabellen (oder Haupt-Antwort-Doc) werden nicht berücksichtigt. Kein Transaktionssupport.
Kyle Brown hat das in seinem tollen Websphere-Buch angesprochen. Der Sack schmeisst aber mit ca. 4-6 Fowler-Enterprise Business Application Patterns (auch ein sehr gutes Buch, btw) um sich und das geht nicht mal so schnell am Wochenende. War auch für die Aufgaben-Stellung nicht nötig.
Vielleicht geht das neue Spring-Framework in die Richtung, aber da bin ich mir noch nicht so sicher.

Ich werde hier lediglich eine Implementierung des guten alten DAO-J2EE-Patterns reinschmeissen.
Das ist aber schon ein ganzes Stück flexibler als Quojotes Ansatz.
Und es gibt hier tonnenweise dolle Interfaces und abstrakte Methoden.

Als konkretes Beispiel habe ich die gist - Datenbank von eknori genommen, die im Rahmen des Entfernungs-Berechnungs-Threads entstanden ist (hier ist link auf download: http://www.atnotes.de/attachments/Dist.rar ). Ist nicht klein.

Ich hab als "RDBMS" die zukünftige SAP-Datenbank mySql gewählt. Ist recht einfach zu bedienen und nicht so groß wie db2 oder Oracle. Reicht aus. http://www.mysql.com/products/index.html . Interessierte müssen auch unbedingt den jdbc-Treiber und (ernste Empfehlung) das controll center runterladen. GAlles gibts bei der mySql Seite.
Die einfachste Art mySql zu starten ist über den Befehl mysqld-nt --standalone aus der Kommandozeile im bin-Verzeichnis von mySql.
Der Standard-Alle-Rechte-User heisst glaub ich "admin" ohne Kennwort.

Ich beschreibe alles Eclipse-mässig, weil das meine Entwicklungsumgebung ist.

Wens interessiert. Auf MySql müsste erstmal eine Datenbank erstellt werden. Die soll "gist" heissen. Geht mit dem Controll Center
Hier ist der DDL-code für die Generierung der einzigen Tabelle:
Code
# Host: localhost
# Database: gist
# Table: 'location'
# 
CREATE TABLE `location` (
  `id` bigint(20) NOT NULL auto_increment,
  `city` varchar(50) NOT NULL default '',
  `loc` varchar(30) default '',
  `east` varchar(10) NOT NULL default '10',
  `north` varchar(100) NOT NULL default '',
  PRIMARY KEY  (`id`),
  KEY `BY_CITY` (`city`)
) TYPE=MyISAM; 

Die gist-DB sollte im Controll-Center grün sein. Dann auf SQL Button klicken. Das obige DDL reinkopieren und dann ausführen. Dann Control Center schliessen und öffnen (tool ist nicht so schlau, hab aber auch null doku dazu gelesen.

rest.kommt.später, lüpt aber schon.  
Arbeite vielleicht morgen noch daran, die Generierung der mySql Datenbank ein bischen konfortabler zu gestalten, aber das mach ich auch nicht jeden Tag.

Gruß Axel
« Letzte Änderung: 20.03.04 - 23:59:48 von Axel_Janssen »
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz