DiskStore. EJB client app, log4j config, custom context-root. Óbudai Egyetem, Java Enterprise Edition Műszaki Informatika szak Labor 5

Hasonló dokumentumok
DiskStore #maven. Remote EJB, JNDI, Dependency management, Service client, Context root, InitialContext, MyBatis 3

Hello, EJB! Egy egyszerű példa

Lottery. WebLogic JMS, Jersey, JMX, JNDI. Óbudai Egyetem, Java Enterprise Edition Műszaki Informatika szak Labor 8. Bedők Dávid v0.

Stateless Session Bean

Hello World Servlet. Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra.

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Segédanyag: Java alkalmazások gyakorlat

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Kivételkezelés, naplózás. Exception handling, logging

Segédanyag: Java alkalmazások gyakorlat

BookStore #gradle. Enterprise Application, Git, EJB, EAP/EAS, Logging, PostgreSQL/MySQL, JPA, Integration testing

JNDI - alapok. Java Naming and Directory Interface

Üdvözli Önöket A PGY3 tantárgy! Bakay Árpád dr. NETvisor kft (30) arpad.bakay@netvisor.hu

Java Remote Method Invocation API

A WEB programozása - JSP1 dr.gál Tibor őszi félév

A Java EE 5 plattform

Shopping. JDBC, Datasource, Jasper Report. Óbudai Egyetem, Java Enterprise Edition Műszaki Informatika szak Labor 12. Bedők Dávid v0.

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Adatkezelés. 11. előadás (Entity Beans)

CREATE {DATABASE SCHEMA} [IF NOT EXISTS] db_name [create_specification]

5. rész: A Java EE és az Enterprise Bean réteg. Bakay Árpád dr. NETvisor kft (30)

Bánsághi Anna

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Tartalom. Az EJB 2.1 problémái Az EJB 3 megoldásai

Adatbázisok webalkalmazásokban

BookStore #maven. Enterprise Application, Git, EJB, EAP/EAS, Logging, PostgreSQL/MySQL, JPA, Integration testing

BookStore #maven. Enterprise Application, Git, EJB, EAP/EAS, Logging, PostgreSQL/MySQL, JPA, Integration testing

Hello Gradle. TestNG, Eclipse, IntelliJ IDEA. Óbudai Egyetem, Java Enterprise Edition Műszaki Informatika szak Labor 2. Bedők Dávid v0.

Előszó. Bevezetés. Java objektumok leképzése relációs adatbázisokra OJB-vel Viczián István Viczián István

Oracle Containers for Java - j2ee alkalmazás szerver funkciók. Molnár Balázs Oracle Hungary

Inventory. [gradle maven]\jbossinventory

Enterprise Java Beans. EJB - Általános bevezető

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

MVC Java EE Java EE Kliensek JavaBeanek Java EE komponensek Web-alkalmazások Fejlesztői környezet. Java Web technológiák

Webes alkalmazások fejlesztése 10. előadás. Szolgáltatás alapú rendszerek megvalósítása (ASP.NET WebAPI) Cserép Máté

A Microsoft Visual Studio 2005 fejlesztőkörnyezet

Programozási nyelvek Java

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

org.hibernate.lazyinitializationexception: illegal access to loading collection at

Az emelt szintű. informatika érettségi. programozási feladatainak. megoldása Java nyelven. NetBeans IDE 8.1 környezetben

Osztály szint tagok. Krizsán Zoltán 1 [2012. március 12.] Objektumorientált programozás C# alapokon tananyag

Biztonság java web alkalmazásokban

Java RMI Áttekintés. A Java RMI. A Java RMI architektúrája. Ficsor Lajos. Általános Infromatikai Tanszék Miskolci Egyetem 1.

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Inventory. JNDI variables, CDI, Groovy mix project. Óbudai Egyetem, Java Enterprise Edition Műszaki Informatika szak Labor 13

XML adatkezelés I. Az SAX szabvány. Dr. Kovács László Miskolci Egyetem Általános Informatikai Tanszék. XML adatok kezelési lehetőségei

