ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
813
813
EMPFEHLEN
-
04.06.05 08:34 #1
- 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
-
05.06.05 00:57 #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ß TomJava 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
-
06.06.05 06:40 #3
- 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
-
11.06.05 04:49 #4
- Registriert seit
- May 2005
- Beiträge
- 3
hmm, keine Idee?
Ähnliche Themen
-
Wichtige Frage..
Von KatoLev im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 29.11.06, 15:10 -
wichtige Frage
Von loibsn im Forum Flash PlattformAntworten: 9Letzter Beitrag: 05.09.06, 02:23 -
Wichtige Frage
Von Monchichu im Forum Visual Basic 6.0Antworten: 3Letzter Beitrag: 30.08.06, 22:49 -
2k - Wichtige Frage
Von karldetlef im Forum Microsoft WindowsAntworten: 0Letzter Beitrag: 21.07.02, 12:13 -
wichtige Frage
Von lars2001 im Forum PHPAntworten: 5Letzter Beitrag: 28.09.01, 20:50





Zitieren

Login





