Download mCube - Eldorado
Transcript
90 KAPITEL 11. IMPLEMENTIERUNG men aller Gruppen gespeichert. Nur mit den hier registrierten Gruppen kann operiert werden. Das zweite EntityBean GroupUsers repräsentiert die Tabelle GroupUsers. Als Attribute beinhaltet sie den Gruppen- und Usernamen. Zusammen ergeben sie den Primary Key. Ein Datensatz speichert also die Zugehörigkeit eines Users zu einer Gruppe. Damit die Datenintegrität gesichert ist, handelt es sich bei dem Gruppennamen um einen Fremdschlüssel von der Tabelle Groups. Somit können User nur zu Gruppen zugeordnet werden, die wirklich existieren. Hier folgt nun eine detaillierte Beschreibung der Funktionalität: Um eine neue Gruppe anzulegen, ruft man die Methode createGroup(Gruppennamen) auf. Falls der Gruppenname schon existiert, wird eine DuplicateGroupException geworfen. Andernfalls kann man nun dieser Gruppe User zuordnen. Wenn eine Gruppe nicht mehr benötigt wird, sollte diese mithilfe der Methode deleteGroup gelöscht werden. Hierbei werden auch alle Zuordnungen der User zu dieser Gruppe gelöscht. Dank der Fremdschlüsselvererbung in der Datenbank und Einschalten der Funktion Cascade Delete wird dies automatisch von der Datenbank übernommen. Neben der Integrität der Daten birgt dieses Vorgehen außerdem einen Performanz Vorteil, da die entsprechenden Datensätze nicht auf der Entity Bean Ebene gelöscht werden. Einen User fügt man mit der Methode addUserToGroup(group, user) hinzu. Die Methode erzeugt dazu ein neues GroupUsers EntityBean mit der Gruppe und dem User. Mit deleteUserFromGroup(group, user) kann ein User wieder aus der Gruppe entfernt werden. Das entsprechende GroupUsers EntityBean wird gelöscht. Mit getUsersFromGroup(group) erhält man eine Liste mit allen Usernamen, die der Gruppe angehören. Um diese Funktion zu realisieren, wurde eine spezielle FindByMethode mithilfe der in der EJB Spezifikation 2.0 definierten Query Language geschrieben, die alle Datensätze in der Tabelle GroupUsers findet, in denen der Gruppenname vorkommt. Wenn man eine Liste mit allen Gruppen, denen ein User angehört, haben möchte, so muss man die Methode getGroupsFromUser(user) aufrufen. Diese Methode arbeitet ähnlich wie getUsersFromGroup, nur dass hier eine andere FindByMethode benutzt wird, die nach Datensätze mit dem Usernamen sucht. Die Methode isMemberOfGroup(group, user) gibt an, ob ein User Mitglied einer Gruppe ist oder nicht. Zum Exceptionhandling der Komponente ist noch Folgendes zu sagen: Falls einer Methode als Parameter null statt einem Namen übergeben wird, so wird eine ParameterIsNullException geworfen. Außerdem überprüft jede Methode, ob wirklich eine Gruppe mit dem übergebenem Namen existiert. Falls nicht, wird eine GroupNotFoundException geworfen. Damit ist sichergestellt, dass man einen User nicht einer Gruppe zuordnen kann, die überhaupt nicht existiert. Dieses Vorgehen ist notwendig, um die Datenintegrität zu gewährleisten. Entsprechend der Vorgehensweise im Usermanagement wurde gleichermaßen das Logging integriert. 11.2.3 Probleme Bei der Implementierung dieser Komponente traten keine nennenswerten Probleme auf. Da diese Komponente ganz unten auf der core-Schicht angesiedelt ist, ist sie von keiner anderen Komponente abhängig.