BookStore 1.0. Enterprise Application, GitExt, Gradle, JBoss, Log4j. Óbudai Egyetem, Java Enterprise Edition Műszaki Informatika szak Labor 2

Java és web programozás

STANDARD DEVELOPMENT U.L. FACTORY SYSTEMS GROUP IT DEPARTMENT

RIA Rich Internet Application

Hello Maven. JSE vs. JEE, JEE vs Spring. Óbudai Egyetem, Java Enterprise Edition Műszaki Informatika szak Labor 2. Bedők Dávid v0.

KROMESCH SÁNDOR APP FELHŐ. API-k és Webszolgáltatások a Cloudban. Magyarországi Web Konferencia November 8.

Java RMI Áttekintés. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. javarmi / 1

Web-fejlesztés NGM_IN002_1

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

OOP: Java 8.Gy: Abstract osztályok, interfészek

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Abstract osztályok és interface-ek. 7-dik gyakorlat

Inventory. JNDI variables, CDI, Groovy mix project. Óbudai Egyetem, Java Enterprise Edition Műszaki Informatika szak Labor 13

4. Gyakorlat: Csoportházirend beállítások

Ja J v a a v a há h l á óz ó a z t a i al a ka k l a maz ma á z s á o s k o Socket, URL

Az új be- és kimenet könyvtár

Programozási technológia

Mobil Informatikai Rendszerek

Overview. Service. Application Activity Activity 2 Activity 3. Fragment. Fragment. Fragment. Frag ment. Fragment. Broadcast Receiver

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

11. Gyakorlat: Certificate Authority (CA), FTP site-ok

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

Objektumorientált programozás C# nyelven

Alap számológép alkalmazás

EGY NAGYBÓL HÚSZ KISEBB

Java Programozás 3. Gy: Java GUI. Swing, AWT

libgdx alapok, első alkalmazás

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

R I Szer e i r alizáció.

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Java. Java Message Service. ANTAL Margit. JMS API technológia. ANTAL Margit. Sapientia - EMTE

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

8. rész: Implementáció JDeveloperben

Segédanyag: Java alkalmazások gyakorlat

Grafikus felhasználói felületek. Abstract Window Toolkit, a java.awt és java.awt.event csomagok

EFER, TELEPÍTÉSI UTASÍTÁS EFER PAYMENT GATEWAY


Java programozási nyelv

ANDROID ALKALMAZÁSFEJLESZTÉS

Objektumorientált programozás C# nyelven III.

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

BME MOGI Gépészeti informatika 4.

Osztályszintű elérés, kivételkezelés, fájlkezelés

SQL Server High Availability. Bevezetés az SQL Server magas rendelkezésre állási megoldásaiba

7. K: JAVA alapok Konzultáció

strings.xml res/values/strings.xml fájlban hozzuk létre a hiányzó string adatforrásainkat A jelenlegi helyett ez álljon: <resources> <string

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

!!" KÉSZÍTK: ERDÉLYI LAJOS KOLLÁR NÁNDOR WD6OGW BUK8Y7

ANDROID ALKALMAZÁSFEJLESZTÉS

Széchenyi István Egyetem

Átírás:

DiskStore EJB client app, log4j config, custom context-root Óbudai Egyetem, Java Enterprise Edition Műszaki Informatika szak Labor 5 Bedők Dávid 2016.01.25. v0.2

Remote vs. Local EJB Call 2

Erőforrások Mi kell ahhoz, hogy egy EJB service-t meghívjunk? Ismernünk kell a service futásának helyét (gép, port) Ismernünk kell a service kiszolgáló specifikus körülményeit (application server, jndi rules,...) Ismernünk kell a meghívandó service aláírását, és rendelkeznünk kell azokkal az osztályokkal, melyek mindehhez szükségesek (paraméterek, visszatérési érték, kivételek) Mindez a csomagolás átszervezését/átgondolását fogja jelenteni! 3

