Business

Windows Azure Starter Kit for Java

Ne-am reamintit despre Windows Azure și știm cu ce diferă de alte soluții cloud computing. Putem acum să începem pregătirea pentru a putea dezvolta aplicații Java în Azure, din Eclipse.

Pentru a putea dezvolta programe sistemul nostru trebuie sa îndeplineasca următoarele cerințe:

  • .Net Framework 3.5 SP1 (necesar dacă rulăm un sistem de operare anterior Windows 7)
  • Windows Azure SDK
  • SQL Express (opțional)

Desigur că putem descărca și instala manual aceste programe, dar există o cale mai ușoară – Web Platform Installer. Web Platform Installer (WPI) este o unealtă gratuită care permite instalarea automată a unei multitudini de programe: IIS, SQL Server Express, .Net Framework, PHP și multe altele.

  1. Descărcăm WPI de la această adresă și îl instalăm
  2. Rulăm Microsoft Web Platform Installer, iar în căsuța de search căutam Azure SDK.
  3. WPI va detecta automat dependențele de care avem nevoie (la mine erau legate de IIS).
  4. Opțional putem instala și SQL Server, acesta fiind necesar pentru a putea folosi emulatorul de storage. Pentru exemplul nostru nu avem nevoie de această facilitate, motiv pentru care nu am instalat SQL Server

Va apărea un nou folder Windows Azure SDK v1.4 și putem testa deja dacă Compute Emulator funcționează.

Mai avem nevoie și de Windows Azure Starter Kit for Java care este disponibil pe CodePlex. Acest download este un fișier ZIP și poate fi folosit ca template pentru programele create pentru Windows Azure. Fișierele principale sunt:

  • .cspack.jar – conține implementarea în Java
  • ServiceConfiguration.cscfg – reprezintă fișierul de configurare a serviciului Azure
  • ServiceDefinition.csdef – fișierul de definiție a serviciului Azure
  • Helloworld.zip – exemplu de aplicație
  • Startup.cmd – va rula atunci când Worker rol-ul pornește. Aici vom defini cum pornește serverul Tomcat

Am terminat instalările de programe si putem să ne mutam atenția în mediul de lucru Eclipse. Importul fișierului anterior se face foarte ușor: File> Import > Existing Projects into Workspace si selectăm arhiva descărcată înainte.

În continuare trebuie să alegem serverul Java pe care îl folosim; pentru simplitate am ales Apache Tomcat. Pe lângă serverul Java pe care îl vom folosi mai trebuie să alegem și Java Runtime Environment, JRE fiind o dependență a Tomcat.

Întrucât Java Runtime Environment nu poate fi descărcat ca arhivă am ales să arhivez folderul meu C:\Program Files\Java\jre6.

Ștergem arhiva inițială HelloWorld.zip și o înlocuim cu un fișier simplu JSP a cărui conținut este:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>ITSpark Community</title>
</head>
<body>
 
<%!
public String GetString() {
return "\"ITSpark Interop!\"";
}
%>
 
The Java Server is Running = <%= GetString() %>
</body>
</html>

Structura proiectului trebuie sa fie următoarea (pentru simplitate am creat câte un folder pentru Tomcat si JRE):

Următorul pas este să configurăm  fișierele startup.cmd si ServiceDefinition.csdef. Primul fișier va conține comenzile pe care vrem să le executăm când pornește instanța WorkRole1, iar în ServiceDefinition.csdef o să definim endpoint-urile, adică porturile pe care le deschidem pentru a putea accesa aplicația noastră.

Startup.cmd

@REM unzip Tomcat
cscript /B /Nologo util\unzip.vbs tomcat\apache-tomcat-7.0.11-windows-x86.zip .

@REM unzip JRE
cscript /B /Nologo util\unzip.vbs jre\jre6.zip .

@REM copy project files to server
md apache-tomcat-7.0.11\webapps\myapp

copy HelloWorld.jsp apache-tomcat-7.0.11\webapps\myapp 

@REM start the server
cd apache-tomcat-7.0.11\bin
set JRE_HOME=..\..\jre6
startup.bat

 Scriptul ne dezarhivează cele 2 fișiere, apoi copiază fișierul nostru HelloWorld.jsp și pornește Apache Tomcat. Trecem la fișierul ServiceDefinition.csdef unde adăugăm următoarele linii:

<Endpoints>

      <InputEndpoint name="Http" protocol="tcp" port="80" localPort="8080" />

</Endpoints>

Astfel, conținutul fișierului nostru trebuie să fie:

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="WindowsAzureCloudServiceProject" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WorkerRole name="WorkerRole1">
      <Startup>
            <!-- Sample startup task calling startup.cmd from the role's approot\util folder -->
            <Task commandLine="util\startup.cmd" executionContext="elevated" taskType="simple"/>
    </Startup> 
   <Endpoints>
      <InputEndpoint name="Http" protocol="tcp" port="80" localPort="8080" />
   </Endpoints>
  </WorkerRole>
</ServiceDefinition>

În continuare putem testa local aplicația nostră folosind emulatorul de Azure. Îl putem porni din meniul Start > Windows Azure SDK v1.4 > Compute Emulator.

În acest moment suntem pregatiți să rulăm local aplicația noastră. În Eclipse, din meniul Project dam Build All, moment în care apar un număr de fișiere și foldere noi. De interes pentru noi sunt cele 3 fișiere din folderul emulatorTools care ne permit să testăm aplicația noastră:

  • RunInEmulator.cmd – ruleaăa aplicația în emulator
  • DisplayEmulatorUI – pornește interfața emulatorului; foarte folositor întrucât nu trebuie să părpsim interfața din Eclipse
  • ResetEmulator – șterge instanțele active, fără a avea nevoie să apelăm la interfața grafică

În acest moment aplicația noastră ar trebui să fie accesibilă la adresa  http://localhost:8080/myapp/HelloWorld.jsp, serverul Tomcat definit anterior acționând ca webserver.

Cât de greu este să modificăm aplicația noastră ca în loc de emulator să ruleze pe Azure? Foarte simplu! Mergem în fișierul package.xml și înlocuim în tag-ul packpagetype din local în cloud. Gata, aplicația poate rula în Azure!

În continuare o să avem nevoie de o subscripție de Windows Azure. Microsoft oferă un tip de subscripție gratuită care ne oferă lunar 750 de ore pentru o instanță extra small, exact cât avem nevoie pentru a rula 24/7 timp de o lună. După ce trecem prin pașii de înscriere în Windows Azure și confirmăm datele (avem nevoie de un card de credit), ne putem loga la adresa https://windows.azure.com/default.aspx.

În partea stânga jos alegem meniul Hosted Services, Storage Accounts & CDN apoi alegem submeniul Hosted Services si va apărea butonul New Hosted Service.

Completam câmpurile necesare, iar în ultimele 2 câmpuri alegem package-ul respectiv fișierul de configurare generat anterior. Diferența dintre stage și production environment este că primul a fost gândit pentru a testa „intern” aplicația care apoi să fie mutată în spațiul public. Upload-ul fișierelor va dura câteva minute, iar configurarea mașinii virtuale în jur de 10-15 minute. Iată și Tomcat rulând în Windows Azure!

Join The Discussion