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> |