|
|
Ablieferungstermin und erreichbare Punktzahl für diese Aufgabe, sowie Voraussetzungen für die Prüfungszulassung entnehmen Sie bitte http://sar.informatik.hu-berlin.de. Dieses Praktikum stellt den Einstieg in Enterprise JavaBeans dar. Hierbei sollen einfache Konzepte wie Entity- und Session-Beans, Naming geübt werden. Als J2EE-Applikationsserver soll der JBoss in der Version 4.0 (www.jboss.com) zum Einsatz kommen. 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. Hinweise
Teil 2 – Simple Session BeanDer Zugriff auf Entity-Beans sollte nicht direkt erfolgen, stattdessen wird der Zugriff mit Hilfe von Session-Beans realisiert (Session-Facade). Implementieren Sie den CustomerAgent als Session-Bean. Hinweise
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, von denen Ihnen vorab die folgenden 5 zur Verfügung stehen: 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 (ejb-jar.xml, jboss.xml, jbosscmp-jdbc.xml), 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. Hinweise
Ressourcen |
|