|
|
Ablieferungstermin und erreichbare Punktzahl für diese Aufgabe, sowie Voraussetzungen für die Prüfungszulassung entnehmen Sie bitte http://sar.informatik.hu-berlin.de. Im diesem Praktikum soll das schon bekannte Customer-Contact Szenario mit Hilfe von EJB 3.0 umgesetzt werden. Als J2EE-Applikationsserver soll wiederum der JBoss in der Version 4.0 (www.jboss.com) zum Einsatz kommen. Die dafür nötigen Erweiterungen finden Sie unter http://labs.jboss.com/portal/jbossejb3. Teil 1 - Simple Entity BeanGegeben sei folgendes Datenmodell in der Unified Modeling Language (www.uml.org). Dieses soll mit Hilfe von Entity-Beans realisiert werden. Als Datenbanksystem ist die im JBoss integrierte Hypersonic SQL zu verwenden (resistence.xml) Teil 2 – Simple Session BeanDie bekannten Home-Interfaces sind in EJB 3.0 weggefallen. Der Zugriff auf Entity-Beans sollte stattdessen mit Hilfe von Session-Beans realisiert werden. Implementieren Sie den CustomerAgent als stateless Session-Bean. Teil 3 – Test-Client (JUnit)Für Test und Bewertung kommt die Unit-Test-Bibliothek jUnit (www.junit.org) zum Einsatz. Die geforderte Funktionalität wird anhand von 10 Unit-Tests überprüft. Das nachfolgende Listing zeigt 5 Unit-Tests nach der vorangegangenen EJB Spezifikation. Konvertieren Sie diese nach EJB 3.0, sodass sie damit Ihre Lösung testen können. Ergänzen Sie die Unittests um 5 weitere Testfälle. package test.de.hu.informatik.sar; import java.util.Date; import java.util.List; import javax.naming.*; import de.hu.informatik.sar.*; import junit.framework.*; import junit.textui.TestRunner; public class SimpleTest extends TestCase { private CustomerHomeRemote customerHome; private CustomerAgentHomeRemote agentHome; public SimpleTest(String name) { super(name); } protected void setUp() throws NamingException { // Setting up.. Context jndiContext = getInitialContext(); Object obj = jndiContext.lookup("CustomerHomeRemote"); customerHome = (CustomerHomeRemote) javax.rmi.PortableRemoteObject .narrow(obj, CustomerHomeRemote.class); obj = jndiContext.lookup("CustomerAgentHomeRemote"); agentHome = (CustomerAgentHomeRemote) javax.rmi.PortableRemoteObject .narrow(obj, CustomerAgentHomeRemote.class); } protected void tearDown() { //cleanup } public static Context getInitialContext() throws javax.naming.NamingException { return new InitialContext(); } public static void main(String[] args) { TestRunner.runAndWait(new TestSuite(SimpleTest.class)); } public void test1() throws Exception { String firstName = "foo"; String lastName = "bar"; String phoneNum = "0190666"; String eMail = "foo@bar"; ContactDO contact = new ContactDO(phoneNum, eMail); CustomerDO custDO = new CustomerDO(lastName, firstName, new Date(), true, contact); CustomerAgentRemote agent = agentHome.create(); Long primaryKey = new Long(1); agent.createCustomer(primaryKey, custDO); // fetch customer via session bean List custList = agent.listCustomers(); assertTrue(custList.size() == 1); CustomerDO tmp_cust = (CustomerDO)custList.get(0); assertTrue(tmp_cust.getFirstName().equals(firstName)); assertTrue(tmp_cust.getLastName().equals(lastName)); // remove customer to clean up boolean flag = agent.removeCustomer(primaryKey); assertTrue(flag); } public void test2() throws Exception { String firstName = "foo"; String lastName = "bar"; String phoneNum = "0190666"; String eMail = "foo@bar"; // create a customer Long primaryKey = new Long(1); CustomerRemote customer = customerHome.create(primaryKey); CustomerDO custDO = new CustomerDO(lastName, firstName, new Date(), true); customer.setCustomer(custDO); // creating ContactDO data object.. ContactDO contact = new ContactDO(phoneNum, eMail); // set address in customer bean // setting Contact in Customer 1... customer.setContact(contact); // acquiring contact data object from customer 1... contact = customer.getContact(); // customer 1 contact data assertTrue(contact.getPhoneNumber().equals(phoneNum)); assertTrue(contact.getEmail().equals(eMail)); // remove customer to clean up customer.remove(); } public void test3() throws Exception { String firstName = "gab"; String lastName = "knight"; // create a customer Long primaryKey = new Long(1); CustomerRemote customer = customerHome.create(primaryKey); CustomerDO custDO = new CustomerDO(lastName, firstName, new Date(), true); customer.setCustomer(custDO); CustomerAgentRemote agent = agentHome.create(); // fetch customer via session bean List custList = agent.listCustomers(); assertTrue(custList.size() == 1); CustomerDO tmp_cust = (CustomerDO)custList.get(0); assertTrue(tmp_cust.getFirstName().equals(firstName)); assertTrue(tmp_cust.getLastName().equals(lastName)); // remove customer to clean up customer.remove(); custList = agent.listCustomers(); assertTrue(custList.size() == 0); } public void test4() throws Exception { String firstName = "gab"; String lastName = "knight"; String phoneNum = "0190555"; String eMail = "gab@knight"; // create a customer Long primaryKey = new Long(1); CustomerRemote customer = customerHome.create(primaryKey); ContactDO contDO = new ContactDO(phoneNum, eMail); CustomerDO custDO = new CustomerDO(lastName, firstName, new Date(), true, contDO); customer.setCustomer(custDO); CustomerAgentRemote agent = agentHome.create(); // fetch customer via session bean List contactList = agent.listContacts(); assertTrue(contactList.size() == 1); // remove customer to clean up customer.remove(); contactList = agent.listContacts(); assertTrue(contactList.size() == 0); } public void test5() throws Exception { try { Context jndiContext = getInitialContext(); Object obj = jndiContext.lookup("ContactHomeLocal"); ContactHomeLocal contactHome = (ContactHomeLocal) javax.rmi.PortableRemoteObject .narrow(obj, ContactHomeLocal.class); fail("Contact bean has no remote interface"); } catch (Exception e) {} } } Abgabe 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 (persistence.xml), ect.) und ein 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. Ressourcen |
|