Autor Thema: NSD bei Applet  (Gelesen 2477 mal)

Offline Mandalor

  • Senior Mitglied
  • ****
  • Beiträge: 359
  • Geschlecht: Männlich
NSD bei Applet
« am: 09.08.05 - 17:35:43 »
Hallo, ich bin am verzweifeln:

Folgendes Priblem ich baue gerade das Planerapplet in eine DB ein. Den Exchanger habe ich angepasst. Alles Funktioniert Super, wenn ich die Maske aus dem Designer starte, Starte ich sie aber über eine Schaltfläche, dann kommt (mit etwas Glück NSD). Das heißt, es kommt nicht immer, aber so mit einer Wahrscheinlichkeit von 30-40 %

Hat jemand eine Idee???
mit besten Grüßen

Markus Petzold

Offline yes2002

  • Aktives Mitglied
  • ***
  • Beiträge: 193
  • Ich liebe dieses Forum!
Re: NSD bei Applet
« Antwort #1 am: 09.08.05 - 21:04:40 »
Hi, dann stell doch mal das nsd-file zur Verfügung. Da steht u.U. ein Hinweis auf die Ursache drin.
Gruß

Offline Mandalor

  • Senior Mitglied
  • ****
  • Beiträge: 359
  • Geschlecht: Männlich
Re: NSD bei Applet
« Antwort #2 am: 10.08.05 - 10:13:58 »
Sorry, geht nicht ist zuuuu groß (714.000 Zeichen), ich habe den Fehler lokalisiert: es passiert beim lesen von aus Notes: (doc.getColumnValues().elementAt(2)), aber nur manchmal!!!! , wenn es abschmiert, dann immer hier!
mit besten Grüßen

Markus Petzold

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: NSD bei Applet
« Antwort #3 am: 10.08.05 - 13:27:42 »
Tippe mal auf ein Threadingproblem, kannst du mal den Code posten wo der Fehler auftritt. Gut wäre natürlich wenn man erkennen könnte in welchem Thread das ganze läuft.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline Mandalor

  • Senior Mitglied
  • ****
  • Beiträge: 359
  • Geschlecht: Männlich
Re: NSD bei Applet
« Antwort #4 am: 10.08.05 - 13:42:55 »
Das ding liest die Werte über die Ansicht aus den Docs und genau da schmiert er aber, wenn er keine Lust mehr hat!

