tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
813
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Diamantregen Diamantregen ist offline Grünschnabel
    Registriert seit
    May 2005
    Beiträge
    3
    Hallo,

    waer toll wenn Ihr mir helfen koenntet.

    Und zwar have ich eine Tabelle die heisst "Documents". In dieser Tabelle sind nun neben varchar2 und number Spalten auch folgende blob spalten vorhanden: document1, document2 und document3.

    Ich habe nun folgende finder methode fuer diese Tabelle:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    <query>
                <query-method>
                   <method-name>findByCustomerId</method-name>
                   <method-params>
                      <method-param>java.lang.Integer</method-param>
                      <method-param>java.util.Date</method-param>
                   </method-params>
                </query-method>
                <ejb-ql><![CDATA[select object(t) from Documents as t where t.customer.id=?1 AND t.updated > ?2 order by t.updated desc]]></ejb-ql>
             </query>

    Bis hierhin so weit so gut.

    Dann habe ich ein Session Bean welches eben jene Methode fuer den Klienten zur Verfuegung stellt:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    
    public ArrayList getDocumentsByCustomerId(Integer customerid, int days)
                throws EJBException {
            try {
                InitialContext context = new InitialContext();
     
                //Get the home interface with JNDI from the application server
                DocumentsLocalHome documentsLocalHome = (DocumentsLocalHome) context.lookup(DocumentsLocalHome.JNDI_NAME);
                Calendar now = Calendar.getInstance();
                now.add(Calendar.DAY_OF_MONTH, -days++);
                //get all Documents with the local home interface
                
                Collection collection = documentsLocalHome.findByCustomerId(customerid, now.getTime());
                
                //define an ArrayList
                ArrayList arrayList = new ArrayList();
                //loop over the collection
                for (Iterator iter = collection.iterator(); iter.hasNext();) {
                    DocumentsLocal element = (DocumentsLocal) iter.next();
     
                    //define a new DocumentsView object
                    DocumentsView documentsView = new DocumentsView();
                    //set the DocumentsValue in documentsView
                    documentsView.setdocumentsValue(element
                            .getDocumentsValue());
                    
                    //add the documentsView object to the ArrayList
                    arrayList.add(documentsView);
                }
                //return the array of DocumentsView
                return arrayList;
     
            } catch (NamingException e) {
                throw new EJBException(e.getMessage());
            } catch (FinderException e) {
                throw new EJBException(e.getMessage());
            }
        }

    Bemerkung: DocumentView ist lediglich ein Wrapper fuer ein DocumentValue

    Meine Frage ist nun: Wird bei Aufruf der Methode des Session Beans jedes DocumentsView mit realen Daten gefuellt? Ich nehme mal stark an ja, denn die das Ausfuehren der Methode dauert sehr lang obwohl nur 3 Zeilen in der Tabelle vorhanden sind und ich daher die 3 blob Spalten Document1, Document2 und Documents3 als Ursache vermute.

    Wie kann erreicht werden dass zunaechst nur Referenzen bestehen (wie es ja eigentlich der Fall sein sollte) und nur bei explizitem Aufruf die blob Daten aus der Datenbank geholt werden? Wie muesste dieser Aufruf dann aussehen?

    Ich hatte mir zuerst ueberlegt nur die Spalten ohne die blobs in die finder methode zu schreiben und dann mit einer zusaetzlichen finder methoden pro blob dann die blobs explizit zu holen. Dies scheitert allerdings daran dass ich nirgends eine Moeglichkeit gefunden habe nur gewisse Spalten per finder zu holen und es mit Sicherheit eine andere Loesung fuer das oben beschriebene Problem geben muss.

    Ich hoffe ein paar von Euch koennen mir einen Ratschlag geben, wenn moeglich mit Beispiel, danke

    Beste Gruesse,
    Roger
     

  2. #2
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Wie wär's denn wenn du mal in der Doku deines AppServers nachschaust ob man bei der verwendeten CMP Engine sowas wie Lazy Loading auf CMP-Field Ebene aktivieren kann.

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  3. #3
    Diamantregen Diamantregen ist offline Grünschnabel
    Registriert seit
    May 2005
    Beiträge
    3
    Hallo Tom,

    vielen Dank fuer Deine Antwort. Hat mich schon einen guten Schritt voran gebracht!

    Ich verwende Jboss als Applikationsserver und hier gibt es ja durchaus die Option des lazy loadings. Doch abgesehen davon dass ich noch nicht gefunden habe wie load-groups und eager-load-groups per Xdoclet definiert werden, ist noch folgende Frage offen: Wann genau werden die load-group Felder mit Daten gefuellt? Wenn schon das alleinige Iterieren durch die Collection (siehe meine Code oben) das Befuellen bewirkt, wuerde es ja nicht viel bringen...ein Befuellen durch den Aufruf einer getter-Methode schon.

    Waer supie wenn Du eventuell noch ein paar Tips hast, vielleicht auch mit Beispielcode? Danke

    Beste Gruesse,
    Roger
     

  4. #4
    Diamantregen Diamantregen ist offline Grünschnabel
    Registriert seit
    May 2005
    Beiträge
    3
    hmm, keine Idee?
     

Ähnliche Themen

  1. Wichtige Frage..
    Von KatoLev im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 29.11.06, 15:10
  2. wichtige Frage
    Von loibsn im Forum Flash Plattform
    Antworten: 9
    Letzter Beitrag: 05.09.06, 02:23
  3. Wichtige Frage
    Von Monchichu im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 30.08.06, 22:49
  4. 2k - Wichtige Frage
    Von karldetlef im Forum Microsoft Windows
    Antworten: 0
    Letzter Beitrag: 21.07.02, 12:13
  5. wichtige Frage
    Von lars2001 im Forum PHP
    Antworten: 5
    Letzter Beitrag: 28.09.01, 20:50