HUMBOLDT-UNIVERSITÄT ZU BERLIN
COMPUTER SCIENCE DEPARTMENT
Systems Architecture Group

Head: Prof. Dr. Jens-Peter Redlich
Secretary:  Silvia Schoch
Phone: +49(30)2093-41150

 

     

Lab

5

Middleware Platforms

Simple EJB 3.0


Systems Architecture Group

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 Bean

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

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

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


Legal disclaimer. .  © 2024 Humboldt-Universität zu Berlin, Computer Science Department, Systems Architecture Group. Contact: sar@informatik.hu-berlin.de .