VSY Praktikum EJB 3 Session Bean In diesem Praktikum werden Sie die Logik in einem Session Bean implementieren und dieses aufrufen. Das bestehende GUI kann wiederverwendet werden. Aufgabe 1 Erstellen und Aufrufen eines Stateless Session Beans Folgende Teile sind zu implementieren 1. Erstellen Sie in einem EJB Module Projekt Student ein Stateless Session Bean names StudentSessionBean 2. Dieses soll das mitgelieferte Interface StudentSessionBeanRemote als Remote Interface implementieren 3. Die Implementation können Sie aus der StudentenFacade Klasse übernehmen. 4. Führen Sie eine DataSource ein über die Sie die Datenbank Verbindung beziehen (siehe Howto Dokument) 5. Die Anbindung kann in der GUI Klassen einfach erfolgen, indem die StudentFacade Klasse durch SessionBeanRemote ersetzt wird. Die Anbindung soll via Lookup erfolgen, die sie z.B. über eine Controller-Klasse durchführen können. Hinweis: der Client (normale Java Applikation) muss sich eine Referenz auf das Session Bean besorgen; dafür muss der Initial Context richtig konfiguriert sein. Folgende Zeilen verbinden mit den Naming Dienst von GlassFish (die notwendigen Klassen befinden sich im gf-client.jar, das sich in Ihrem EJB lib Verzeichnis befindet. import import import import import import ... javax.naming.InitialContext; javax.naming.NamingException; java.util.Properties; javax.naming.Context; javax.naming.InitialContext; javax.rmi.PortableRemoteObject; Properties prop = new Properties(); prop.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory"); prop.setProperty("org.omg.CORBA.ORBInitialHost", "localhost"); prop.setProperty("org.omg.CORBA.ORBInitialPort", "3700"); InitialContext ctx = new InitialContext(prop); StudentSessionBeanRemote helloBean = (StudentSessionBeanRemote) ctx.lookup("myBeans.StudentSessionBeanRemote"); Der Port ist u.U. auf Ihrer Installation unterschiedlich; er wird im Domain.xml definiert. <iiop-listener id="orb-listener-1" port="3700" address="0.0.0.0" lazy-init="true"></iiop-listener> Student und StudentSessionBeanRemote müssen auch im Client/GUI Projekt vorhanden sein. Client GUI Client Stubs und Facade EJB SB Sourcen Session & Entity Bean Aufgabe 2 Datenbankanbinudung In einem zweiten Schritt soll die Datenbankanbindung zuerst über eine DataSource und nachher über EntityBean (i.e. JPA) erfolgen. Hinweis: Im Windows Glassfish 4.1.1 lassen sich der ConnectionPool nicht wie beschrieben konfigurieren; es kann aber einfach im domain.xml das ressources Element mit dem folgenden Abschnitt ergänzt werden. <jdbc-resource pool-name="derby_net_schule_Pool" object-type="systemall" jndi-name="jdbc/mystudentresource"></jdbc-resource> <jdbc-connection-pool fail-all-connections="true" datasourceclassname="org.apache.derby.jdbc.ClientConnectionPoolDataSource40" name="derby_net_schule_Pool" validation-table-name="APP.STUDENT" isconnection-validation-required="true" restype="javax.sql.ConnectionPoolDataSource"> <property name="TraceFileAppend" value="false"></property> <property name="SecurityMechanism" value="3"></property> <property name="User" value="app"></property> <property name="MaxStatements" value="0"></property> <property name="Ssl" value="off"></property> <property name="RetrieveMessageText" value="true"></property> <property name="LoginTimeout" value="0"></property> <property name="ServerName" value="localhost"></property> <property name="TraceLevel" value="-1"></property> <property name="PortNumber" value="1527"></property> <property name="Password" value="app"></property> <property name="DatabaseName" value="schule"></property> </jdbc-connection-pool> Erstellen einer Persistence Unit (für Entity Beans Im Projekt Die Student EntityBean Klasse muss zusätzlich mit folgenden Annotationen versehen werden. @Entity @Table(name = "Student") public class Student implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) private int id; @Column(name = "vorname") private String vorname; … Die Student SessionBean Klasse muss zusätzlich mit folgenden Annotationen versehen werden. import javax.persistence.*; @Stateless public class NewSessionBean implements NewSessionRemote, NewSessionLocal { // falls als EB implementiert @PersistenceContext(unitName = "mystudentPU") private EntityManager em; // falls über DataSource zugegriffen @Resource(mappedName = "jdbc/mystudentresource") public DataSource professorDB; ….