Webapp mit Datenbank

  • Beitrags-Autor:
  • Beitrags-Kategorie:Sonstiges

XyzdbStartStop implements LifecycleListener reagiert auf Lifecycle.START_EVENT und Lifecycle.STOP_EVENT; beim Start wird Server.createTcpServer mit passenden TCP-Optionen ausgeführt und eine globale Ressource „xyz/db“ bereitgestellt; beim Stopp wird per SQL-Befehl ein „SHUTDOWN“ ausgelöst und die globale Ressource abgebaut

XyzdbLink implements LifecycleListener reagiert auch auf Lifecycle.START_EVENT und Lifecycle.STOP_EVENT; beim Start wird die globale Ressource „xyz/db“ als lokale „xyzdb“gebunden; beim Stopp wird entbunden

die Webapp nutzt die lokale Ressource „xyzdb“

Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
Xyzdb db = (Xyzdb) envCtx.lookup("xyzdb");

beim Loader muss „delegate“ gleich „true“ sein, damit die Ressource korrekt bereitgestellt werden kann

siehe auch https://stackoverflow.com


<!-- context.xml -->
<Resource name="jdbc/xyz" auth="Container" type="javax.sql.DataSource"
            driverClassName="com.ibm.db2.jcc.DB2Driver"
            username="admin" password="geheim"
            maxActive="20" maxIdle="10"
            maxWait="-1"
            url="jdbc:db2://{servername}:50000/{dbname}"
/>
InitialContext ic = new InitialContext();
var dsName = "java:comp/env/jdbc/xyz";
var ds = (javax.sql.DataSource) ic.lookup(dsName);
try (var conn = ds.getConnection()) {
   // ...
}

Datenbank per JSTL nutzen

<%
    // lokale Einstellungen für Datenbankverbindung holen
    Properties props = AppUtil.lookForProperties();
    ResourceText query = ResourceText.fromJar(props.getProperty("sql"));
%>
<%-- Konfiguration --%>
<c:set var="dbDriver"><%= props.get("driver") %></c:set>
<c:set var="dbUrl"><%= props.get("url") %></c:set>
<c:set var="dbUser"><%= props.get("user") %></c:set>
<c:set var="dbPass"><%= props.get("pass") %></c:set>
<c:set var="abfrage"><%= props.get("sql") %></c:set>
<sql:setDataSource var = "db"
    driver = "${dbDriver}" url = "${dbUrl}"
    user = "${dbUser}" password = "${dbPass}"/>
<%-- SQL-Abfrage --%>
<sql:query dataSource="${db}" var="result">
    <%= query.text() %>
</sql:query>
 
<c:if test="${fn:length(result.rows) eq 0}">
    <p>Keine Daten!</p>
</c:if>
 
<c:forEach var="x" items="${result.rows}" varStatus="loop">
    ${x.abcd}
</c:forEach>