view = dbNotes.getView("VData") ;
        doc = view.getFirstDocument() ;
        while( doc != null )
        {   System.out.println("DOC ist da") ;
           DateTime start = (DateTime)doc.getColumnValues().elementAt(0) ;
           
           System.out.println("DOC ist da2") ;
           DateTime end = (DateTime)doc.getColumnValues().elementAt(1) ;
           Date notesDateStart = start.toJavaDate() ;
           Date notesDateEnd =  end.toJavaDate() ;
           System.out.println("DOC ist da3") ;
           String row = (String)doc.getColumnValues().elementAt(2) ;
           String name = (String)doc.getColumnValues().elementAt(3) ;
           //String creator ="leer";//(String)doc.getColumnValues().elementAt(8) ;
           String cat = (String)doc.getColumnValues().elementAt(4) ;
           System.out.println("DOC ist da4") ;
           String target = (String)doc.getColumnValues().elementAt(5) ;
           String purpose = "Test";//(String)doc.getColumnValues().elementAt(6) ;
           System.out.println("DOC ist da5") ;
mit besten Grüßen

Markus Petzold

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: NSD bei Applet
« Antwort #5 am: 10.08.05 - 13:47:48 »
Sorry aber der Codeteil nützt nicht besonders viel, da man nicht sieht in welcher Methode des Applets das aufgerufen wird. Poste doch etwas mehr, damit man einen Überblick bekommt.

Noch ne ander Frage verwendest du in deiner Schleife recycle(); Stürzt er beim ersten Durchlauf ab oder macht er die Schleife einige male?

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline Mandalor

  • Senior Mitglied
  • ****
  • Beiträge: 359
  • Geschlecht: Männlich
Re: NSD bei Applet
« Antwort #6 am: 10.08.05 - 14:02:44 »
die Schleife läuft ca. 1000 - 1600 mal durch, er stützt bei einem zufälligen Doc ab (manchmal läuft er auc durch)

Ja  recycle() wird verwendet

mehr Code:

private void initSlotData( PlanerOptions opt )
  {
      try
      {
        PlanerDatabase planerDb = opt.getDb() ;
        Calendar calendar = Calendar.getInstance() ;
        //calendar.setTimeZone(TimeZone.getTimeZone("GMT"));
        Database dbNotes = null ;
        View view = null;
        Document doc = null, doc1 = null  ;
        System.out.println("OK 201") ;
        dbNotes = session.getDatabase(applet.getParameter("Server"),
                                               applet.getParameter("Database")) ;

        this.initSlotKinds(dbNotes, planerDb);
        view = dbNotes.getView("VResources") ;
        doc = view.getFirstDocument() ;
        while( doc != null )
        {
          String row = (String) doc.getColumnValues().elementAt(0) ;
          if(planerDb.getRowNb(row)<0){
            planerDb.addRow(row);
          }
          doc1 = doc ;
          doc = view.getNextDocument(doc) ;
          doc1.recycle();
        }
        view = dbNotes.getView("VData") ;
        doc = view.getFirstDocument() ;
        while( doc != null )
        {   System.out.println("DOC ist da") ;
           DateTime start = (DateTime)doc.getColumnValues().elementAt(0) ;
           
           System.out.println("DOC ist da2") ;
           DateTime end = (DateTime)doc.getColumnValues().elementAt(1) ;
           Date notesDateStart = start.toJavaDate() ;
           Date notesDateEnd =  end.toJavaDate() ;
           System.out.println("DOC ist da3") ;
           String row = (String)doc.getColumnValues().elementAt(2) ;
           String name = (String)doc.getColumnValues().elementAt(3) ;
           //String creator ="leer";//(String)doc.getColumnValues().elementAt(8) ;
           String cat = (String)doc.getColumnValues().elementAt(4) ;
           System.out.println("DOC ist da4") ;
           String target = (String)doc.getColumnValues().elementAt(5) ;
           String purpose = "Test";//(String)doc.getColumnValues().elementAt(6) ;
           System.out.println("DOC ist da5") ;
           StringBuffer sb = new StringBuffer() ;
           System.out.println("DOC ist da6") ;

           //System.out.println("creator2 : " + creator );
           for( int i = 0 ; i < purpose.length() ; i++ )
           {
             char c = purpose.charAt(i) ;
             int ii = (int) c ;
             if( c == 0 )
             {
               sb.append((char)0x0A) ;
             }
             else
               sb.append(c) ;
           }
           purpose = sb.toString() ;
           System.out.println("Name: " + name) ;

          if( planerDb.getRowNb(row) == -1 )
          {
            // nö, müssen wir es anlegen!!!
            planerDb.addRow(row);
          }

             URL docURL = null ;
              try{
                docURL = new URL(doc.getURL()) ;
              }
              catch( Exception ex ) {}
              String addString[] = new String[1] ;
              addString[0] = target ;
              Slot slot = new Slot(planerDb,notesDateStart,notesDateEnd,row,
                                   name,purpose,docURL,addString,null,null );
              String kind = cat ;
              slot.id = doc.getUniversalID() ;
              //System.out.println(doc.getUniversalID()) ;
              Color c = planerDb.getColor( cat ) ;
              String username = applet.getParameter("ReadOnlyName") ;
              if(( username != null ) && ( username.length() > 0 ))
              {
                if( !username.equalsIgnoreCase(slot.getSubject()) )
                  //if( !username.equalsIgnoreCase(creator))
                    slot.setReadOnly(true);
              }
              if( c == null )
              {
                System.out.println("Kind \"" + kind + "\"is undefined!") ;
              }
              else
              {
                //System.out.println( c.getRGB() ) ;
                slot.setColor( planerDb.getColor( kind )) ;
                planerDb.addSlot( slot ) ;
              }
          doc1 = doc ;
          doc = view.getNextDocument(doc) ;
          doc1.recycle() ;
        }
        System.out.println("OK 295") ;

      }
      catch( Exception ex )
      {
         ex.printStackTrace() ;
         
      }
      System.out.println("Vorbei 303") ;
  }
mit besten Grüßen

Markus Petzold

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: NSD bei Applet
« Antwort #7 am: 10.08.05 - 14:19:45 »
Code sieht an und für sich nicht schlecht aus, aber das was ich sehen will, sehe ich immer noch nicht. Interessant ist, greift vielleicht bereits ein anderer Thread auf die Notesdaten zu, während Sie erstellt werden. Sprich läuft der Planer schon während du ihm die Daten reinschiesst. Generell würde ich überlegen, dass ganze nicht in einem Applet zu machen sondern in einem Agenten und die grafische Ausgabe in ein eigenes Fenster. Damit habe ich im Gegensatz zu den Aplletvarianten bessere Erfahrungen gemacht.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: NSD bei Applet
« Antwort #8 am: 10.08.05 - 14:39:30 »
Code
catch( Exception ex ) {}

tue da wenigsens ein System.out.println() rein oder ex.printStackTrace() in diese geschweiften Klammern. Das kann wirklich zu langen Suchaktionen führen!

Vielleicht siehst du die Ursache schon, wenn du das dort einfügtst.

Im übrigen würde ich daraus vermutlich mehrere Methoden wenn nicht gar Klassen machen.



Axel

« Letzte Änderung: 10.08.05 - 15:04:18 von kennwort »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Mandalor

  • Senior Mitglied
  • ****
  • Beiträge: 359
  • Geschlecht: Männlich
Re: NSD bei Applet
« Antwort #9 am: 10.08.05 - 15:27:26 »
ich sehen den Fehler da nicht: wenn NSD kommt printet er ja nichts mehr!!! ich schau mal nach ob ein andererer Thread am arbeiten ist!
mit besten Grüßen

Markus Petzold

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: NSD bei Applet
« Antwort #10 am: 10.08.05 - 15:44:16 »
das kann allerdings sein mit dem Thread. D.h. NSD und dein Programm laufen in 2 unterschiedlichen Threads .
Das hört sich nach einer sogenannten Race Condition an. Dh. bei parallel Threads ist nie wirklich sicher, wann welcher Thread wieviel CPU bekommt und dann kann es deshalb bei mehreren Tests über die gleichen Testdaten zu unterschiedlichen Ergebnissen kommen. Eben weil das Thread Scheduling nicht immer gleich ist.
Ist vermutlich eine Frage der richtigen Thread Methode (z.B. yield() oder sleep(), wait()/notify(), etc. an der richtigen Stelle. Tricky aber machbar.

s. z.B. Ende dieser Seite: http://www.dpunkt.de/java/Programmieren_mit_Java/Multithreading/3.html
« Letzte Änderung: 10.08.05 - 16:00:15 von kennwort »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Mandalor

  • Senior Mitglied
  • ****
  • Beiträge: 359
  • Geschlecht: Männlich
Re: NSD bei Applet
« Antwort #11 am: 10.08.05 - 17:09:49 »
Danke, das bringt Licht ins Dunkle
mit besten Grüßen

Markus Petzold

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: NSD bei Applet
« Antwort #12 am: 10.08.05 - 23:06:25 »
echt  ???
bei mir nicht so richtig, habs mir nochmal flüchtig angeschaut.
Wo wird denn da mit dem zweiten Thread kommuniziert.
PlanerDatabase?
Aber du kennst das Programm auch besser.
Ich halte yield() für einen guten Kandidaten
Und mach wirklich deine Methoden kleiner. Zumindest als Ziel im Hinterkopf. Es hilft.
Gerade wenn ich in unbekannten Terrain bin, mach ich zwar auch manchmal lange Methoden, aber ich teil das dann irgendwann auf. Und das ist immer nur punktuell. Ich würd sonst irgendwann den Überblick verlieren und das macht keinen Spaß.
« Letzte Änderung: 10.08.05 - 23:21:42 von kennwort »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz