Archief - [JAVA] Probleem met JSP en Hibernate

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Exorcister

Legacy Member
Om te communiceren met de database, gebruik ik hibernate.

Ik wil alle data uit een tabel laten zien op het scherm, hiervoor heb ik een methode showResults() die een String teruggeeft. Deze methode maakt deel uit van een gewone Javaklasse
Deze String bevat de volledige opmaak en alle gegevens uit de databank.

Code:
public String showResults() {
        [COLOR="PaleTurquoise"]String test = "ja";[/COLOR]
        
        try {
            session = sessionFactory.openSession();

            sqlQuery = "from Site";
            Query query = session.createQuery(sqlQuery);
            for (Iterator it = query.iterate(); it.hasNext();) {
                site = (model.Site) it.next();
                
                test += "URL: " + site.getUrlNaam() + "<br/><br/>";
                sqlQuery = "from Scan where siteID = '" + site.getSiteID() + "' ";
                Query query2 = session.createQuery(sqlQuery);
                for (Iterator iter = query2.iterate(); iter.hasNext();) {
                    scan = (model.Scan) iter.next();
                    test += "Gebruikte scanner: " + scan.getScannerNaam() + "<br/>";
                    test += "Datum: " + scan.getDatum() + "<br/><br/>";
                    test += "Resultaat scan<br/>" + scan.getScanResultaat() + "<br/><br/><br/>";
                    test += "-------------------------------------<br/>";
                }
                test += "-------------------------------------<br/>";
            }
            //System.out.println(test);

            session.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return test;
    }

Als ik deze methode oproep en de String in de console laat zien (System.out.print..) dan krijg ik het volledige resultaat te zien, dus daar zijn er geen problemen.


Maar nu mijn probleem is om dezelfde String in een JSP-pagina te laten zien.

Ik krijg enkel "ja" op het scherm. ( ja is de beginwaarde van die String)

Het lijkt dus of de code in het try-catch-block volledig wordt genegeerd... :confused:

Code:
<% ExecutingHibernate j = new ExecutingHibernate(); 
 String t = j.showResults();%>
<p> <%= t %> </p>

forloRn_

Legacy Member
Volgens mij krijg je gewoon een hele hoop exceptions maar Tomcat redirect die naar catalina.out. Haal alle System.out.println's eens uit commentaar en bekijk catalina.out eens.

Tips:
* gebruik lokale variabelen in plaats van klassevariabelen
* zet session.close() in een finally-block
* haal markup uit de code en geef een Collection terug in plaats van een String
* haal scriptlets en business logic in het algemeen uit je JSP
* geef die Collection door aan je JSP als een attribuut en itereer erover met <c:foreach>
* SQL injection?
* ...

Exorcister

Legacy Member
Bedankt voor de snelle reactie.

Als ik de log van Glassfish bekijk, krijg ik inderdaad een exception

Code:
java.sql.SQLException: No suitable driver
	at java.sql.DriverManager.getConnection(DriverManager.java:545)
	at java.sql.DriverManager.getConnection(DriverManager.java:140)
	at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133)
	at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:111)
	at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2101)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1325)
	at ExecutingHibernate.<init>(ExecutingHibernate.java:41)
	at action.ScanAction.execute(ScanAction.java:42)
	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
	at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:431)
	at org.apache.catalina.core.StandardWrapperValve.preInvoke(StandardWrapperValve.java:462)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:139)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:186)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:719)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:657)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:96)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:187)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:719)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:657)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:651)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1030)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:142)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:719)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:657)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:651)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1030)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:242)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:180)
	at com.sun.grizzly.http.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:633)
	at com.sun.grizzly.http.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:570)
	at com.sun.grizzly.http.DefaultProcessorTask.process(DefaultProcessorTask.java:827)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:152)
	at com.sun.enterprise.v3.services.impl.GlassfishProtocolChain.executeProtocolFilter(GlassfishProtocolChain.java:71)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:103)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:89)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:67)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:56)
	at com.sun.grizzly.util.WorkerThreadImpl.processTask(WorkerThreadImpl.java:325)
	at com.sun.grizzly.util.WorkerThreadImpl.run(WorkerThreadImpl.java:184)

Ontbreekt er dan iets (Jar ofzo)? (Heb zelf nog ni zoveel inzicht in JSP en alles daarrond :p)
Tis omdat als ik de .war file deploy in GlassFish, er geen errors worden getoond.
Vroeger kwamen er bvb wel errors en aan de hand daarvan wist ik dan welke libraries er nog ontbraken, dus misschien ligt het probleem niet aan een ontbrekende jar nu?

