Komponenten und Behälter 3

Werbung
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;
….
Herunterladen