HTML

Programozó Páternoszter

Ez a Programozó Páternoszter (PP) blogja, a programozásról szól. Aktualitása, hogy a Debreceni Egyetem Informatikai Kara Magasszintű programozási nyelvek 1-2, C++ esattanulmányok, Java esettanulmányok című kurzusainak blogja is egyben.

A vadászat

A Debreceni Egyetem Programozói Évkönyve: az UDPROG projekt. A szakmai fórumunk a Facebook-en. Az új előadások a prezin.
A régi előadások:
Prog1:
1. C bevezetés
2. C tárgyalás
3. C befejezés
4. C a gyakorlatban
5. C++ bevezetés
6. C++ tárgyalás
7. C++ befejezés
8. C++ a gyakorlatban
9. Java platform bevezetés
10. Kvantuminformatikai alg. bev.
Prog2:
1. Java bevezetés
2. Java tárgyalás
3. Java befejezés
4. Java a gyakorlatban
5. Software Engineering bev.
6. Java EE bevezetés
7. AspectJ bevezetés
8. BPMN-BPEL SOA programozás
9. C++ haladó
10. Tensorflow

Kövess engem!

Friss topikok

Linkblog

Drupalosok, joomlasok erre csorogatják a nyálukat

2011.04.29. 10:24 nb

Remélem a címmel nem váltom ki a népharagot, de a nevezett közösségek nem tudják úgy összehúzgálni a portáljukat, mint a Javások. Ebben a posztban ezt a lehetőséget villantjuk fel a WebSynergy-OpenPortal-Web Space Server nyomon járva. (Kellemeset a hasznossal:  s egyben segítséget adunk a gazdaság informatikusok Adatkezelés példájához, illetve a mérnök informatikusok is kaphatnak prog1-ből három trófeát ezért a "saját XSD alapú validáló, XSLT-s html transzformáló portlet reprója labormérésért").

 PHP - barbár technológia

"Mindig van pár hallgató, aki tegnapra, tizedáron, doksi nélkül összedobja a garázsban"  - bírom a LAMP-ot, kis PHP a PP-be is bekerült, de az elmúlt 10 évben kialakult, az a feltlételes verbális reflexem, hogy ha kimondom, hogy PHP, utána azonna jön a "barbarian tecnology" sztring...

Lássuk az "ős"-technológiát (*)

A Web Space Server-t fogjuk használni. Ez a korábban még a Sun-nál WebSynergy kódnéven futó Java EE portálmegoldás a szoftver törzsfejlődés korai szakaszában Sun Java System Portal Server néven futott. Oprendszerfüggetlenül MySQL, GlassFish és Liferay kombinációt takar ma.

Ez miért nem barbár? Nézzük például a logikailag most következő lépést, a telepítést és kapcsolódóan a hordozhatóságot, krémként a skálázhatóságot. Webes rendszereknél, legyen az akár egy integrált könyvtári rendszer vagy egy vállalati intranet, tipkusak a következő lépések:

  • rendszergazdai közbenjárással adatbázis telepítés és előkészítés (mondjuk pg_hba.conf-ban, hogy hogy érjük el stb. hasonlóak)
  • adatbázis felépítése (pl. mindenféle kapott szkriptek futtatása...)
  • megintcsak rendszergazdai közbenjárással szerveroldali komponensek telepítése (pl. összehangolás az Apache-al...)

Mi a helyzet nálunk: lerántom a szoftvert, kicsomagolom és indítom az alkalmazésszervert (ez most csúnya lesz, mert a példában a GlassFish2-s verziót toljuk, így lesz egy telepítéses sor is...)

unzip webspace-10.1-gfv2-linux.zip
cd webspace-gfv2-linux/glassfish2/
ant -f setup.xml
cd bin/
./asadmin start-domain
Jöhet is a böngésző: http://localhost:8080/ kis kattintgatás és a szó szoros értelmében (NO PROGRAMMING mellett) összehúzogatok egy olyan portált, amibe most például belehúzogattam Google Maps-t, valuta átváltót, tőzsdei figyelőt, RSS hírolvasót, portál nyelve váltó (portletet) stb. több száz ilyen közül lehet válogatni, s ebben a posztban nyilván mi is írunk egy saját portletet, nem is akármilyet: tudjon DocBook XML 5.0 doksit validálni és XSLT-vel tudja átkonvertálni HTML-be, ami konverziót aztán dobjon is ki a "webre"!

Visszatérve még a nem barbársághoz: csak egy mezei júzer accountra volt szükségem, a portál könyvtárát akár betömöríthetem, áttehetem egy Windows-os laptopra, ott elindítom, szerkesztgetem és azt megint betömörítve visszaviszem az eredeti gépre és egy az egyben a könyvtár cseréjével beizzítom a portál új, a laptopon készített aktuális változatát... üdvözöllek a 21. században...

