| ||||||||||||||
|
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 |
| ||||