U stelt ook voor om een collection terug te geven in plaats van een String, dit zou ik inderdaad later nog aanpassen, maar het zou in feite toch moeten gaan met een String ook?

forloRn_

Legacy Member
Zit je JDBC-driver in WEB-INF/lib van je .war?

En ja, dat gaat ook met een String.

Exorcister

Legacy Member
Yep, sqlite-jdbc-3.6.0.jar

Kdenk dat er iets verkeerd is met de connection URL :p

Het stond oorspronkelijk op:
jdbc: sqlite:C:\...\scanner.db

Ik heb dit dan veranderd naar:
jdbc: sqlite://localhost:4848/C:\...\scanner.db
jdbc: sqlite://localhost:4848/scanner.db

Ik heb beiden al geprobeerd, maar geen verandering.

Waarom localhost:4848? Glassfish draait op 4848, dus denk ik dat het ook 4848 voor de database moet zijn?

forloRn_

Legacy Member
Normaal gezien zou dit je url moeten zijn:

jdbc:sqlite://localhost/scanner.db

De poort is niet dezelfde als die van Glassfish (logisch: een webserver spreekt HTTP, geen SQLite), maar by default zou hij toch de juiste moeten kiezen.

Of laat die scanner.db eens weg.

Exorcister

Legacy Member
Nope, nog geen verandering.

De Database moet toch niet worden toegevoegd aan ODBC Data Sources e?
Ik weet dat we dit bij projecten op school moesten doen opdat we konden connecteren met de database, maar dat zit ver momenteel :p

De webapplicatie moet toch op een of andere manier weten waar dat de scanner.db staat?
Daarom dat ik volledig pad meegaf achter jdbc: sqlite://localhost/...
Of weet een webapplicatie op een andere manier dan waar en welke db het nodig heeft?

forloRn_

Legacy Member
Hmm, weer iets bijgeleerd. Blijkt dat een SQLite-database geen apart proces is maar gewoon een simpel bestand.

Probeer dit eens: jdbc:sqlite:C:/.../scanner.db

Vul de rest van het pad in en gebruik gewone slashes in plaats van backslashes.

Exorcister

Legacy Member
Neen spijtig genoeg werkt dit ook niet.

Om het gewoon uit te voeren en in console te laten zien, met System.out.print dus, werkt deze connection url en krijg ik het resultaat in de console
Maar het werkt niet als ik het wil gebruiken op een JSP-pagina :s.
Kheb dit geprobeerd met zowel gewone slashes als backslashes nu

Yngwie

Legacy Member
Geeft hij nog steeds een exception wanneer je de war deployed op glassfish? zoja welke?
Probeer eens de sqlite jar in de lib van glassfish te zetten.

Exorcister

Legacy Member
Bedankt Yngwie!

Kheb de sqlite jar in de lib van glassfish gezet, het werkt nu :D


En ook dank aan forloRn_ voor de snelle reacties met mogelijke oplossingen :)

forloRn_

Legacy Member
Kan iemand me eens uitleggen waarom dat precies werkt? Alles in WEB-INF/lib zit toch automatisch in je classpath?

Yngwie

Legacy Member
forloRn_ zei:
Kan iemand me eens uitleggen waarom dat precies werkt? Alles in WEB-INF/lib zit toch automatisch in je classpath?

Ik denk dat de sqlite driver aanwezig moet zijn bij het opstarten van de appserver aangezien de appserver zorgt voor de connection pooling en het managen van hibernate en dergelijke.

Ik zeg er wel bij "ik denk". Heb zo ook al eens lange tijd aan het zoeken geweest waarom c3p0 (connectionpool manager te combineren met bv hibernate) niet wou werken. Vanaf ik de jar in de lib van tomcat zwierde ging het wel.

forloRn_

Legacy Member
Van Glassfish zou ik dat eventueel nog kunnen aannemen, maar Tomcat is geen application server en heeft dus heeft geen uitstaans met databases.

Ollie

Legacy Member
forloRn_ zei:
Van Glassfish zou ik dat eventueel nog kunnen aannemen, maar Tomcat is geen application server en heeft dus heeft geen uitstaans met databases.

Als je je datasource specifieert als Resource in conf/server.xml wel.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan