venerdì 25 maggio 2018

Evento Gratuito in Oracle a Roma e Milano


Java 10 & Novità : Moduli, performances, docker awareness



Java sta cambiando rapidamente ed in pochi mesi siamo passati dalla versione 8 alla 10 ed a settembre uscirà la 11. Cerchiamo di capire insieme, con poche slide e tanti esempi dal vivo, quale sia la direzione e quali siano le novità introdotte. In particolare vedremo come creare un "microservizio" in Java sfruttando il suo modulo nativo jdk.httpserver, come ottimizzarlo e renderlo modulare ed autoconsistente , come renderlo performante sia nei tempi di avvio che nell'occupazione e consumo di risorse e come inserirlo in un container docker regolando e limitando il consumo delle risorse di CPU e Ram ad esso dedicate.

Verrà consegnata una immagine virtuale per VirtualBox, un ova da 2.6Gb. Altrimenti potete portare un portatile con installati Docker e Java 10.

Evento Gratuito in Oracle:

  • Roma: 19 Giungno 2018 ore 09:00 [Posti Esauriti]






giovedì 19 aprile 2018

Java UDP & Drone Tello

Oggi ho comprato da www.dronisport.it il drone Tello di cui trovate maggiori dettagli qua:
https://www.ryzerobotics.com/tello

Il drone ha un piccolo sdk che si traduce in questo piccolo pdf :
https://dl-cdn.ryzerobotics.com/downloads/tello/0228/Tello+SDK+Readme.pdf
in questo pdf vengono descritti i comandi che si possono passare via UDP e che potete scrivere nel codice che ho allegato.

Su internet poi si trova un esempio in Python di come comunicare via UDP:
https://github.com/microlinux/tello/blob/master/tello.py

Io mi sono divertito a scrivere, per primo, il codice (vedi sotto) minimo necessario per mandare via java gli stessi comandi ... è un esempio e quindi è ovvio che può e deve essere migliorato ... io infatti già sto oltre ... :)

Ecco un video esplicativo di cosa ho fatto:


Ecco il codice:


Dovete solo aggiungere nel file host l'indirizzo del Tello, ad esempio io nel mio pc dove ho windows ho scritto nel file :
c:\Windows\System32\drivers\etc\hosts

 # localhost name resolution is handled within DNS itself.
127.0.0.1       localhost
192.168.10.1      tello

Buon divertimento e ciao ...

mercoledì 18 aprile 2018

Demo Oracle IoT @ Codemotion Roma 2018

Ecco il video della Demo che abbiamo presentato al Codemotion di Roma del 2018, [qui] trovate anche il video "istituzionale"




Architettura sul Cloud di Oracle


martedì 28 febbraio 2017

Codemotion Roma 2017 - 24/25 Marzo - Presente !!!

Anche per questa edizione sarò presente insieme al mitico Gabba, venite a trovarci allo stand di Oracle e venite ad ascoltarci il 25 marzo alle 12:30. Vi aspettiamo.   :)


You and your containers: strumenti di automazione in Cloud


12:30/13:10


L'intervento si propone di illustrare l'utilizzo di strumenti di automazione per ambienti basati su Container adatti ad un approccio DevOps, dallo sviluppo alla produzione. Saranno forniti dettagli ed esempi pratici su Container in Cloud per visualizzare, configurare ed orchestrare i propri stack tecnologici su di una infrastruttura Docker erogata come servizio.

Language: Italian
Level: Intermediate


venerdì 28 ottobre 2016

Codemotion Milano 2016: Parlerò di "DevOps in Cloud, dai Container all’approccio Codeless"




Io e il mitico Gabriele Provinciali saremo presenti al Codemotion Milano 2016, il 26 Novembre alle 12.30

DevOps in Cloud, dai Container all’approccio Codeless. [12:30/13:10]
Un approccio moderno allo sviluppo software dovrebbe sfruttare linguaggi ed ambienti appartenenti a diverse tipologie di innovazione: DevOps per automatizzare continuous integration e continuous delivery, il Cloud per gestire il ciclo di vita del software in qualsiasi momento, i Software Containers per raggiungere livelli di scalabilità adeguati alle dimensioni dell’audience e un approccio Codeless per confezionare applicazioni e cruscotti ad uso dell’utenza business. Il talk sarà articolato intorno a queste quattro aree mostrando principalmente esempi pratici.


lunedì 24 ottobre 2016

WebLogic Cluster & Load Balancer: Example with WebLogic Plug-In on Apache HTTP Server


I have used on Windows 10 x64 :
I assume that you have already Installed and Configured a Cluster (Traditional or Dynamic) on WLS.

In my examples I have created a Dynamic Cluster with 2 Managed Server (Maximum of 8) and the 2 Active Managed Server are:
FabryManaged-1: fmarini-it.it.oracle.com:7101
FabryManaged-2: fmarini-it.it.oracle.com:7102

It is recommended to enable the WLS settings "WebLogic Plugin Enabled":
http://www.ateam-oracle.com/wls-plugin-enabled/

Install now Apache Http Server:
it is very simple, on windows you must only unzip the file.

Now unzip the content of the file WLSPlugin12.2.1.1.0-Apache2.2-Apache2.4-Win64-12.2.1.1.0.zip inside a folder.

I have installed Apache in  d:\Apache24 and I have unzipped the plugin in the folder d:\Apache24\WLS-PLUGIN\


This is the content extracted from WLSPlugin12.2.1.1.0-Apache2.2-Apache2.4-Win64-12.2.1.1.0.zip:


I have created a startApache.cmd file where I have added d:\Apache24\WLS-PLUGIN\lib\ to the PATH envinroment variable:



Now we must modify the httpd.conf that is in the folder: d:\Apache24\conf:
- We must add the WebLogic plugin
- We must add the information of the WebLogic Cluster:

LoadModule weblogic_module d:\Apache24\WLS-PLUGIN\lib\mod_wl_24.so  
 <IfModule weblogic_module>  
   <Location />  
    SetHandler    weblogic-handler  
    WebLogicCluster fmarini-it.it.oracle.com:7101,fmarini-it.it.oracle.com:7102  
   </Location>  
 </IfModule>  


Now start everything, WebLogic Admin, your Cluster and Apache, deploy something on the cluster and test it, in my example I have deployed MyApp.war on a Dynamic cluster that is composed by 2 managed server (and 8 as max), and I can test MyApp pointing directly to each one of the Managed Server:

http://fmarini-it.it.oracle.com:7101/MyApp
http://fmarini-it.it.oracle.com:7102/MyApp

To test if the Apache & the Weblogic PlugIn are correctly configured, you can try to call your deployed App pointing directly on Apache: (In my test I have started everything on a single machine):

http://localhost/MyApp

You must remember that in httpd.conf file you have only defined 2 Managed Server that at he moment are part of the Dynamic Cluster.

Those 2 Managed are defined "Cluster Master" and they are responsible to create/maintain & update the Dynamic Server List that WebLogic send to the WebLogic PlugIn:

DynamicServerList (default ON)
WebLogicCluster is only a starting point for the dynamic server list that the server and plug-in maintain
This server list is dynamically updated for every request
If set to OFF:
The plug-in only uses the static list specified with the WebLogicCluster parameter
If one or more servers in the static list fails, the plug-in could waste time trying to connect to a dead server, resulting in decreased performance.
If you add a new server to the cluster, the plug-in cannot proxy requests to the new server unless you redefine this parameter. WebLogic Server automatically adds new servers to the dynamic server list when they become part of the cluster.

Important Points:
  • WLS sends the dynamic server list as a part of a response to the proxy (example Apache) NOT to the client
  • Only the cluster master would send the list after collecting the details which servers are up and read to servers client request, NOT each servers sends the list.
  • If you Shutdown or Create and Start new Managed Server (also not defined in WebLogicCluster parameter of the httpd.conf file) the oldest Active Managed Server is always the Cluster Master