Technikai követelmények JBoss specifikus JEE 6 library használata az alap JEE 6 library helyett (container specifikus viselkedés végett) Korábban a fordításhoz használhattuk a standard JEE 6 library-t, futás közben a container a JBoss specifikusat helyezte el a classpath-on A kliens kód viszont fontos, hogy a specifikussal fusson, hiszen az egy külön JVM-ben lesz a containertől. A Remote hívás során a kommunikációban részt vevő osztályok példányai hálózaton keresztül közlekednek, melyekhez ezek serializálása/deserializálása szükséges. Az érintett osztályokat erre fel kell tudni készíteni (implements Serializable) 4

Lemezbolt Feladat: azonos módon a BookStore -hoz hozzunk létre egy lemezboltot, melyben ID alapján egy lemez, illetve az összes lemez lekérdezhető egy EJB service-en keresztül. Nem kell persistence réteg, adjunk vissza teszt lemez adatokat helyette. Készítsünk egy weblayer-t is, mely egyetlen servlet segítségével teszteli a lokális EJB hívást is (DiskPingServlet). 5

Project struktúra diskstore (root project) ds-client (EJB client alkalmazás) ds-ejbserviceclient (közös erőforrások, Stubok, kivételek, remote interface) ds-ejbservice (EJB service alkalmazás) ds-weblayer (DiskPingServlet, local EJB client) Része az EAR-nak: sárga és zöld project-ek. Része az EJB client classpath-nak: kék és zöld project. 6

EJB Service client project hu.qwaevisz.diskstore.ejbserviceclient DiskFacadeRemote.java hu.qwaevisz.diskstore.ejbserviceclient.domain DiskStub.java hu.qwaevisz.diskstore.ejbserviceclient.exception ServiceException.java 7