Fejlesztőként pedig az az élmény, hogy fejlesztgetem a NetBeans-ben (Java a téma és nem Android, így nyilván fel sem merül az Eclipse elindítása...) szóval programozgatsz a NetBeans-ben és a futó portálra deployolod fel automatikusan a progid... nem utolsó szempont hallgatóinknak sem, hogy Java EE tapasztalatokat szerezhetnek és akkor még nem is klaszteren nyomjuk...

*: Csillagkapu terminológia.

A saját portletért katt a továbbra!

Mivel a példát pár évig használhatjuk majd a bevezető oktatásban, így a most aktuális cuccokkal készítjük el, így a hozzávalók:

  • NetBeans 7, a Portal Pack plugin telepítéshez kell Ruby, az ebből a verzióból kikerült, külön tedd fel.
  • Portal Pack 3.0.4, letölteni, úgy telepíteni plaginként:
  • Saxon, kell egy XSLT implementáció, de ez már csak amiatt, hogy a mi portletünk le tudja nyomni a transzfót.
  • Azt felteszem, hogy a GlassFish 2 vagy 3 már beizzításra került a poszt elején felbuzdulva.

 Pár lépésben létrehozzuk a projektet:

 Megadjuk a projekt nevét, ilyen néven jön majd létre könyvtár a NetBeansProjects-ben:

 Először nem lesz ott, így hozzáadjuk (Add) a futó portálunkat:

A "Java EE" szabvány jelszó az "adminadmin"

 A GlassFish Home a futó Web Space szerverünk glassfish könyvtára legyen!

 Portletet akarunk:

 OK., nincs más hátra, mint a lényegi rész: a saját portlet beprogramozása. Most királyi utad lesz, mert adom a Java és a JSP forrást is. Előbbi egy DocBook6.java mutáns, utóbbi egyszerűen bekéri a DocBook 5.0 forrás URL címét:

Db2Html_view.jsp

 1 <%@page contentType="text/html"%>
 2 <%@page pageEncoding="UTF-8"%>
 3 
 4 <%@ page import="javax.portlet.*"%>
 5 <%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%>
 6 
 7 <portlet:defineObjects />
 8 <%PortletPreferences prefs = renderRequest.getPreferences();%>
 9 
10 <%= prefs.getValue("docbook2HTML", "Add a bemenő fájlt!") %>
11 <br>
12 A DocBook XML 5.0 forrásfájl:
13 <form method="post" action="<portlet:actionURL/>">
14     <input type="text" name="docbookFileURL"/>
15     <input type="submit"/>
16 </form>

 

