--Server-Side Trigger für Storages
1 post
• Page 1 of 1
--Server-Side Trigger für Storages
Dieser Artikel ist veraltet - Bitte verwenden Sie unser neues System
https://doc.sibvisions.com
Mit JVx kann die Business Logik sowohl in der Datenbank als auch in der Middle Tier entwickelt werden. Um die Business Logik vollständig in der Middle Tier zu entwickeln, sind sogenannte Server-Side Triggers eine Grundvoraussetzung. Diese funktionieren ähnlich wie die DataBook Events am Client.
Ein Server-Side Trigger wird z.B aufgerufen wenn am Client ein neuer Datensatz eingefügt/geändert/gelöscht wurde.
Anwendungsbeispiel
Wir verwenden am Client ein RemoteDataBook für die Erstellung von Benutzerkonten. Ein Benutzer wird definiert durch Benutzername, Passwort, Vor- und Nachname. Das Passwort muss jedoch verschlüsselt in der Datenbank abgelegt werden.
Wir definieren die Storage:
- Code: Select all
public DBStorage getUsers() throws Exception
{
DBStorage users = (DBStorage)get("users");
if (users == null)
{
users = new DBStorage();
users.setDBAccess(getDBAccess());
users.setWritebackTable("USERS");
users.open();
users.eventBeforeInsert().addListener(this, "doEncryptPwd");
users.eventBeforeUpdate().addListener(this, "doEncryptPwd");
put("users", users);
}
return users;
}
und den Trigger für Insert und Update:
- Code: Select all
public void doEncryptPwd(StorageEvent pEvent) throws Exception
{
IBean bn = pEvent.getNew();
String sNew = (String)bn.get("PASSWORD");
String sOld;
IBean bnOld = pEvent.getOld();
if (bnOld != null)
{
sOld = (String)bnOld.get("PASSWORD");
}
else
{
sOld = null;
}
if (!CommonUtil.equals(sOld, sNew))
{
bn.put("PASSWORD", AbstractSecurityManager.getEncryptedPassword(
SessionContext.getCurrentSessionConfig(), sNew));
}
}
In unserem Beispiel verwendeten wir ein IBean um auf die Properties zuzugreifen. Der Event erlaubt auch die Verwendung von POJOs wie in folgendem Beispiel:
- Code: Select all
public void doEncryptPwd(StorageEvent pEvent)
{
...
...
User user = pEvent.getNew(User.class);
user.setPassword(AbstractSecurityManager.getEncryptedPassword(
SessionContext.getCurrentSessionConfig(),
user.getPassword()));
}
Hinweis
Es kann jedes beliebige POJO verwendet werden. Der implementierte Mechanismus versucht, die Properties über die Spaltenbezeichnungen aus der Datenbank miteinander abzugleichen. In unserem letzten Beispiel könnte auch ein Adress POJO verwendet werden, sofern darin relevante Properties vorhanden sind. Es werden immer nur die möglichen Properties abgeglichen.
-
Development@SIB - Posts: 325
- Joined: Mon Sep 28, 2009 1:54 pm
1 post
• Page 1 of 1