EJB Service Client Közös erőforrás build.gradle jar { archivename 'ds-ejbservice-client.jar' dependencies { compile group: 'org.jboss.spec', name: 'jboss-javaee-6.0', version: jbossjee6version JBoss specifikus JEE6 library (jbossjee6version: '3.0.3.Final') 8

Remote interface DiskFacadeRemote.java package hu.qwaevisz.diskstore.ejbserviceclient; import javax.ejb.remote; import hu.qwaevisz.diskstore.ejbserviceclient.domain.diskstub; import hu.qwaevisz.diskstore.ejbserviceclient.exception. ServiceException; @Remote annotáció a különbség a local @Remote interface-hez képest. public interface DiskFacadeRemote { DiskStub getdisk(int diskid) throws ServiceException; 9

Stub DiskStub.java package hu.qwaevisz.diskstore.ejbserviceclient.domain; import java.io.serializable; public class DiskStub implements Serializable { private static final long serialversionuid = -1; private int diskid; private String author; private String title; private double price;... implements Serializable nagyon lényeges! 10

Exception ServiceException.java package hu.qwaevisz.diskstore.ejbserviceclient.exception; public class ServiceException extends Exception { private static final long serialversionuid = -1; public ServiceException(String message) { super(message); public ServiceException(String message, Throwable cause) { super(message, cause); Az Exception alapból implements Serializable, melyet itt ki is használunk. 11

Webproject context root Webalkalmazás context root-jának beállítása: web.xml WAR: WEB-INF/web.xml Ha a webproject önállóan deployment egy alkalmazás serverben/webcontainer-ben application.xml EAR: META-INF/application.xml Ha a webproject egy EAR webmodule-jának részeként deployolódik egy alkalmazás szerverben. Gradle EAR plugin-je a war file nevét adja context-rootnak alapértelmezésben. 12

Custom context-root (EAR plugin) ext {... ear {...... webapplicationname = 'ds-weblayer.war' webapplicationcontextpath = 'diskstore' deploymentdescriptor { webmodule( webapplicationname, webapplicationcontextpath ) root project: build.gradle diskstore lesz az egyéni context-root!... war { archivename webapplicationname weblayer project: build.gradle 13

EJB Client project jar { archivename 'ds-client.jar' build.gradle repositories { flatdir { dirs 'lib' dependencies { compile group: 'org.jboss.spec', name: 'jboss-javaee-6.0', version: jbossjee6version compile project(':ds-ejbserviceclient') compile name: 'jboss-client', ext: 'jar' JBoss client alkalmazáshoz szükséges a JBoss client jar. Ez megtalálható: \jboss-eap-6.4\bin\client\jboss-client.jar Ha saját gépről szeretnénk library-t a project függőségei közé felvenni, akkor egy flatdir repository-t kell defininálni. Ebben is keresni fogja a függőségeket a gradle. A lib könyvtárnak a project gyökerében kell lennie. a jjboss-client.jar log4j appender-t is tartalmaz, így egyszerűen naplózható a kliens oldal 14

Kliens osztály I. package hu.qwaevisz.diskstore.client;... public class DiskClient { InitialContext osztálya DiskClient.java private static final String JBOSS_INITIAL_CONTEXT_FACTORY = " org.jboss. naming.remote.client.initialcontextfactory "; private static final String JBOSS_PROVIDER_URL = " remote://localhost: 4447"; private static final String JBOSS_URL_PKG_PREFIXES = " org.jboss.ejb. host:port client.naming "; JBoss specifikus szabályok private static final String JBOSS_NAMING_CLIENT_EJB_CONTEXT_KEY = " jboss. naming.client.ejb.context "; private static final String JBOSS_NAMING_CLIENT_EJB_CONTEXT_VALUE = "true"; public static void main(string[] args) throws Exception { System.out.println( new DiskClient().invoke(1001)); 15

Kliens osztály II. DiskClient.java private DiskFacadeRemote lookup() throws NamingException { final Hashtable<String, String> jndiproperties = new Hashtable<String, String>(); jndiproperties.put(context.initial_context_factory, JBOSS_INITIAL_CONTEXT_FACTORY); jndiproperties.put(context.provider_url, JBOSS_PROVIDER_URL); jndiproperties.put(context.url_pkg_prefixes, JBOSS_URL_PKG_PREFIXES); jndiproperties.put(jboss_naming_client_ejb_context_key, JBOSS_NAMING_CLIENT_EJB_CONTEXT_VALUE); final Context context = new InitialContext(jndiProperties); return (DiskFacadeRemote) context.lookup( "diskstore/dsejbservice/diskfacadeimpl!hu.qwaevisz.diskstore.ejbserviceclient. DiskFacadeRemote"); EJB Service Global JNDI neve! Deployment során látszik a server.log-ban, illetve management console-ról és JBoss CLIon keresztül is lekérdezhető. 16

Kliens osztály III. private DiskStub invoke(int diskid) { DiskStub disk = null; try { final DiskFacadeRemote facade = this.lookup(); disk = facade.getdisk(diskid); catch (final ServiceException e) { e.printstacktrace(); catch (final NamingException e) { e.printstacktrace(); return disk; DiskClient.java Remote interface-en keresztül meghívjuk az igényelt szolgáltatást (type-safe megoldás). 17

Kliens oldali naplózás log4j.xml elhelyezése a classpath-on pl. src/main/resources Utána gradle eclipse lefuttatása, vagy eclipse-ben az adott könyvtár hozzáadása a source könyvtárak listájához (project properties Java Build Path Source tab) 18

Kliens naplózás konfigurációja log4j.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration debug="true" xmlns:log4j='http://jakarta.apache.org/log4j/'> <appender name=" console" class="org.apache.log4j.consoleappender"> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%d{yyyy-mm-dd HH:mm:ss %-5p %c{1:%l - %m%n" /> </layout> </appender> <root> <level value=" DEBUG" /> <appender-ref ref=" console" /> </root> </log4j:configuration> Definiálunk egy console appendert, mely egy ConsoleAppender, és hozzáadjuk DEBUG szinten a root logger-hez (mely mindig létezik). 19