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

Hasonló dokumentumok
Lottery #maven. JMS, Message Driven Bean, JMX, Singleton Session Bean. Óbudai Egyetem, Java Enterprise Edition Műszaki Informatika szak Labor 6

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

Lottery. JMS, Message Driven Bean, JMX, Singleton Session Bean. Óbudai Egyetem, Java Enterprise Edition Műszaki Informatika szak Labor 7

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

Hello, EJB! Egy egyszerű példa

JNDI - alapok. Java Naming and Directory Interface

Stateless Session Bean

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

Enterprise JavaBeans 1.4 platform (EJB 2.0)

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

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

A Java EE 5 plattform

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

Inventory. [gradle maven]\jbossinventory

A MiddleWare rendszerek Rolls Roysa

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

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

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

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

4. rész: Java Enterprise Edition bevezetı. Bakay Árpád dr. NETvisor kft (30)

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

8. rész: Implementáció JDeveloperben

Biztonság java web alkalmazásokban

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

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

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

1. Gyakorlat: Telepítés: Windows Server 2008 R2 Enterprise, Core, Windows 7

webalkalmazások fejlesztése elosztott alapon

Szoftver Tervezési Dokumentáció. Nguyen Thai Binh

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

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

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.

C#, OOP. Osztályok tervezése C#-ban

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

Segédanyag: Java alkalmazások gyakorlat

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é

Adatbázisok webalkalmazásokban

2. gyakorlat: Tartományvezérlő, DNS, tartományba léptetés, ODJ, Core változat konfigurálása, RODC

C# versus Java. Óbudai Egyetem, Java Standard Edition Mérnök Informatikus szak, BSc Labor 3. Bedők Dávid v0.4

Java és web programozás

JavaServer Pages (JSP) (folytatás)

A Microsoft Visual Studio 2005 fejlesztőkörnyezet

JAVA webes alkalmazások

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

ANDROID ALKALMAZÁSFEJLESZTÉS

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

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

Java EE. I. rész: Bevezetés OSUM rendezvény. Nagy Zoltán Arnold. na f t y. hu

S04-2 Elosztott alkalmazások készítése

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

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

Segédanyag: Java alkalmazások gyakorlat

Bevezetés a Seam keretrendszer használatába

A First Businesspost Sender Cockpit használata

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

Újdonságok a Google műhelyéből. Péter Ekler

STANDARD DEVELOPMENT U.L. FACTORY SYSTEMS GROUP IT DEPARTMENT

Adatbányászat és Perszonalizáció architektúra

Adatbázis-kezelés ODBC driverrel

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

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

Feladatok cím szerint

Objektumorientált programozás C# nyelven

10. Gyakorlat: Alkalmazások publikálása Remote Desktop Szervízen keresztül

Access adatbázis elérése OLE DB-n keresztül

MDAC - Microsoft Data Access Components

Osztott rendszerek, Java EE. Általános bevezető

JEE tutorial. Zsíros Levente, 2012

Programozási nyelvek Java

Teszt topológia E1/1 E1/0 SW1 E1/0 E1/0 SW3 SW2. Kuris Ferenc - [HUN] Cisco Blog -

SAMBA. Forrás: Lajber Zoltán: SAMBA alapok dia, SZIE

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

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

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

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

Osztott alkalmazások fejlesztési technológiái Áttekintés

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

Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

OOP és UML Áttekintés

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

Perzisztencia. ANTAL Margit. Sapientia - EMTE. ANTAL Margit Java technológiák 11. előadás Perzisztencia

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

Java Programozás 11. Ea: MVC modell

9. Gyakorlat: Network Load Balancing (NLB)

Hello Java Enterprise Edition

Osztályok. 4. gyakorlat

Hová tűnt a sok kereszthivatkozás?

DCOM Áttekintés. Miskolci Egyetem Általános Informatikai Tanszék. Ficsor Lajos DCOM /1

Web-fejlesztés NGM_IN002_1

EGY NAGYBÓL HÚSZ KISEBB

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?

A Web réteg architektúrája A JSF web alkalmazás keretrendszer. Bakay Árpád dr. NETvisor kft (30)

Webes alkalmazások fejlesztése 12. fejezet. Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

ANDROID ALKALMAZÁSFEJLESZTÉS

Bevezető. Servlet alapgondolatok

Java Remote Method Invocation API

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelés ActiveX vezérlıkkel - 1

Java Business Integration szolgáltatásalapú architektúra JavaEE környezetben. Simon Géza Zsemlye Tamás

Átírás:

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

Feladat A Lottery alkalmazás portolása WebLogic alkalmazás szerverre. Remote JMS client készítése Local JMS client készítése JMX management lehetőségek Nehézségek: bár az implementált osztályok csekély mértékben módosulnak, a környezeti beállítások eltérnek, és természetesen teljesen már library-k (implementációk) vannak használva runtime WebLogicnál (JBoss-szal összehasonlítva). 2