Db2Html.java

  1 public class Db2Html extends javax.portlet.GenericPortlet {
  2 
  3     public void processAction(javax.portlet.ActionRequest request, javax.portlet.ActionResponse response) throws javax.portlet.PortletException, java.io.IOException {
  4         javax.portlet.PortletPreferences prefs = request.getPreferences();
  5 
  6         String docbookFileURL = request.getParameter("docbookFileURL");
  7         System.out.println(docbookFileURL);
  8 
  9         /* A Validation API-val dolgozunk. Melyik sémanyelvet akarjuk
 10         használni, most a W3C XML sémát, de ez lehetne például a RELAX NG
 11         is. */
 12         javax.xml.validation.SchemaFactory schemaFactory =
 13                 javax.xml.validation.SchemaFactory.newInstance(
 14                 javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
 15         javax.xml.validation.Schema schema = null;
 16         try {
 17             /* Hol van a DocBook 5 e séma szerinti megadása? */
 18             schema = schemaFactory.newSchema(
 19                     new java.net.URL(
 20                     "http://www.docbook.org/xml/5.0/xsd/docbook.xsd"));
 21         } catch (java.net.MalformedURLException muE) {
 22             muE.printStackTrace();
 23         } catch (org.xml.sax.SAXException saxE) {
 24             saxE.printStackTrace();
 25         }
 26         javax.xml.validation.Validator validator =
 27                 schema.newValidator();
 28         validator.setErrorHandler(new Hibakezelo());
 29         javax.xml.transform.Source source =
 30                 new javax.xml.transform.stream.StreamSource(docbookFileURL);
 31         /* Önálló kísérletezéshez az iménti sort bekommentezve, ezt meg
 32         kikommentezve a fájlrendszerben lévő xml-el dolgozhatsz: */
 33         //"file:\\c:\\Documents and Settings\\Bátfai Norbert\\
 34         //                    Dokumentumok\\Letöltések\\ppmkonyv.xml");
 35         // (a fájlnév sora persze ne törjön el)
 36         try {
 37             validator.validate(source);
 38             System.out.println("Érvényes.");
 39 
 40             javax.xml.transform.TransformerFactory transformerFactory =
 41                     javax.xml.transform.TransformerFactory.newInstance();
 42             javax.xml.transform.Transformer transformer =
 43                     transformerFactory.newTransformer(
 44                     new javax.xml.transform.stream.StreamSource(
 45                     "http://docbook.sourceforge.net/release/xsl-ns/current/html/docbook.xsl"));
 46 
 47             java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
 48             transformer.transform(source,
 49                     new javax.xml.transform.stream.StreamResult(baos));
 50 
 51             prefs.setValue("docbook2HTML", baos.toString());
 52 
 53         } catch (javax.xml.transform.TransformerConfigurationException tcE) {
 54             tcE.printStackTrace();
 55         } catch (javax.xml.transform.TransformerException tE) {
 56             tE.printStackTrace();
 57         } catch (org.xml.sax.SAXException saxE) {
 58             /* Ha valami komolyabb hiba lenne az elemzés során, itt
 59             is visszahnozzuk. */
 60             System.out.println("Nem jól-formázott vagy nem érvényes.");
 61             //saxE.getMessage();
 62 
 63             prefs.setValue("docbook2HTML", saxE.getMessage());
 64 
 65 
 66         } catch (java.io.IOException ioE) {
 67             ioE.printStackTrace();
 68         }
 69 
 70         prefs.store();
 71 
 72 
 73     }
 74 
 75     public void doView(javax.portlet.RenderRequest request, javax.portlet.RenderResponse response)
 76             throws javax.portlet.PortletException, java.io.IOException {
 77         response.setContentType("text/html");
 78         javax.portlet.PortletRequestDispatcher dispatcher =
 79                 getPortletContext().getRequestDispatcher("/WEB-INF/jsp/Db2Html_view.jsp");
 80         dispatcher.include(request, response);
 81     }
 82 
 83     public void doEdit(javax.portlet.RenderRequest request, javax.portlet.RenderResponse response)
 84             throws javax.portlet.PortletException, java.io.IOException {
 85         response.setContentType("text/html");
 86         javax.portlet.PortletRequestDispatcher dispatcher =
 87                 getPortletContext().getRequestDispatcher("/WEB-INF/jsp/Db2Html_edit.jsp");
 88         dispatcher.include(request, response);
 89     }
 90 
 91     public void doHelp(javax.portlet.RenderRequest request, javax.portlet.RenderResponse response)
 92             throws javax.portlet.PortletException, java.io.IOException {
 93 
 94         response.setContentType("text/html");
 95         javax.portlet.PortletRequestDispatcher dispatcher =
 96                 getPortletContext().getRequestDispatcher("/WEB-INF/jsp/Db2Html_help.jsp");
 97         dispatcher.include(request, response);
 98     }
 99 }
100 
101 class Hibakezelo extends org.xml.sax.helpers.DefaultHandler {
102 
103     public void fatalError(org.xml.sax.SAXParseException e)
104             throws org.xml.sax.SAXException {
105         System.out.println("Hibakezelő> Fatal error, nem jól formázott, a hiba:");
106         System.out.println(e.getMessage());
107     }
108 
109     public void error(org.xml.sax.SAXParseException e)
110             throws org.xml.sax.SAXException {
111         System.out.println("Hibakezelő> Error, nem érvényes, a hiba:");
112         System.out.println(e.getMessage());
113         /* Ha nem dobnánk, akkor az elemzés try blokkjában
114         szépen mehetne tovább a futás, mert ettől még bányászhatnánk
115         ki infókat az xml fájlból.*/
116         throw new org.xml.sax.SAXException(e.getMessage());
117     }
118 }

 

Fenti források lecserélése után (a Libraries alatt a Saxon jart nem elfelejtve beállítani) jöhet az F6, majd a User_Portlets alatt megjelenő új portletünket ráhúzzuk valahová a portálunkra:

 mondjuk a Google Maps mellé (a Guest publikus lapjára)

Beadjuk a http://www.inf.unideb.hu/~nbatfai/ppmkonyv.xml forrást (kis idő kell a validáláshoz és a transzformációhoz, mert az xsd-t és a stílusfájlokat is a webről rántja le, immár a portlet)


Karakterkódoláson még lehetne finomítani, de a példa kész!

PS.: itt egy futó (régi, még) WS CB11 portál.

1 komment

Címkék: drupal ruby joomla java ee netbeans portlet xslt saxon docbook openportal websynergy web space server

A bejegyzés trackback címe:

https://progpater.blog.hu/api/trackback/id/tr322864139

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

cuppa 2011.05.01. 20:18:01

Gratulálok, hogy a PHP-t doksi nélkül író emberek fikázása után idehánytál egy dokumentálatlan, befejezetlen kódot. Ráadásul zseniálisan kevered a magyar-angol kódszavakat.

Ha így kell kinéznie a kódnak, akkor én kérek elnézést, de inkább nem használom ezt a technológiát.
süti beállítások módosítása