|
|
Ablieferungstermin und erreichbare Punktzahl für diese Aufgabe, sowie Voraussetzungen für die Prüfungszulassung entnehmen Sie bitte http://sar.informatik.hu-berlin.de. Ziel dieses Praktikums ist die Vertiefung Ihrer EJB-Kenntnisse. Auf der einen Seite soll ein komplexes Datenmodell mit Hilfe von Entity-Beans realisiert werden. Des Weiteren wird die Verwendung von Message-Driven-Beans und stateful Session-Bean eingeführt. AnwendungsfallIn diesem Praktikum soll eine Nutzerverwaltung mit Hilfe von EJB 3.0 realisiert werden. Bestehende Nutzer können sich über die login()-Funktionalität des UserManagers an das System anmelden. Neue Nutzer müssen sich hingegen zunächst einmalig registrieren (register()). Über deregister() kann zudem ein Nutzer wieder aus dem System ausgetragen werden. Des Weiteren stehen eine Reihe von Hilfsfunktionen zur Verfügung (createRole(), ...). Eine Besonderheit weist dieses System auf: schlägt ein login()-Versuch auf Grund eines falschen Passwortes fehl, so ist dieser Fehlversuch zu loggen. Dies soll jedoch asynchron erfolgen. Hierzu ist eine JMS-Nachricht zu erzeugen und an eine Message-Queue zu senden. Nachrichten in der Message-Queue sollen in regelmäßigen Abständen von einem Message-Driven-Bean (LoggerEJB) verarbeitet werden (Erzeugen von Log-Objekten und persistentes Speichern unter Nutzung der EJB-Funktionalität).
Hinweise
Aufgabe und BewertungBegründen Sie die von Ihnen getroffenen Design-Entscheidungen und beschreiben Sie aufgetretene Besonderheiten und Probleme. Benutzen Sie dafür eine HTML-Datei mit dem Namen index.html. Abzugeben sind weiterhin die Quelltexte der Lösung (Java-Sourcen, XML-Files, ect.) und das mitgelieferte Ant-Skript, das die Quellen mit den gängigen Werkzeugen automatisiert übersetzt und im JBoss deployed. Bitte reichen Sie die geforderten Dateien in ein ZIP Archiv gepackt ein.Für Test und Bewertung kommt wieder die Unit-Test-Bibliothek jUnit (www.junit.org) zum Einsatz. Die geforderte Funktionalität wird anhand von 10 Unit-Tests überprüft, von denen min. 5 (sinnvolle) Tests von Ihnen zu erstellen sind. Mit anderen Worten: sowohl die Qualität Ihrer Applikation, als auch die Ihrer Tests ist maßgeblich für die Bewertung. package test.de.hu.informatik.sar; import java.sql.Date; import java.util.Collection; import java.util.Iterator; import java.util.LinkedList; import java.util.Vector; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import junit.framework.TestCase; import junit.framework.TestSuite; import junit.textui.TestRunner; import de.hu.informatik.sar.log.Log; import de.hu.informatik.sar.security.Permission; import de.hu.informatik.sar.security.Role; import de.hu.informatik.sar.user.Address; import de.hu.informatik.sar.user.User; import de.hu.informatik.sar.user.UserManagerRemote; import de.hu.informatik.sar.util.ApplicationException; public class SimpleTest extends TestCase { private javax.naming.Context jndiContext; private UserManagerRemote userMgr; public SimpleTest(String name) { super(name); } protected void setUp() throws NamingException { // Setting up.. jndiContext = getInitialContext(); } protected void tearDown() throws NamingException { userMgr = (UserManagerRemote)jndiContext.lookup("UserManagerBean/remote"); try { userMgr.removeAll(); } catch (Throwable e) { } } public static Context getInitialContext() throws javax.naming.NamingException { return new InitialContext(); } public static void main(String[] args) { //org.apache.log4j.BasicConfigurator.configure(); TestRunner.run(new TestSuite(SimpleTest.class)); } public void test1() throws Exception { userMgr = (UserManagerRemote)jndiContext.lookup("UserManagerBean/remote"); Permission perm1 = userMgr.createPermission(1, "Perm1", Boolean.TRUE, Boolean.FALSE, Boolean.FALSE); Permission perm2 = userMgr.createPermission(2, "Perm2", Boolean.FALSE, Boolean.FALSE, Boolean.FALSE); Collection<Permission> permissions = new Vector<Permission>(); permissions.add(perm1); permissions.add(perm2); userMgr.createRole("myRole", "myDesc", permissions); userMgr.removeRole("myRole"); } public void test3() throws Exception { userMgr = (UserManagerRemote)jndiContext.lookup("UserManagerBean/remote"); Address address = new Address("McDrive 1", "FooBar", "MA", 40815); Date date = new Date(System.currentTimeMillis()); User user = new User("John", "Doe", "none", date, true, address, null); userMgr.createRole("everybody", "myDesc", null); user = userMgr.register(user); userMgr.login("John", "Doe", "none"); userMgr.logout(); userMgr = (UserManagerRemote)jndiContext.lookup("UserManagerBean/remote"); try { userMgr.login("John", "Doe", "password"); fail("Was able to log in with wrong password"); } catch (ApplicationException e) { // pass... } userMgr = (UserManagerRemote)jndiContext.lookup("UserManagerBean/remote"); userMgr.login("John", "Doe", "none"); userMgr.logout(); userMgr = (UserManagerRemote)jndiContext.lookup("UserManagerBean/remote"); try { userMgr.logout(); fail("Was able to log out without beeing logged in"); } catch (ApplicationException e) { } userMgr = (UserManagerRemote)jndiContext.lookup("UserManagerBean/remote"); userMgr.deregister(user); userMgr.removeRole("everybody"); } public void test4() throws Exception { userMgr = (UserManagerRemote)jndiContext.lookup("UserManagerBean/remote"); Address address = new Address("McDrive 1", "FooBar", "MA", 40815); Date date = new Date(System.currentTimeMillis()); User user = new User("John", "Doe", "none", date, true, address, null); userMgr.createRole("everybody", "myDesc", null); user = userMgr.register(user); User user2 = userMgr.getUser(user.getId()); assertNotNull(user2); assertEquals(user.getFirstName(), user2.getFirstName()); assertEquals(user.getLastName(), user2.getLastName()); assertEquals(user.getPassWord(), user2.getPassWord()); assertEquals(user.getId(), user2.getId()); userMgr.login("John", "Doe", "none"); userMgr.logout(); userMgr = (UserManagerRemote)jndiContext.lookup("UserManagerBean/remote"); userMgr.deregister(user); userMgr.removeRole("everybody"); } public void test6() throws Exception { userMgr = (UserManagerRemote)jndiContext.lookup("UserManagerBean/remote"); Address address = new Address("McDrive 1", "FooBar", "MA", 40815); Date date1 = new Date(0); User user1 = new User("John", "Doe", "none", date1, true, address, null); Role role1 = userMgr.createRole("everybody", "myDesc", null); Role role2 = userMgr.createRole("admin", "myDesc", null); user1 = userMgr.register(user1); assertTrue(userMgr.isUserInRole(user1, role1)); assertFalse(userMgr.isUserInRole(user1, role2)); Collection<Role> coll = userMgr.getRoles(user1); Iterator iter = coll.iterator(); while (iter != null && iter.hasNext()) { Role role = (Role) iter.next(); assertTrue("everybody".equals(role.getName())); } userMgr.assignRoleToUser(role2, user1); assertTrue(userMgr.isUserInRole(user1, role1)); assertTrue(userMgr.isUserInRole(user1, role2)); coll = userMgr.getRoles(user1); iter = coll.iterator(); while (iter != null && iter.hasNext()) { Role role = (Role) iter.next(); assertTrue("everybody".equals(role.getName()) || "admin".equals(role.getName())); } userMgr.removeRoleFromUser(role1, user1); assertFalse(userMgr.isUserInRole(user1, role1)); assertTrue(userMgr.isUserInRole(user1, role2)); coll = userMgr.getRoles(user1); iter = coll.iterator(); while (iter != null && iter.hasNext()) { Role role = (Role) iter.next(); assertTrue("admin".equals(role.getName())); } userMgr.deregister(user1); userMgr.removeRole("everybody"); } public void test7() throws Exception { userMgr = (UserManagerRemote)jndiContext.lookup("UserManagerBean/remote"); Address address = new Address("McDrive 1", "FooBar", "MA", 40815); Date date1 = new Date(0); User user1 = new User("John", "Doe", "none", date1, true, address, null); Permission permId1 = userMgr.createPermission(3, "read file", Boolean.TRUE, Boolean.FALSE, Boolean.FALSE); Permission permId2 = userMgr.createPermission(4, "read file", Boolean.TRUE, Boolean.FALSE, Boolean.FALSE); Permission permId3 = userMgr.createPermission(5, "full access", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE); Collection<Permission> collPermIds = new LinkedList<Permission>(); collPermIds.add(permId1); Role roleId1 = userMgr.createRole("everybody", "myDesc", collPermIds); collPermIds = new LinkedList<Permission>(); collPermIds.add(permId2); collPermIds.add(permId3); Role roleId2 = userMgr.createRole("admin", "myDesc", collPermIds); user1 = userMgr.register(user1); Collection<Permission> coll = userMgr.getPermissions(user1); assertEquals(1, coll.size()); Iterator iter = coll.iterator(); while (iter != null && iter.hasNext()) { Permission perm = (Permission) iter.next(); assertEquals("read file", perm.getName()); } userMgr.assignRoleToUser(roleId2, user1); coll = userMgr.getPermissions(user1); assertEquals(3, coll.size()); iter = coll.iterator(); while (iter != null && iter.hasNext()) { Permission perm = (Permission) iter.next(); assertTrue("read file".equals(perm.getName()) || "full access".equals(perm.getName())); } userMgr.deregister(user1); userMgr.removeRole("everybody"); } } Ressourcen |
|