Architektúra (változatlan) 3

RedHat JBoss vs. Oracle WebLogic JBoss 6.4 WebLogic 12.2.1 JEE version JEE6 JEE6 Logging JBoss Logging, Log4J,.. JDK Logging,.. REST WS RESTEasy 2.3.10.Final Jersey 1.18 JPA Provider Hibernate 4.2.18.Final EclipseLink 2.5.2 JMS Provider HornetQ 2.3.25.Final WebLogic JMS JAXB JAXB 2.2.5-redhat-9 JAXB 2.2.10 Oracle 4

JMS Provider beállítása I JMS Server and JMS Module WebLogic Administration Console Services Messaging JMS Servers New name: demojmsserver persistence store: none target: myserver Services Messaging JMS Modules New name: demojmsmodule location in domain: blank target: myserver Would you like to add resources to this JMS system module? yes 5

JMS Provider beállítása II JMS Submodule és JMS Destination (queue) Services Messaging JMS Modules demojmsmodule Subdeployments New name: demojmssubmodule target/server: demojmsserver target: myserver Would you like to add resources to this JMS system module? yes Services Messaging JMS Modules demojmsmodule Configuration New type: Queue name: lotteryqueue JNDI name: jms/queue/lotteryqueue subdeployments: demojmssubmodule 6

JMS Provider beállítása III Connection Factory Services Messaging JMS Modules demojmsmodule Configuration New type: Connection Factory name: democonnectionfactory JNDI name: jms/democonnectionfactory target: myserver 7

Message Driven Bean LotteryListener.java @MessageDriven(name = "LotteryListener", activationconfig = { // @ActivationConfigProperty(propertyName = "connectionfactoryjndiname", propertyvalue = "jms/democonnectionfactory"), @ActivationConfigProperty(propertyName = "initialcontextfactory", propertyvalue = "weblogic.jndi.wlinitialcontextfactory"), @ActivationConfigProperty(propertyName = "destinationtype", propertyvalue = "javax.jms.queue"), @ActivationConfigProperty(propertyName = "destinationjndiname", propertyvalue = "jms/queue/lotteryqueue"), @ActivationConfigProperty(propertyName = "acknowledgemode", propertyvalue = "Auto-acknowledge") }) public class LotteryListener implements MessageListener, MessageDrivenBean {.. } MessageDrivenBean implementálása nem kötelező, de lehetőséget ad az MDB életciklusába való beavatkozásra (setmessagedrivencontext(..) és ejbremove() metódusok által). 8

Message Driven Bean JBoss vs. WebLogic Activation Config Property name JBoss property value WebLogic property value Megjegyzés connectionfactory JndiName jms/democonnec tionfactory Megadása külső JMS Provider esetén érdekes (pl. ActiveMQ-t). Nem kötelező. initialcontextfacto ry org.jboss.naming. remote.client. InitialContextFacto ry weblogic.jndi. WLInitialContextFact ory Nem kötelező destinationtype javax.jms.queue javax.jms.queue Másik lehetséges érték a javax.jms. Topic destinationjndina me jms/queue/lottery queue jms/queue/lotteryq ueue A destinationjndiname és destination közül csak egy egyik szükséges. destination lotteryqueue - WebLogic nem támogatja, JBoss-ban van belső rövid név, de használható a JNDI név is! acknowledgemode Auto-acknowledge Auto-acknowledge WebLogic dokumentáció szerint nem veszi figyelembe. Sok helyen írják nagybetűvel (AUTO_ACKNOWLEDGE). 9

Remote JMS Client SimpleClient.java final Properties environment = new Properties(); environment.put(context.initial_context_factory, "weblogic.jndi. WLInitialContextFactory"); environment.put(context.provider_url, "t3://localhost:7001"); environment.put(context.security_principal, "weblogic"); environment.put(context.security_credentials, "AlmafA1#"); Context context = new InitialContext(environment); final ConnectionFactory connectionfactory = (ConnectionFactory) context. lookup("jms/democonnectionfactory"); final Destination destination = (Destination) context.lookup ("jms/queue/lotteryqueue"); Connection connection = connectionfactory.createconnection("weblogic", "AlmafA1#"); final Session session = connection.createsession(false, Session. AUTO_ACKNOWLEDGE); final MessageProducer producer = session.createproducer(destination); connection.start(); final TextMessage textmessage = session.createtextmessage("1, 2, 3, 4, 5"); producer.send(textmessage); connection.close(); 10

Remote JMS Client JBoss vs. WebLogic JBoss WebLogic PROVIDER URL remote://localhost:4447 t3://localhost:7001 USERNAME jmstestuser weblogic PASSWORD User#70365 AlmafA1# DESTINATION JNDI jms/queue/lotteryqueue jms/queue/lotteryqueue INITIAL CONTEXT FACTORY org.jboss.naming.remote. client.initialcontextfactory weblogic.jndi. WLInitialContextFactory CONNECTION FACTORY JNDI jms/remoteconnectionfactory jms/democonnectionfactory CLASSPATH (Initial Context Factory osztálya) org.jboss.as:jboss-as-jmsclient-bom:7.2.0.final [WL-HOME] \wlserver\server\lib\wlthint3cl ient.jar JBoss esetén külön guest user-t hoztunk létre, míg weblogic-nál az Admin user-t használhatjuk. A Connection Factory-t JBoss esetén a standalone-full.xml-ből előre konfigurálva kaptuk, míg WebLogic esetén mi hoztuk létre Admin console-on. 11

Internal JMS Client InitialContext context = new InitialContext(); QueueConnectionFactory connectionfactory = (QueueConnectionFactory) context. lookup("javax.jms.queueconnectionfactory"); QueueConnection connection = connectionfactory.createqueueconnection(); QueueSession session = connection.createqueuesession(false, Session. AUTO_ACKNOWLEDGE); Queue queue = (Queue) context.lookup(" jms/queue/lotteryqueue"); QueueSender sender = session.createsender(queue); TextMessage textmessage = session.createtextmessage(); connection.start(); textmessage.settext(" 1, 2, 3, 4, 5"); sender.send(textmessage); SendQueueServlet.java sender.close(); session.close(); connection.close(); Üzenetet küldeni container-en belül mindig egyszerűbb, lévén InitialContext-et konfiguráció nélkül egyszerűen elkérhetjük (hiszen már inicializálva van), illetve nem csak remote connection factory-kat érünk el, hanem a szabvány által definiált JNDI néven regisztrált specifikusabbakat is (pl. a példában ilyen a QueueConnectionFactory). 12

Java Management Extensions WebLogic Hasonlóan a JBoss esetén már bemutatott példához, JMX segítségével szeretnénk beállítani az aktuális sorsoló személy nevét, a nyereményalapot és a nyeremény eloszlását meghatározó szabály-vektort. A lényeg természetesen a példa szempontjából a monitorozás és a beavatkozás bemutatása. 13

Managed Bean készítése kezdő lépések LotteryMonitor.java public class LotteryMonitor extends StandardMBean implements LotteryMonitorMBean, MBeanRegistration { public LotteryMonitor() { super(lotterymonitormbean. class, false); } Fontos! Az ős (StandardMBean ) ctor-a az MBean interface osztályát várja! Az üzleti igények, és ezáltal a LotteryMonitorMBean interface megegyezik a JBossos példában bemutatottal. @Override public ObjectName preregister(mbeanserver server, ObjectName name) throws Exception { return name; } } @Override public void postregister(boolean registrationdone) {} @Override public void prederegister() throws Exception {} @Override public void postderegister() {} A MBeanRegistration interface használata lehetővé teszi az életciklusba való beavatkozást. 14

MBean regisztrációja JBoss esetén az MBean-t az EJB module jbossservice.xml leíró segítségével regisztráltuk. WebLogic esetén programozottan kell a regisztrációt elvégezni, és e programozott részt szükséges az EAR weblogic-application. xml leíró segítségével láthatóvá tenni. 15

Managed Bean regisztrációja programozott megoldás ApplicationMBeanLifeCycleListener.java package hu.qwaevisz.lottery.ejbservice.management; public class ApplicationMBeanLifeCycleListener extends ApplicationLifecycleListener { private static final String MBEAN_SERVER_JNDI = "java:comp/jmx/runtime"; private static final String OBJECT_PACKAGE = "hu.qwaevisz.lottery.ejbservice. management"; @Override public void poststart(applicationlifecycleevent e) throws ApplicationException { InitialContext context = new InitialContext(); MBeanServer mbeanserver = MBeanServer. class.cast( context.lookup (MBEAN_SERVER_JNDI) ); LotteryMonitor mbean = new LotteryMonitor(); JBoss esetén az ObjectName a ObjectName oname = this.buildobjectname(); jboss-service.xml-ben volt definiálva. mbeanserver.registermbean(mbean, oname); } private ObjectName buildobjectname() throws MalformedObjectNameException { return new ObjectName(OBJECT_PACKAGE + ":type="+lotterymonitor. class. getsimplename()+",name="+lotterymonitor. class.getsimplename()); } Az ApplicationLifecycleListener osztály miatt a[wl-home] \wlserver\server\lib\wls-api.jar-t el kell helyezni a ClassPath-on! @Override public void prestop(applicationlifecycleevent e) throws ApplicationException {} } 16

Listener leírója weblogic-application.xml weblogic-application.xml <?xml version="1.0" encoding="utf-8"?> <weblogic-application xmlns="http://xmlns.oracle. com/weblogic/weblogic-application"> <listener> <listener-class>hu.qwaevisz.lottery.ejbservice.management. ApplicationMBeanLifeCycleListener</listener-class> </listener> </weblogic-application> A weblogic-application.xml az EAR application.xml-jének conatiner specifikus párja. Ennek megfelelően az EAR META-INF könyvtárába kell elhelyezni. Ennek legegyszerűbb módja, ha a root Gradle project (EAR plugin) src/main/application könyvtárában elhelyezzük! 17

jconsole Hasonlóan a JBoss-hoz, a WebLogic esetén is szükséges a jconsole classpath-ához container specifikus JAR-ok hozzáadása. > jconsole -J-Djava.class.path=%JAVA_HOME%\lib\jconsole.jar;%JAVA_HOME% \lib\tools.jar;%mw_home%\wlserver\server\lib\wljmxclient.jar;%mw_home% \wlserver\server\lib\wlclient.jar -J-Djmx.remote.protocol.provider. pkgs=weblogic.management.remote -debug A ClassPath beállításának egyszerű módja, ha lefuttatjuk a setdomainenv.[sh cmd] parancsot, majd ezt követően (azonos terminalban/command ablakban) a jconsole-t elindítjuk. > [WL-HOME]/user_projects/domains/mydomain/bin/setDomainEnv.[sh cmd] > jconsole 18

EJB elérése MBean osztályból JBoss esetén ennek semmilyen akadálya nincsen, egyszerűen az @EJB annotáció segítségével inject-áljuk a megfelelő EJB-t, és már használhatjuk is. Az MBean azonosan EJB managed elem lesz (csak managed elemek esetén használható az injectálás ). Ott, ahol ez nem érhető el, JNDI fából kell kikérnünk az EJB-t, hasonlóan mint ahogy egy remote EJB kliensből tennénk, azonban természetesen az Initial Context-et a helyi container már inicializálta számunkra. WebLogic esetén ez utóbbit alkalmazzuk, az @EJB annotáció ott nem működik egy MBean esetén. 19

Managed Bean regisztrációja programozott megoldás LotteryMonitor.java public class LotteryMonitor extends StandardMBean implements LotteryMonitorMBean, MBeanRegistration { private static final String LOTTERY_STATE_HOLDER_JNDI = " java:global.lottery- 1.0.lot-ejbservice.lotteryState"; Honnan tudjuk hogy a private LotteryStateHolder getstateholder() { LotteryStateHolder Singleton LotteryStateHolder holder = null; EJB-nek mi a pontos JNDI neve? try { InitialContext context = new InitialContext(); holder = LotteryStateHolder. class.cast( context.lookup (LOTTERY_STATE_HOLDER_JNDI) ); } catch (NamingException e) { LOGGER.log(Level.SEVERE, e.getmessage(), e); } return holder; } @Override public String getpuller() { LotteryStateHolder holder = this.getstateholder() return holder!= null? holder.getcurrentpuller() : ""; } } 20

WebLogic JNDI Tree WebLogic Administration Console Environment Server Configuration General tab VIEW JNDI Tree link! Deploy-olt alkalmazások EJB-inek elérése (a JNDI fa felépítése container specifikus, bár a JEE szabvány megpróbálta már szabványosítani): java:global lottery-1.0 (deployolt EAR neve (a pont miatt a browser ketté szedi)) lot-ejbservice (az EJB module neve az EAR-on belül) lotterystate (az EJB name attribútuma (def: impl. osztály neve)) Overview tab Binding Name tulajdonság értéke @Singleton(mappedName = "ejb/lotterystate", name = "lotterystate") public class LotteryStateHolderImpl implements LotteryStateHolder {} 21

Java Management Extensions JBoss vs. WebLogic MBean interface MBean implementáció MBean regisztráció jconsole futtatása JBoss Java interface az MBean készítés szabályai szerint*. EJB managed EJB module META-INF-jében elhelyezett jboss-service.xml segíségével. [JBOSS HOME]/bin/jconsole. [bat sh] WebLogic Java interface az MBean készítés szabályai szerint*. Not EJB managed (JNDI lookup szükséges) EAR csomag META-INF-jében elhelyezett weblogic-application.xml segítségével egy leszármaztatott ApplicationLifecycleListener regisztrációja. [WL-HOME] /user_projects/domains/mydomain/bin/set DomainEnv.[sh cmd] jconsole *: https://docs.oracle.com/javase/tutorial/jmx/mbeans/standard.html 22