SQL-Datenbanktabelle auslesen mit einer Visual Web JSF Portlet Page

melly_

Grünschnabel
Hallo,

ich habe ein Problem mit dem Auslesen einer SQL-Datenbanktabelle über eine Visual Web JSF Portlet Page, vielleicht kann mir ja jemand weiterhelfen ;)

Ich habe eine Webanwendung (Server: OpenPortal Portlet Container) ohne Frameworks angelegt und dann eine ‚Visual Web JSF Portlet Page‘ View.jsp zugefügt. Läuft alles einwandfrei im OpenPortlal Portlet Container.
Nun habe ich eine Woodstock-Tabelle auf die Designansicht gezogen und möchte diese Tabelle mit Daten aus einer Datenbank füllen. Leider ist die Tabelle leer wenn ich das Portlet starte, es werden zwar die Spaltennamen angezeigt, aber der Inhalt wird nicht angezeigt bzw. ausgelesen.

Ich habe das Gleiche auch mit den Servern Tomcat und Glassfish und einer normalen ‚Visual Web JSF Page‘ getestet und da funktioniert es einwandfrei. Allerdings kann ich die Tabelle der Datenbank bei diesen Servern einfach auf die Tabelle in der Designansicht ziehen und die Data Source wird automatisch zugefügt. Mit dem OpenPortal Portlet Container muss ich dies manuell machen und da habe ich wohl einen Fehler, den ich seit Tagen einfach nicht finde und im Netz habe ich auch nichts brauchbares gefunden.

Meine Vorgangsweise:

1. Webanwendung (Server: OpenPortal Portlet Container) ohne Frameworks angelegt und dann eine ‚Visual Web JSF Portlet Page‘ View.jsp zugefügt


2. Rechtsklick auf Projekt --> New --> Other --> Glassfish --> JDBC Resource --> Create new JDBC Resource , alle Voreinstellungen beibehalten, nur die Datenbank aus der Liste ausgewählt (‚Extract from Existing Connection‘)

Es wird die sun-resources.xml erstellt:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Resource Definitions //EN" "http://www.sun.com/software/appserver/dtds/sun-resources_1_3.dtd">
<resources>
  <jdbc-resource enabled="true" jndi-name="jdbc/kalender_MySQL" object-type="user" pool-name="connectionPool">
    <description/>
  </jdbc-resource>
  <jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="connectionPool" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" 
steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
    <property name="URL" value="jdbc:mysql://localhost:3306/kalender"/>
    <property name="User" value="root"/>
    <property name="Password" value="admin"/>
  </jdbc-connection-pool>
</resources>


3. In der web.xml mit Add ‚Resource References‘ zugefügt

XML:
Code:
<resource-ref>
        <res-ref-name>jdbc/kalender_MySQL</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>


4. In der SessionBean1.java folgenden Code zugefügt:

Code:
  private void _init() throws Exception {
        termineRowSet.setDataSourceName("java:comp/env/jdbc/kalender_MySQL");
        termineRowSet.setCommand("SELECT * FROM termine");
        termineRowSet.setTableName("termine");
    }
    private CachedRowSetXImpl termineRowSet = new CachedRowSetXImpl();

    public CachedRowSetXImpl getTermineRowSet() {
        return termineRowSet;
    }

    public void setTermineRowSet(CachedRowSetXImpl crsxi) {
        this.termineRowSet = crsxi;
    }


5. Eine Woodstock-Tabelle auf die Designansicht der View.jsp gezogen und folgenden Code in der View.java zugefügt:

Code:
  private void _init() throws Exception {
        termineDataProvider.setCachedRowSet((javax.sql.rowset.CachedRowSet) getValue("#{SessionBean1.termineRowSet}"));
    }
  
    private CachedRowSetDataProvider termineDataProvider = new CachedRowSetDataProvider();

    public CachedRowSetDataProvider getTermineDataProvider() {
        return termineDataProvider;
    }

    public void setTermineDataProvider(CachedRowSetDataProvider crsdp) {
        this.termineDataProvider = crsdp;
    }


6. Rechtsklick auf die Tabelle, nun kann man unter ‚Table Layout‘ den ‚termineDataProvider‘ auswählen. Nun werden die Spaltennamen in der Designansicht richtig angezeigt.

Wenn ich das Portlet nun starte, wird die Tabelle sogar mit den richtigen Spaltennamen im Portlet Container angezeigt. Aber es werden keine Daten angezeigt, der Tabelleninhalt ist leer: „keine Element gefunden“.
Ich habe das Ganze dann auch manuell ganz genau wie oben beschrieben mit dem Glassfish probiert und es funktioniert einwandfrei.

Wenn ich genau das Selbe mit dem Tomcat manuell einrichte, wird die Tabelle garnicht angezeigt. Es funktioniert nur, wenn ich in der context.xml folgenden Code zufüge:

Code:
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="20" maxIdle="10" maxWait="-1" name="jdbc/kalender_MySQL" password="admin" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/kalender" username="root"/>

Mir ist aufgefallen, dass bevor ich diesen Code in der context.xml zugefügt habe, im Projekts-Fenster unter ‚Data Source References‘ zwar ‚ kalender_MySQL‘ angezeigt wird, wenn ich aber die Properties anschaue ist die URL leer, erst wenn ich den Code in die context.xml zufüge wird in der URL-Property ‚jdbc:mysql://localhost:3306/kalender‘ angezeigt und nun wird auch die Tabelle mit den Daten angezeigt, wenn ich das Projekt starte. Beim Glassfish wurde die URL sofort angezeigt.

Im Projekt mit dem OpenPortal Portlet Container wird in der URL auch nichts angezeigt. Vielleicht hat es damit was zu tun…

Wäre sehr dankbar für Hilfe ;) Vielleicht weiß ja jemand wo der Fehler liegt…

Grüße Melly
 
Zuletzt bearbeitet:
Zurück