Try to put DebugConfigInfo  On (Disable It on Production Environment) inside the httpd.conf file, like this:

<IfModule weblogic_module>  
   <Location />  
    SetHandler    weblogic-handler  
    WebLogicCluster fmarini-it.it.oracle.com:7101,fmarini-it.it.oracle.com:7102  
    DebugConfigInfo On  
   </Location>  
 </IfModule>  

Now try to call your Application adding in the URL this parameter:
?__WebLogicBridgeConfig

In my case, if I call:
http://localhost/MyApp?__WebLogicBridgeConfig

I receive this output in the Browser:

WebLogic Server Plugin version 12.2.1.1.0, <WLSPLUGINS_12.2.1.1.0_WINDOWS.X64_160606.1942>
Query String: '?__WebLogicBridgeConfig'
WebLogic Cluster List:
  1. Host: '192.168.56.1' Port: 7101 SecurePort: 0 *Primary*
WLRetryAfterDroppedConnection: 'ALL'
WLRetryOnTimeout: 'NONE'
    General Server List:
    1. Host: '192.168.56.1' Port: 7101 SecurePort: 0 Status: OK
    2. Host: '192.168.56.1' Port: 7102 SecurePort: 0 Status: OK
    ConnectRetrySecs: '2'
    ConnectTimeoutSecs: '10'
    WLCookieName: JSESSIONID
    DebugConfigInfo: 'ON'
    DefaultFileName: ''
    DisableCookie2Server: OFF
    DynamicServerList: 'ON'
    ErrorPage: ''
    FileCaching: ON
    Idempotent: ON
    KeepAliveEnabled: ON
    KeepAliveSecs: 20
    MaxPostSize: 0
    MaxSkipTime: '10'
    PathPrepend: ''
    PathTrim: ''
    QueryFromRequest: OFF
    WLForwardUriUnparsed: OFF
    WLAllowDoubleEscapedURI: OFF
    SecureProxy: 'OFF'
    StatPath: 'false'
    WLDNSRefreshInterval: '0'
    WLIOTimeoutSecs(old name is HungServerRecoverSecs): '300'
    WLSocketTimeoutSecs: '2'
    WLProxySSL: OFF
    WLProxyPassThrough: OFF
    WLProxySSLPassThrough: OFF
    WLServerInitiatedFailover: ON
    WLMaxWebSocketClients: 32

    Runtime statistics:


    • requests: 7
    • successful requests: 6
    • Exception objects created: 7
    • Exception Objects deleted: 14
    • URL Objects created: 5
    • URL Objects deleted: 4
    • connections recycled: 0
    • UNKNOWN_ERROR_CODE exceptions: 0
    • CONNECTION_REFUSED exceptions: 7
    • CONNECTION_TIMEOUT exceptions: 0
    • READ_ERROR_FROM_CLIENT exceptions: 0
    • READ_ERROR_FROM_SERVER exceptions: 0
    • READ_ERROR_FROM_FILE exceptions: 0
    • WRITE_ERROR_TO_CLIENT exceptions: 0
    • WRITE_ERROR_TO_SERVER exceptions: 0
    • WRITE_ERROR_TO_FILE exceptions: 0
    • READ_TIMEOUT exceptions: 0
    • WRITE_TIMEOUT exceptions: 0
    • UNKNOWN_HOST exceptions: 0
    • NO_RESOURCES exceptions: 0
    • PROTOCOL_ERROR exceptions: 0
    • CONFIG_ERROR exceptions: 0
    • FAILOVER_REQUIRED exceptions: 0
    • POST_TIMEOUT exceptions: 0
    • REQUEST_ENTITY_TOO_LARGE exceptions: 0
    • HALF_OPEN_SOCKET_RETRY exceptions: 0
    • BAD_REQUEST_FROM_CLIENT exceptions: 0
    • UNKNOWN_ERROR_CODE exceptions: 0
    ---------------------------------------------------------------------------------------------------------------------

    If you are using Apache 2.4 on Windows NT follow this suggestion: