Java-alkalmazás konfigurálása Azure-alkalmazás szolgáltatáshoz
Feljegyzés
Spring-alkalmazások esetén az Azure Spring Apps használatát javasoljuk. Azonban továbbra is használhatja a Azure-alkalmazás szolgáltatást célként. Tanácsért tekintse meg a Java számítási feladatok célhelyének útmutatását .
Azure-alkalmazás Szolgáltatással a Java-fejlesztők gyorsan készíthetnek, helyezhetnek üzembe és méretezhetnek Java-Standard kiadás, Tomcat és JBoss EAP-webalkalmazásokat egy teljes körűen felügyelt szolgáltatásban. Alkalmazások üzembe helyezése Maven beépülő modulokkal a parancssorból vagy olyan szerkesztőkben, mint az IntelliJ, az Eclipse vagy a Visual Studio Code.
Ez az útmutató az App Service-t használó Java-fejlesztők alapvető fogalmait és utasításait ismerteti. Ha még soha nem használta Azure-alkalmazás szolgáltatást, először olvassa el a Java rövid útmutatóját. A Java-fejlesztésre nem jellemző App Service használatával kapcsolatos általános kérdésekre az App Service gyakori kérdéseiben talál választ.
Java-verzió megjelenítése
Az aktuális Java-verzió megjelenítéséhez futtassa a következő parancsot a Cloud Shellben:
az webapp config show --name <app-name> --resource-group <resource-group-name> --query "[javaVersion, javaContainer, javaContainerVersion]"
Az összes támogatott Java-verzió megjelenítéséhez futtassa a következő parancsot a Cloud Shellben:
az webapp list-runtimes --os windows | grep java
Az aktuális Java-verzió megjelenítéséhez futtassa a következő parancsot a Cloud Shellben:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion
Az összes támogatott Java-verzió megjelenítéséhez futtassa a következő parancsot a Cloud Shellben:
az webapp list-runtimes --os linux | grep "JAVA\|TOMCAT\|JBOSSEAP"
A verziótámogatásról további információt az App Service nyelvi futtatókörnyezet támogatási szabályzatában talál.
Az alkalmazás üzembe helyezése
Buildelési eszközök
Maven
Az Azure Web AppsHez készült Maven beépülő modullal egyszerűen előkészítheti a Maven Java-projektet az Azure Web Apphoz egy paranccsal a projekt gyökérkönyvtárában:
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.11.0:config
Ez a parancs beépülő modult azure-webapp-maven-plugin
és kapcsolódó konfigurációt ad hozzá, és megkéri, hogy válasszon ki egy meglévő Azure-webalkalmazást, vagy hozzon létre egy újat. Ezután a Következő paranccsal telepítheti a Java-alkalmazást az Azure-ban:
mvn package azure-webapp:deploy
Íme egy mintakonfiguráció a következőben pom.xml
:
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>2.11.0</version>
<configuration>
<subscriptionId>111111-11111-11111-1111111</subscriptionId>
<resourceGroup>spring-boot-xxxxxxxxxx-rg</resourceGroup>
<appName>spring-boot-xxxxxxxxxx</appName>
<pricingTier>B2</pricingTier>
<region>westus</region>
<runtime>
<os>Linux</os>
<webContainer>Java SE</webContainer>
<javaVersion>Java 11</javaVersion>
</runtime>
<deployment>
<resources>
<resource>
<type>jar</type>
<directory>${project.basedir}/target</directory>
<includes>
<include>*.jar</include>
</includes>
</resource>
</resources>
</deployment>
</configuration>
</plugin>
Gradle
Az Azure Web Apps Gradle beépülő moduljának beállításához adja hozzá a beépülő modult a következőhöz
build.gradle
:plugins { id "com.microsoft.azure.azurewebapp" version "1.7.1" }
Konfigurálja a webalkalmazás adatait. A megfelelő Azure-erőforrások akkor jönnek létre, ha nem léteznek. A részletekért tekintse meg ezt a dokumentumot egy mintakonfigurációban.
azurewebapp { subscription = '<your subscription id>' resourceGroup = '<your resource group>' appName = '<your app name>' pricingTier = '<price tier like 'P1v2'>' region = '<region like 'westus'>' runtime { os = 'Linux' webContainer = 'Tomcat 9.0' // or 'Java SE' if you want to run an executable jar javaVersion = 'Java 8' } appSettings { <key> = <value> } auth { type = 'azure_cli' // support azure_cli, oauth2, device_code and service_principal } }
Üzembe helyezés egyetlen paranccsal.
gradle azureWebAppDeploy
Integrált fejlesztőkörnyezetek
Az Azure zökkenőmentes Java App Service-fejlesztési élményt nyújt a népszerű Java-azonosítókban, többek között a következőket:
- VS Code: Java Web Apps és Visual Studio Code
- IntelliJ IDEA:"Helló világ!" alkalmazás webalkalmazás létrehozása Azure-alkalmazás szolgáltatáshoz az IntelliJ használatával
- Eclipse:"Helló világ!" alkalmazás webalkalmazás létrehozása Azure-alkalmazás Szolgáltatáshoz az Eclipse használatával
Kudu API
Java SE
Ha .jar fájlokat szeretne üzembe helyezni a Java Standard kiadás, használja a /api/publish/
Kudu-webhely végpontját. Az API-val kapcsolatos további információkért tekintse meg ezt a dokumentációt.
Feljegyzés
Az alkalmazás azonosításához és futtatásához a .jar alkalmazás nevét az App Service-nek kell neveznie app.jar
. A Maven beépülő modul ezt automatikusan elvégzi Az üzembe helyezés során. Ha nem szeretné átnevezni a JAR-t app.jar, feltölthet egy rendszerhéjszkriptet a parancs használatával a .jar alkalmazás futtatásához. Illessze be a szkript abszolút elérési útját az Indítási fájl szövegmezőbe a portál Konfiguráció szakaszában. Az indítási szkript nem abból a könyvtárból fut, ahová az el lett helyezve. Ezért mindig abszolút elérési utakat használjon az indítási szkriptben található fájlokra való hivatkozáskor (például: java -jar /home/myapp/myapp.jar
).
Tomcat
A .war-fájlok Tomcatben való üzembe helyezéséhez használja a /api/wardeploy/
végpontot az archív fájl POST-fájljának közzétételéhez. Az API-val kapcsolatos további információkért tekintse meg ezt a dokumentációt.
JBoss EAP
A .war-fájlok JBoss-fájlban való üzembe helyezéséhez használja a végpontot az /api/wardeploy/
archív fájl postázásához. Az API-val kapcsolatos további információkért tekintse meg ezt a dokumentációt.
A .ear-fájlok telepítéséhez használja az FTP-t. A .ear-alkalmazás az alkalmazás konfigurációjában meghatározott környezetgyökérre van üzembe helyezve. Ha például az alkalmazás környezetgyökere, <context-root>myapp</context-root>
akkor az elérési úton tallózhat a /myapp
webhelyen: http://my-app-name.azurewebsites.net/myapp
. Ha azt szeretné, hogy a webalkalmazás a gyökérútvonalon legyen kiszolgálva, győződjön meg arról, hogy az alkalmazás a gyökér elérési útjára állítja a környezet gyökerét: <context-root>/</context-root>
. További információ: A webalkalmazás környezetgyökerének beállítása.
Ne helyezze üzembe a .war vagy .jar FTP használatával. Az FTP-eszköz indítási szkriptek, függőségek vagy más futtatókörnyezeti fájlok feltöltésére lett kialakítva. Nem ez az optimális választás a webalkalmazások üzembe helyezéséhez.
Alkalmazások naplózása és hibakeresése
A teljesítményjelentések, a forgalmi vizualizációk és az állapotellenőrzések minden alkalmazáshoz elérhetők az Azure Portalon keresztül. További információ: Azure-alkalmazás Szolgáltatásdiagnosztika áttekintése.
Diagnosztikai naplók streamelése
Az alkalmazáskódból létrehozott konzolnaplók App Service-ben történő eléréséhez kapcsolja be a diagnosztikai naplózást a következő parancs a Cloud Shellben történő futtatásával:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
A --level
lehetséges értékei: Error
, Warning
, Info
és Verbose
. Minden szint tartalmazza az azt megelőző szintet. Például: az Error
csak a hibaüzeneteket tartalmazza, a Verbose
pedig az összes üzenetet.
Ha a diagnosztikai naplózás be van kapcsolva, futtassa a következő parancsot a naplóstream megtekintéséhez:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Ha nem jelennek meg azonnal a konzolnaplófájlok, ellenőrizze ismét 30 másodperc múlva.
Feljegyzés
A naplófájlokat a böngészőből is megtekintheti a következő címen: https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
A Ctrl
+C
billentyűparanccsal bármikor leállíthatja a naplóstreamelést.
A tárolón belülről létrehozott konzolnaplókhoz hozzáférhet.
Először kapcsolja be a tárolónaplózást a következő parancs futtatásával:
az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem
Cserélje le és <resource-group-name>
írja be <app-name>
a webalkalmazásnak megfelelő neveket.
A tárolónaplózás bekapcsolása után futtassa a következő parancsot a naplóstream megtekintéséhez:
az webapp log tail --name <app-name> --resource-group <resource-group-name>
Ha nem jelennek meg azonnal a konzolnaplófájlok, ellenőrizze ismét 30 másodperc múlva.
Ha bármikor le szeretné állítani a naplóstreamelést, írja be a Ctrl C billentyűkombinációt.+
A naplófájlokat a böngészőben is megvizsgálhatja a következő helyen https://<app-name>.scm.azurewebsites.net/api/logs/docker
: .
További információ: Streamnaplók a Cloud Shellben.
SSH-konzol hozzáférése
Ahhoz, hogy közvetlen SSH-munkamenetet nyisson meg a tárolóval, az alkalmazásának futnia kell.
Illessze be a következő URL-címet a böngészőbe, és cserélje le az <app-name>
kifejezést az alkalmazása nevére:
https://<app-name>.scm.azurewebsites.net/webssh/host
Ha még nem végezte el a hitelesítést, a csatlakozáshoz el kell végeznie a hitelesítést az Azure-előfizetésével. A hitelesítés után egy böngészőn belüli felület jelenik meg, ahol a tárolón belül futtathat parancsokat.
Feljegyzés
A rendszer a /home könyvtáron kívül elvégzett módosításokat magában a tárolóban helyezi el, és ezek nem maradnak meg az alkalmazás újraindítása után.
Ha távoli SSH-munkamenetet szeretne megnyitni a helyi gépről, tekintse meg az SSH-munkamenet távoli rendszerhéjból történő megnyitásával foglalkozó témakört.
Hibaelhárítási eszközök
A beépített Java-rendszerképek az Alpine Linux operációs rendszeren alapulnak. A csomagkezelővel telepítheti a apk
hibaelhárítási eszközöket vagy parancsokat.
Java Profiler
Az Azure-alkalmazás szolgáltatás összes Java-futtatókörnyezete a JDK Flight Recorder-et használja a Java-számítási feladatok profilozásához. Segítségével JVM-, rendszer- és alkalmazáseseményeket rögzíthet, és elháríthatja az alkalmazásokkal kapcsolatos problémákat.
A Java Profilerről további információt a Azure-alkalmazás Elemzések dokumentációjában talál.
Flight Recorder
Az App Service összes Java-futtatókörnyezete a Java Flight Recordert használja. Segítségével JVM-, rendszer- és alkalmazáseseményeket rögzíthet, és elháríthatja a Java-alkalmazások problémáit.
Időzított felvétel
Ha időtúllépést szeretne rögzíteni, szüksége lesz a Java-alkalmazás PID-jára (folyamatazonosítójára). A PID megkereséséhez nyisson meg egy böngészőt a webalkalmazás SCM-webhelyére a következő címen https://<your-site-name>.scm.azurewebsites.net/ProcessExplorer/
: . Ezen a lapon a webalkalmazás futó folyamatai láthatók. Keresse meg a táblában a "java" nevű folyamatot, és másolja ki a megfelelő PID-t (folyamatazonosítót).
Ezután nyissa meg a Hibakeresési konzolt az SCM-webhely felső eszköztárán, és futtassa a következő parancsot. Cserélje le <pid>
a korábban másolt folyamatazonosítóra. Ez a parancs elindítja a Java-alkalmazás 30 másodperces profilkészítő felvételét, és létrehoz egy, a C:\home
címtárban elnevezett timed_recording_example.jfr
fájlt.
jcmd <pid> JFR.start name=TimedRecording settings=profile duration=30s filename="C:\home\timed_recording_example.JFR"
SSH-t az App Service-be, és futtassa a parancsot az jcmd
összes futó Java-folyamat listájának megtekintéséhez. A jcmd mellett látnia kell, hogy a Java-alkalmazás egy folyamatazonosító számmal (pid) fut.
078990bbcd11:/home# jcmd
Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true
147 sun.tools.jcmd.JCmd
116 /home/site/wwwroot/app.jar
Hajtsa végre a következő parancsot a JVM 30 másodperces felvételének elindításához. Profilt készít a JVM-ről, és létrehoz egy jfr_example.jfr nevű JFR-fájlt a kezdőkönyvtárban. (Cserélje le a 116-ot a Java-alkalmazás pidjára.)
jcmd 116 JFR.start name=MyRecording settings=profile duration=30s filename="/home/jfr_example.jfr"
A 30 másodperces időköz alatt ellenőrizheti, hogy a felvétel folyamatban jcmd 116 JFR.check
van-e. A parancs az adott Java-folyamat összes felvételét megjeleníti.
Folyamatos rögzítés
A Java Flight Recorder használatával folyamatosan profilt készíthet a Java-alkalmazásról, minimális hatással a futtatókörnyezet teljesítményére. Ehhez futtassa a következő Azure CLI-parancsot egy JAVA_OPTS nevű alkalmazásbeállítás létrehozásához a szükséges konfigurációval. A JAVA_OPTS alkalmazásbeállítás tartalma a parancsnak java
lesz átadva az alkalmazás indításakor.
az webapp config appsettings set -g <your_resource_group> -n <your_app_name> --settings JAVA_OPTS=-XX:StartFlightRecording=disk=true,name=continuous_recording,dumponexit=true,maxsize=1024m,maxage=1d
A rögzítés megkezdése után a parancs használatával bármikor kiadhatja az aktuális rögzítési JFR.dump
adatokat.
jcmd <pid> JFR.dump name=continuous_recording filename="/home/recording1.jfr"
Fájlok elemzése .jfr
Az FTPS használatával töltse le a JFR-fájlt a helyi gépre. A JFR-fájl elemzéséhez töltse le és telepítse a Java Mission Controlt. A Java Mission Control-ra vonatkozó utasításokért tekintse meg a JMC dokumentációját és a telepítési utasításokat.
Alkalmazásnaplózás
Engedélyezze az alkalmazásnaplózást az Azure Portalon vagy az Azure CLI-ben , hogy konfigurálja az App Service-t az alkalmazás szabványos konzolkimenetének és standard konzolhibáinak a helyi fájlrendszerbe vagy az Azure Blob Storage-ba való írásához. A helyi App Service fájlrendszerpéldányra való naplózás a konfigurálás után 12 órával le van tiltva. Ha hosszabb megőrzésre van szüksége, konfigurálja az alkalmazást úgy, hogy a kimenetet egy Blob Storage-tárolóba írja. A Java- és Tomcat-alkalmazásnaplók a /home/LogFiles/Application/ könyvtárban találhatók.
Engedélyezze az alkalmazásnaplózást az Azure Portalon vagy az Azure CLI-ben , hogy konfigurálja az App Service-t az alkalmazás szabványos konzolkimenetének és standard konzolhibáinak a helyi fájlrendszerbe vagy az Azure Blob Storage-ba való írásához. Ha hosszabb megőrzésre van szüksége, konfigurálja az alkalmazást úgy, hogy a kimenetet egy Blob Storage-tárolóba írja. A Java- és Tomcat-alkalmazásnaplók a /home/LogFiles/Application/ könyvtárban találhatók.
Az Azure Blob Storage naplózása Linux-alapú alkalmazásokhoz csak az Azure Monitor használatával konfigurálható.
Ha az alkalmazás logbacket vagy Log4j-t használ nyomkövetéshez, ezeket a nyomkövetéseket továbbíthatja a Azure-alkalmazás Elemzések a naplózási keretrendszer konfigurációs utasításaival az Application Elemzések Java nyomkövetési naplóinak felfedezése című témakörben.
Feljegyzés
A CVE-2021-44228 ismert biztonsági rése miatt mindenképpen használja a Log4j 2.16-os vagy újabb verzióját.
Testreszabás és finomhangolás
Azure-alkalmazás szolgáltatás az Azure Portalon és a parancssori felületen keresztül támogatja a kívülről történő finomhangolást és testreszabást. Tekintse át a nem Java-specifikus webalkalmazás-konfigurációval kapcsolatos alábbi cikkeket:
- Alkalmazásbeállítások konfigurálása
- Egyéni tartomány beállítása
- TLS-/SSL-kötések konfigurálása
- CDN hozzáadása
- A Kudu-webhely konfigurálása
Alkalmazástartalom helyi másolása
Állítsa be az alkalmazásbeállítást JAVA_COPY_ALL
úgy, hogy true
az alkalmazás tartalmát a megosztott fájlrendszerből másolja a helyi feldolgozóba. Ez a beállítás segít a fájlzárolási problémák megoldásában.
Java-futtatókörnyezet beállításainak megadása
A lefoglalt memória vagy más JVM-futtatókörnyezet beállításainak beállításához hozzon létre egy alkalmazásbeállítást a beállításokkal együttJAVA_OPTS
. Az App Service környezeti változóként továbbítja ezt a beállítást a Java-futtatókörnyezetnek az indításkor.
Az Azure Portalon, a webalkalmazás Alkalmazás Gépház területén hozzon létre egy új, Java Standard kiadás vagy CATALINA_OPTS
Tomcat nevű JAVA_OPTS
alkalmazásbeállítást, amely más beállításokat is tartalmaz, például-Xms512m -Xmx1204m
.
Ha az alkalmazásbeállítást a Maven beépülő modulból szeretné konfigurálni, adja hozzá a beállítási/értékcímkéket az Azure beépülő modul szakaszában. Az alábbi példa egy meghatározott minimális és maximális Java-halomméretet állít be:
<appSettings>
<property>
<name>JAVA_OPTS</name>
<value>-Xms1024m -Xmx1024m</value>
</property>
</appSettings>
Feljegyzés
A Tomcat Windows App Service-en való használatakor nem kell web.config fájlt létrehoznia.
Az App Service-csomagban egyetlen üzembehelyezési ponttal rendelkező alkalmazást futtató fejlesztők az alábbi lehetőségeket használhatják:
- B1 és S1 példányok:
-Xms1024m -Xmx1024m
- B2 és S2 példányok:
-Xms3072m -Xmx3072m
- B3- és S3-példányok:
-Xms6144m -Xmx6144m
- P1v2-példányok:
-Xms3072m -Xmx3072m
- P2v2-példányok:
-Xms6144m -Xmx6144m
- P3v2-példányok:
-Xms12800m -Xmx12800m
- P1v3-példányok:
-Xms6656m -Xmx6656m
- P2v3-példányok:
-Xms14848m -Xmx14848m
- P3v3-példányok:
-Xms30720m -Xmx30720m
- I1-példányok:
-Xms3072m -Xmx3072m
- I2-példányok:
-Xms6144m -Xmx6144m
- I3-példányok:
-Xms12800m -Xmx12800m
- I1v2-példányok:
-Xms6656m -Xmx6656m
- I2v2-példányok:
-Xms14848m -Xmx14848m
- I3v2-példányok:
-Xms30720m -Xmx30720m
Az alkalmazás halombeállításainak finomhangolásakor tekintse át az App Service-csomag részleteit, és vegye figyelembe, hogy több alkalmazásnak és üzembehelyezési pontnak kell megtalálnia a memória optimális lefoglalását.
Webes szoftvercsatornák bekapcsolása
Kapcsolja be a webes szoftvercsatornák támogatását az Azure Portalon az alkalmazás alkalmazásbeállításaiban . A beállítás érvénybe lépéséhez újra kell indítania az alkalmazást.
A webes szoftvercsatornák támogatásának bekapcsolása az Azure CLI-vel az alábbi paranccsal:
az webapp config set --name <app-name> --resource-group <resource-group-name> --web-sockets-enabled true
Ezután indítsa újra az alkalmazást:
az webapp stop --name <app-name> --resource-group <resource-group-name>
az webapp start --name <app-name> --resource-group <resource-group-name>
Alapértelmezett karakterkódolás beállítása
Az Azure Portal alkalmazás Gépház területén hozzon létre egy új, értékekkel -Dfile.encoding=UTF-8
ellátott JAVA_OPTS
alkalmazásbeállítást.
Másik lehetőségként konfigurálhatja az alkalmazásbeállítást az App Service Maven beépülő modullal. Adja hozzá a beállításnevet és az értékcímkéket a beépülő modul konfigurációjában:
<appSettings>
<property>
<name>JAVA_OPTS</name>
<value>-Dfile.encoding=UTF-8</value>
</property>
</appSettings>
JSP-fájlok fordítása előtti
A Tomcat-alkalmazások teljesítményének javítása érdekében az App Service-ben való üzembe helyezés előtt lefordíthatja a JSP-fájlokat. Használhatja az Apache Sling által biztosított Maven beépülő modult , vagy használhatja ezt az Ant buildfájlt.
Biztonságos alkalmazások
Az App Service-ben futó Java-alkalmazások biztonsági ajánlott eljárásai megegyeznek a többi alkalmazással.
Felhasználók hitelesítése (egyszerű hitelesítés)
Alkalmazáshitelesítés beállítása az Azure Portalon a Hitelesítés és engedélyezés beállítással. Innen engedélyezheti a hitelesítést Microsoft Entra-azonosítóval vagy olyan közösségi bejelentkezésekkel, mint a Facebook, a Google vagy a GitHub. Az Azure Portal konfigurációja csak egyetlen hitelesítési szolgáltató konfigurálásakor működik. További információ: Az App Service-alkalmazás konfigurálása a Microsoft Entra-bejelentkezés használatára, valamint a kapcsolódó cikkek más identitásszolgáltatók számára. Ha több bejelentkezési szolgáltatót is engedélyeznie kell, kövesse a bejelentkezések és kijelentkezések testreszabása című témakör utasításait.
Java SE
A Spring Boot fejlesztői a Microsoft Entra Spring Boot starter használatával biztonságossá tehetik az alkalmazásokat jól ismert Spring Security-széljegyzetek és API-k használatával. Ügyeljen arra, hogy növelje az application.properties fájl maximális fejlécméretét. Azt javasoljuk, hogy értéke 16384
.
Tomcat
A Tomcat-alkalmazás közvetlenül a servletből érheti el a felhasználó jogcímeit, ha a Principal objektumot egy Térkép objektumra adhatja. Az Map
objektum minden jogcímtípust az adott típusú jogcímek gyűjteményéhez rendel. Az alábbi példakód request
egy példánya HttpServletRequest
.
Map<String, Collection<String>> map = (Map<String, Collection<String>>) request.getUserPrincipal();
Most már bármilyen jogcímet megvizsgálhat az Map
objektumban. A következő kódrészlet például végigfut az összes jogcímtípuson, és kinyomtatja az egyes gyűjtemények tartalmát.
for (Object key : map.keySet()) {
Object value = map.get(key);
if (value != null && value instanceof Collection {
Collection claims = (Collection) value;
for (Object claim : claims) {
System.out.println(claims);
}
}
}
A felhasználók kijelentkezéséhez használja az /.auth/ext/logout
elérési utat. Egyéb műveletek végrehajtásához tekintse meg a bejelentkezések és kijelentkezések testreszabásáról szóló dokumentációt. A Tomcat HttpServletRequest felületéről és módszereiről hivatalos dokumentáció is található. A következő servlet-metódusok is hidratálva vannak az App Service konfigurációja alapján:
public boolean isSecure()
public String getRemoteAddr()
public String getRemoteHost()
public String getScheme()
public int getServerPort()
A funkció letiltásához hozzon létre egy olyan alkalmazásbeállítást WEBSITE_AUTH_SKIP_PRINCIPAL
, amelynek értéke a 1
. Ha le szeretné tiltani az App Service által hozzáadott összes servlet-szűrőt, hozzon létre egy értéket tartalmazó WEBSITE_SKIP_FILTERS
1
beállítást.
TLS/SSL konfigurálása
Meglévő TLS/SSL-tanúsítvány feltöltéséhez és az alkalmazás tartománynevére való kötéséhez kövesse az egyéni DNS-név biztonságossá tételét TLS/SSL-kötéssel a Azure-alkalmazás szolgáltatásban. Az alkalmazást a TLS/SSL kényszerítésére is konfigurálhatja.
KeyVault-hivatkozások használata
Az Azure KeyVault központi titkos kulcskezelést biztosít hozzáférési szabályzatokkal és naplózási előzményekkel. Titkos kulcsokat (például jelszavakat vagy kapcsolati sztring) tárolhat a KeyVaultban, és környezeti változókon keresztül hozzáférhet ezekhez a titkos kulcsokhoz az alkalmazásban.
Először kövesse azokat az utasításokat , amikor hozzáférést ad az alkalmazásnak egy kulcstartóhoz , és egy KeyVault-hivatkozást készít a titkos kulcsra egy alkalmazásbeállításban. Ellenőrizheti, hogy a hivatkozás feloldja-e a titkos kulcsot a környezeti változó nyomtatásával, miközben távolról hozzáfér az App Service terminálhoz.
Ha be szeretné szúrni ezeket a titkos kódokat a Spring vagy a Tomcat konfigurációs fájlba, használja a környezeti változóinjektálási szintaxist (${MY_ENV_VAR}
). A Spring-konfigurációs fájlok esetében tekintse meg ezt a külső konfigurációkkal kapcsolatos dokumentációt.
A Java-kulcstároló használata
Alapértelmezés szerint az App Service Linuxra feltöltött nyilvános vagy magántanúsítványok a tároló elindulásakor betöltődnek a megfelelő Java-kulcstárolókba. A tanúsítvány feltöltése után újra kell indítania az App Service-t ahhoz, hogy betöltse a Java Key Store-ba. A nyilvános tanúsítványokat a rendszer betölti a kulcstárolóba a következő helyen $JRE_HOME/lib/security/cacerts
: , és a magántanúsítványok tárolása a következő helyen $JRE_HOME/lib/security/client.jks
történik:
További konfigurációra lehet szükség a JDBC-kapcsolat tanúsítványokkal való titkosításához a Java Key Store-ban. Tekintse meg a kiválasztott JDBC-illesztőprogram dokumentációját.
A Java-kulcstároló inicializálása
Az import java.security.KeyStore
objektum inicializálásához töltse be a kulcstárfájlt a jelszóval. Mindkét kulcstároló alapértelmezett jelszava a következő changeit
: .
KeyStore keyStore = KeyStore.getInstance("jks");
keyStore.load(
new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/cacerts"),
"changeit".toCharArray());
KeyStore keyStore = KeyStore.getInstance("pkcs12");
keyStore.load(
new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/client.jks"),
"changeit".toCharArray());
A kulcstároló manuális betöltése
A tanúsítványokat manuálisan is betöltheti a kulcstárolóba. Hozzon létre egy alkalmazásbeállítást, amelynek az az értéke, SKIP_JAVA_KEYSTORE_LOAD
hogy az App Service automatikusan betöltse 1
a tanúsítványokat a kulcstárolóba. Az App Service-be az Azure Portalon keresztül feltöltött összes nyilvános tanúsítvány a következő helyen /var/ssl/certs/
található: . A magántanúsítványok tárolása a következő helyen /var/ssl/private/
történik: .
A Java-kulcseszközt úgy használhatja, hogy megnyit egy SSH-kapcsolatot az App Service-hez, és futtatja a parancsot keytool
. A parancsok listáját a Kulcseszköz dokumentációjában találja. A KeyStore API-val kapcsolatos további információkért tekintse meg a hivatalos dokumentációt.
APM-platformok konfigurálása
Ez a szakasz bemutatja, hogyan csatlakoztathatók a Azure-alkalmazás szolgáltatásban üzembe helyezett Java-alkalmazások az Azure Monitor Alkalmazás Elemzések, a NewRelic és az AppDynamics alkalmazásteljesítmény-monitorozási (APM) platformjaihoz.
Az Application Insights konfigurálása
Az Azure Monitor Alkalmazás Elemzések egy natív felhőbeli alkalmazásmonitorozási szolgáltatás, amely lehetővé teszi az ügyfelek számára a hibák, szűk keresztmetszetek és használati minták megfigyelését az alkalmazás teljesítményének javítása és a feloldás középideje (MTTR) csökkentése érdekében. Néhány kattintással vagy parancssori felületi paranccsal engedélyezheti a figyelést a Node.js vagy Java-alkalmazások számára, automatikusancolhatja a naplókat, metrikákat és elosztott nyomkövetéseket, így nincs szükség az SDK alkalmazásba való belefoglalására. Az ügynök konfigurálásához elérhető alkalmazásbeállításokról az alkalmazás Elemzések dokumentációjában talál további információt.
Azure Portal
Ha engedélyezni szeretné az Alkalmazás Elemzések az Azure Portalon, nyissa meg az Alkalmazás Elemzések a bal oldali menüben, és válassza az Alkalmazás Elemzések bekapcsolása lehetőséget. Alapértelmezés szerint a rendszer a webalkalmazás nevével megegyező nevű új Application Insights-erőforrást használ. Választhat egy meglévő Application Insights-erőforrást, vagy módosíthatja a nevet. Válassza az Alkalmaz elemet az alján.
Azure CLI
Az Azure CLI-n keresztüli engedélyezéshez létre kell hoznia egy alkalmazás-Elemzések-erőforrást, és be kell állítania néhány alkalmazásbeállítást az Azure Portalon az Alkalmazás Elemzések webalkalmazáshoz való csatlakoztatásához.
Az Alkalmazások Elemzések bővítmény engedélyezése
az extension add -n application-insights
Hozzon létre egy alkalmazás-Elemzések erőforrást a következő CLI-paranccsal. Cserélje le a helyőrzőket a kívánt erőforrásnévre és -csoportra.
az monitor app-insights component create --app <resource-name> -g <resource-group> --location westus2 --kind web --application-type web
Jegyezze fel az értékeket
connectionString
, ésinstrumentationKey
a következő lépésben szüksége lesz ezekre az értékekre.A többi hely listájának lekéréséhez futtassa a következőt
az account list-locations
: .
Állítsa be a rendszerállapotkulcsot, a kapcsolati sztring és a monitorozási ügynök verzióját alkalmazásbeállításokként a webalkalmazásban. Cserélje le és
<connectionString>
cserélje le<instrumentationKey>
az előző lépés értékeit.az webapp config appsettings set -n <webapp-name> -g <resource-group> --settings "APPINSIGHTS_INSTRUMENTATIONKEY=<instrumentationKey>" "APPLICATIONINSIGHTS_CONNECTION_STRING=<connectionString>" "ApplicationInsightsAgent_EXTENSION_VERSION=~3" "XDT_MicrosoftApplicationInsights_Mode=default" "XDT_MicrosoftApplicationInsights_Java=1"
Állítsa be a rendszerállapotkulcsot, a kapcsolati sztring és a monitorozási ügynök verzióját alkalmazásbeállításokként a webalkalmazásban. Cserélje le és
<connectionString>
cserélje le<instrumentationKey>
az előző lépés értékeit.az webapp config appsettings set -n <webapp-name> -g <resource-group> --settings "APPINSIGHTS_INSTRUMENTATIONKEY=<instrumentationKey>" "APPLICATIONINSIGHTS_CONNECTION_STRING=<connectionString>" "ApplicationInsightsAgent_EXTENSION_VERSION=~3" "XDT_MicrosoftApplicationInsights_Mode=default"
Új relic konfigurálása
NewRelic-fiók létrehozása a NewRelic.com
Töltse le a Java-ügynököt a NewRelicből. A fájl neve hasonló a newrelic-java-x.x.x.zip.
Másolja ki a licenckulcsot, és később konfigurálnia kell az ügynököt.
SSH-t az App Service-példányba , és hozzon létre egy új könyvtárat /home/site/wwwroot/apm.
Töltse fel a kicsomagolt NewRelic Java-ügynökfájlokat a /home/site/wwwroot/apm könyvtárba. Az ügynök fájljainak a /home/site/wwwroot/apm/newrelic helyen kell lenniük.
Módosítsa a YAML-fájlt a /home/site/wwwroot/apm/newrelic/newrelic.yml címen, és cserélje le a helyőrző licenc értékét a saját licenckulcsára.
Az Azure Portalon keresse meg az alkalmazást az App Service-ben, és hozzon létre egy új alkalmazásbeállítást.
- Java-Standard kiadás-alkalmazások esetén hozzon létre egy környezeti változót az értékkel
-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar
.JAVA_OPTS
- A Tomcat esetében hozzon létre egy környezeti változót az értékkel
-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar
.CATALINA_OPTS
- Java-Standard kiadás-alkalmazások esetén hozzon létre egy környezeti változót az értékkel
NewRelic-fiók létrehozása a NewRelic.com
Töltse le a Java-ügynököt a NewRelicből. A fájl neve hasonló a newrelic-java-x.x.x.zip.
Másolja ki a licenckulcsot, és később szüksége lesz rá az ügynök konfigurálásához.
SSH-t az App Service-példányba , és hozzon létre egy új könyvtárat /home/site/wwwroot/apm.
Töltse fel a kicsomagolt NewRelic Java-ügynökfájlokat a /home/site/wwwroot/apm könyvtárba. Az ügynök fájljainak a /home/site/wwwroot/apm/newrelic helyen kell lenniük.
Módosítsa a YAML-fájlt a /home/site/wwwroot/apm/newrelic/newrelic.yml címen, és cserélje le a helyőrző licenc értékét a saját licenckulcsára.
Az Azure Portalon keresse meg az alkalmazást az App Service-ben, és hozzon létre egy új alkalmazásbeállítást.
- Java-Standard kiadás-alkalmazások esetén hozzon létre egy környezeti változót az értékkel
-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar
.JAVA_OPTS
- A Tomcat esetében hozzon létre egy környezeti változót az értékkel
-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar
.CATALINA_OPTS
- Java-Standard kiadás-alkalmazások esetén hozzon létre egy környezeti változót az értékkel
Ha már rendelkezik környezeti változóval
JAVA_OPTS
az aktuális érték végéhez, fűzzeCATALINA_OPTS
hozzá-javaagent:/...
a beállítást.
Az AppDynamics konfigurálása
AppDynamics-fiók létrehozása a AppDynamics.com
Töltse le a Java-ügynököt az AppDynamics webhelyéről. A fájlnév hasonló a AppServerAgent-x.x.x.xxxxx.zip
A Kudu-konzollal hozzon létre egy új könyvtárat /home/site/wwwroot/apm.
Töltse fel a Java-ügynök fájljait a /home/site/wwwroot/apm könyvtárba. Az ügynök fájljainak a /home/site/wwwroot/apm/appdynamics helyen kell lenniük.
Az Azure Portalon keresse meg az alkalmazást az App Service-ben, és hozzon létre egy új alkalmazásbeállítást.
- Java-Standard kiadás-alkalmazások esetén hozzon létre egy környezeti változót
JAVA_OPTS
, amelynek az az értéke-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>
, ahol<app-name>
az App Service neve szerepel. - Tomcat-alkalmazások esetén hozzon létre egy környezeti változót
CATALINA_OPTS
, amelynek az az értéke-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>
, ahol<app-name>
az App Service neve szerepel.
- Java-Standard kiadás-alkalmazások esetén hozzon létre egy környezeti változót
AppDynamics-fiók létrehozása a AppDynamics.com
Töltse le a Java-ügynököt az AppDynamics webhelyéről. A fájlnév hasonló a AppServerAgent-x.x.x.xxxxx.zip
SSH-t az App Service-példányba , és hozzon létre egy új könyvtárat /home/site/wwwroot/apm.
Töltse fel a Java-ügynök fájljait a /home/site/wwwroot/apm könyvtárba. Az ügynök fájljainak a /home/site/wwwroot/apm/appdynamics helyen kell lenniük.
Az Azure Portalon keresse meg az alkalmazást az App Service-ben, és hozzon létre egy új alkalmazásbeállítást.
- Java-Standard kiadás-alkalmazások esetén hozzon létre egy környezeti változót
JAVA_OPTS
, amelynek az az értéke-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>
, ahol<app-name>
az App Service neve szerepel. - Tomcat-alkalmazások esetén hozzon létre egy környezeti változót
CATALINA_OPTS
, amelynek az az értéke-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>
, ahol<app-name>
az App Service neve szerepel.
- Java-Standard kiadás-alkalmazások esetén hozzon létre egy környezeti változót
Feljegyzés
Ha már rendelkezik környezeti változóval JAVA_OPTS
az aktuális érték végéhez, fűzze CATALINA_OPTS
hozzá -javaagent:/...
a beállítást.
Adatforrások konfigurálása
Java SE
A Spring Boot-alkalmazások adatforrásaihoz való csatlakozáshoz javasoljuk, hogy hozzon létre kapcsolati sztring, és injektálja őket az application.properties fájlba.
Az App Service oldal "Konfiguráció" szakaszában adja meg a sztring nevét, illessze be a JDBC-kapcsolati sztring az értékmezőbe, és állítsa a típust "Egyéni" értékre. Ezt a kapcsolati sztring tetszés szerint pontbeállításként is beállíthatja.
Ez a kapcsolati sztring az alkalmazás számára elérhető egy környezeti változó néven
CUSTOMCONNSTR_<your-string-name>
. Például:CUSTOMCONNSTR_exampledb
.Az application.properties fájlban hivatkozzon erre a kapcsolati sztring a környezeti változó nevével. Példánkban az alábbiakat használnánk.
app.datasource.url=${CUSTOMCONNSTR_exampledb}
További információ: Spring Boot-dokumentáció az adathozzáférésről és a külső konfigurációkról.
Tomcat
Ezek az utasítások az összes adatbázis-kapcsolatra vonatkoznak. A helyőrzőket ki kell töltenie a kiválasztott adatbázis illesztőprogram-osztálynevével és JAR-fájljával. A megadott táblázat osztályneveket és illesztőprogram-letöltéseket tartalmaz a gyakori adatbázisokhoz.
Adatbázis | Illesztőprogram-osztály neve | JDBC-illesztő |
---|---|---|
PostgreSQL | org.postgresql.Driver |
Letöltés |
MySQL | com.mysql.jdbc.Driver |
Letöltés (Válassza a "Platformfüggetlen" lehetőséget) |
SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
Letöltés |
Ahhoz, hogy a Tomcat a Java Database Csatlakozás ivity (JDBC) vagy a Java Persistence API (JPA) használatára legyen konfigurálva, először szabja testre a CATALINA_OPTS
Tomcat által az indításkor beolvasott környezeti változót. Ezeket az értékeket az App Service Maven beépülő modul alkalmazásbeállításával állíthatja be:
<appSettings>
<property>
<name>CATALINA_OPTS</name>
<value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
</property>
</appSettings>
Vagy állítsa be a környezeti változókat az Azure Portal Konfigurációs>alkalmazás Gépház lapján.
Ezután állapítsa meg, hogy az adatforrásnak elérhetőnek kell-e lennie egy alkalmazásnak vagy a Tomcat servleten futó összes alkalmazásnak.
Alkalmazásszintű adatforrások
Hozzon létre egy context.xml fájlt a projekt META-INF/könyvtárában. Hozza létre a META-INF/ könyvtárat, ha nem létezik.
A context.xml adjon hozzá egy
Context
elemet az adatforrás JNDI-címhez való csatolásához. Cserélje le adriverClassName
helyőrzőt az illesztőprogram osztálynevére a fenti táblázatból.<Context> <Resource name="jdbc/dbconnection" type="javax.sql.DataSource" url="${connURL}" driverClassName="<insert your driver class name>" username="${dbuser}" password="${dbpassword}" /> </Context>
Frissítse az alkalmazás web.xml az adatforrás használatára az alkalmazásban.
<resource-env-ref> <resource-env-ref-name>jdbc/dbconnection</resource-env-ref-name> <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type> </resource-env-ref>
Megosztott kiszolgálószintű erőforrások
A Windows app service-en futó Tomcat-telepítések az App Service-csomag megosztott területén találhatók. Kiszolgálószintű konfigurációhoz nem módosíthatja közvetlenül a Tomcat-telepítést. Ha kiszolgálószintű konfigurációt szeretne módosítani a Tomcat-telepítésen, át kell másolnia a Tomcatet egy helyi mappába, amelyben módosíthatja a Tomcat konfigurációját.
Egyéni Tomcat létrehozásának automatizálása az alkalmazás indításakor
Egy webalkalmazás indítása előtt indítószkripttel műveleteket hajthat végre. A Tomcat testreszabásához szükséges indítási szkriptnek a következő lépéseket kell végrehajtania:
- Ellenőrizze, hogy a Tomcat már ki lett-e másolva, és helyileg lett-e konfigurálva. Ha így volt, az indítási szkript itt véget érhet.
- Másolja helyileg a Tomcatet.
- Végezze el a szükséges konfigurációs módosításokat.
- Jelezze, hogy a konfiguráció sikeresen befejeződött.
Windows-alkalmazások esetén hozzon létre egy fájlt nevesített startup.cmd
vagy startup.ps1
a wwwroot
címtárban. Ez a fájl automatikusan fut, mielőtt a Tomcat-kiszolgáló elindul.
Íme egy PowerShell-szkript, amely az alábbi lépéseket hajtja végre:
# Check for marker file indicating that config has already been done
if(Test-Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker"){
return 0
}
# Delete previous Tomcat directory if it exists
# In case previous config isn't completed or a new config should be forcefully installed
if(Test-Path "$Env:LOCAL_EXPANDED\tomcat"){
Remove-Item "$Env:LOCAL_EXPANDED\tomcat" --recurse
}
# Copy Tomcat to local
# Using the environment variable $AZURE_TOMCAT90_HOME uses the 'default' version of Tomcat
Copy-Item -Path "$Env:AZURE_TOMCAT90_HOME\*" -Destination "$Env:LOCAL_EXPANDED\tomcat" -Recurse
# Perform the required customization of Tomcat
{... customization ...}
# Mark that the operation was a success
New-Item -Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker" -ItemType File
Átalakítások
A Tomcat-verziók testreszabásának gyakori használati esete a server.xml
context.xml
Tomcat konfigurációs web.xml
fájljainak módosítása. Az App Service már módosítja ezeket a fájlokat, hogy platformfunkciókat biztosítson. A funkciók további használatához fontos, hogy a módosítások végrehajtásakor megőrizze ezeknek a fájloknak a tartalmát. Ehhez javasoljuk, hogy XSL-átalakítást (XSLT) használjon. XSL-átalakítás használatával módosíthatja az XML-fájlokat, miközben megőrzi a fájl eredeti tartalmát.
Példa XSLT-fájlra
Ez a példaátalakítás új összekötőcsomópontot ad hozzá.server.xml
Figyelje meg az identitásátalakítást, amely megőrzi a fájl eredeti tartalmát.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<!-- Identity transform: this ensures that the original contents of the file are included in the new file -->
<!-- Ensure that your transform files include this block -->
<xsl:template match="@* | node()" name="Copy">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@* | node()" mode="insertConnector">
<xsl:call-template name="Copy" />
</xsl:template>
<xsl:template match="comment()[not(../Connector[@scheme = 'https']) and
contains(., '<Connector') and
(contains(., 'scheme="https"') or
contains(., "scheme='https'"))]">
<xsl:value-of select="." disable-output-escaping="yes" />
</xsl:template>
<xsl:template match="Service[not(Connector[@scheme = 'https'] or
comment()[contains(., '<Connector') and
(contains(., 'scheme="https"') or
contains(., "scheme='https'"))]
)]
">
<xsl:copy>
<xsl:apply-templates select="@* | node()" mode="insertConnector" />
</xsl:copy>
</xsl:template>
<!-- Add the new connector after the last existing Connnector if there's one -->
<xsl:template match="Connector[last()]" mode="insertConnector">
<xsl:call-template name="Copy" />
<xsl:call-template name="AddConnector" />
</xsl:template>
<!-- ... or before the first Engine if there's no existing Connector -->
<xsl:template match="Engine[1][not(preceding-sibling::Connector)]"
mode="insertConnector">
<xsl:call-template name="AddConnector" />
<xsl:call-template name="Copy" />
</xsl:template>
<xsl:template name="AddConnector">
<!-- Add new line -->
<xsl:text>
</xsl:text>
<!-- This is the new connector -->
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="${{user.home}}/.keystore" keystorePass="changeit"
clientAuth="false" sslProtocol="TLS" />
</xsl:template>
</xsl:stylesheet>
Függvény XSL-átalakításhoz
A PowerShell beépített eszközökkel rendelkezik az XML-fájlok XSL-átalakításokkal történő átalakításához. Az alábbi szkript egy példafüggvény, amely az startup.ps1
átalakítás végrehajtásához használható:
function TransformXML{
param ($xml, $xsl, $output)
if (-not $xml -or -not $xsl -or -not $output)
{
return 0
}
Try
{
$xslt_settings = New-Object System.Xml.Xsl.XsltSettings;
$XmlUrlResolver = New-Object System.Xml.XmlUrlResolver;
$xslt_settings.EnableScript = 1;
$xslt = New-Object System.Xml.Xsl.XslCompiledTransform;
$xslt.Load($xsl,$xslt_settings,$XmlUrlResolver);
$xslt.Transform($xml, $output);
}
Catch
{
$ErrorMessage = $_.Exception.Message
$FailedItem = $_.Exception.ItemName
Write-Host 'Error'$ErrorMessage':'$FailedItem':' $_.Exception;
return 0
}
return 1
}
Alkalmazásbeállítások
A platformnak azt is tudnia kell, hogy hol van telepítve a Tomcat egyéni verziója. A telepítés helyét az CATALINA_BASE
alkalmazásbeállításban állíthatja be.
Az Azure CLI használatával módosíthatja ezt a beállítást:
az webapp config appsettings set -g $MyResourceGroup -n $MyUniqueApp --settings CATALINA_BASE="%LOCAL_EXPANDED%\tomcat"
Vagy manuálisan is módosíthatja a beállítást az Azure Portalon:
- Nyissa meg a Gépház> Configuration>alkalmazás beállításait.
- Válassza az Új alkalmazásbeállítás lehetőséget.
- A beállítás létrehozásához használja az alábbi értékeket:
- Név:
CATALINA_BASE
- Érték:
"%LOCAL_EXPANDED%\tomcat"
- Név:
Példa startup.ps1
Az alábbi példaszkript egy egyéni Tomcat-fájlt másol egy helyi mappába, XSL-átalakítást hajt végre, és azt jelzi, hogy az átalakítás sikeres volt:
# Locations of xml and xsl files
$target_xml="$Env:LOCAL_EXPANDED\tomcat\conf\server.xml"
$target_xsl="$Env:HOME\site\server.xsl"
# Define the transform function
# Useful if transforming multiple files
function TransformXML{
param ($xml, $xsl, $output)
if (-not $xml -or -not $xsl -or -not $output)
{
return 0
}
Try
{
$xslt_settings = New-Object System.Xml.Xsl.XsltSettings;
$XmlUrlResolver = New-Object System.Xml.XmlUrlResolver;
$xslt_settings.EnableScript = 1;
$xslt = New-Object System.Xml.Xsl.XslCompiledTransform;
$xslt.Load($xsl,$xslt_settings,$XmlUrlResolver);
$xslt.Transform($xml, $output);
}
Catch
{
$ErrorMessage = $_.Exception.Message
$FailedItem = $_.Exception.ItemName
echo 'Error'$ErrorMessage':'$FailedItem':' $_.Exception;
return 0
}
return 1
}
$success = TransformXML -xml $target_xml -xsl $target_xsl -output $target_xml
# Check for marker file indicating that config has already been done
if(Test-Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker"){
return 0
}
# Delete previous Tomcat directory if it exists
# In case previous config isn't completed or a new config should be forcefully installed
if(Test-Path "$Env:LOCAL_EXPANDED\tomcat"){
Remove-Item "$Env:LOCAL_EXPANDED\tomcat" --recurse
}
md -Path "$Env:LOCAL_EXPANDED\tomcat"
# Copy Tomcat to local
# Using the environment variable $AZURE_TOMCAT90_HOME uses the 'default' version of Tomcat
Copy-Item -Path "$Env:AZURE_TOMCAT90_HOME\*" "$Env:LOCAL_EXPANDED\tomcat" -Recurse
# Perform the required customization of Tomcat
$success = TransformXML -xml $target_xml -xsl $target_xsl -output $target_xml
# Mark that the operation was a success if successful
if($success){
New-Item -Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker" -ItemType File
}
Konfiguráció véglegesítése
Végül helyezze az illesztőprogram JARs-eit a Tomcat osztályútvonalra, és indítsa újra az App Service-t. Győződjön meg arról, hogy a JDBC-illesztőfájlok elérhetők a Tomcat-osztálybetöltő számára, ha a /home/site/lib könyvtárba helyezi őket. A Cloud Shellben futtassa az webapp deploy --type=lib
az egyes illesztőprogramok JAR-jét:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --target-path <jar-name>.jar
Tomcat
Ezek az utasítások az összes adatbázis-kapcsolatra vonatkoznak. A helyőrzőket ki kell töltenie a kiválasztott adatbázis illesztőprogram-osztálynevével és JAR-fájljával. A megadott táblázat osztályneveket és illesztőprogram-letöltéseket tartalmaz a gyakori adatbázisokhoz.
Adatbázis | Illesztőprogram-osztály neve | JDBC-illesztő |
---|---|---|
PostgreSQL | org.postgresql.Driver |
Letöltés |
MySQL | com.mysql.jdbc.Driver |
Letöltés (Válassza a "Platformfüggetlen" lehetőséget) |
SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
Letöltés |
Ahhoz, hogy a Tomcat a Java Database Csatlakozás ivity (JDBC) vagy a Java Persistence API (JPA) használatára legyen konfigurálva, először szabja testre a CATALINA_OPTS
Tomcat által az indításkor beolvasott környezeti változót. Ezeket az értékeket az App Service Maven beépülő modul alkalmazásbeállításával állíthatja be:
<appSettings>
<property>
<name>CATALINA_OPTS</name>
<value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
</property>
</appSettings>
Vagy állítsa be a környezeti változókat az Azure Portal Konfigurációs>alkalmazás Gépház lapján.
Ezután állapítsa meg, hogy az adatforrásnak elérhetőnek kell-e lennie egy alkalmazásnak vagy a Tomcat servleten futó összes alkalmazásnak.
Alkalmazásszintű adatforrások
Hozzon létre egy context.xml fájlt a projekt META-INF/könyvtárában. Hozza létre a META-INF/ könyvtárat, ha nem létezik.
A context.xml adjon hozzá egy
Context
elemet az adatforrás JNDI-címhez való csatolásához. Cserélje le adriverClassName
helyőrzőt az illesztőprogram osztálynevére a fenti táblázatból.<Context> <Resource name="jdbc/dbconnection" type="javax.sql.DataSource" url="${connURL}" driverClassName="<insert your driver class name>" username="${dbuser}" password="${dbpassword}" /> </Context>
Frissítse az alkalmazás web.xml az adatforrás használatára az alkalmazásban.
<resource-env-ref> <resource-env-ref-name>jdbc/dbconnection</resource-env-ref-name> <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type> </resource-env-ref>
Megosztott kiszolgálószintű erőforrások
Megosztott, kiszolgálószintű adatforrás hozzáadásához szerkesztenie kell a Tomcat server.xml. Először töltsön fel egy indítási szkriptet, és állítsa be a szkript elérési útját a Configuration>Startup Commandben. Az indítási szkriptet FTP-vel töltheti fel.
Az indítási szkript xsl-átalakítást készít a server.xml fájlra, és az eredményként kapott XML-fájlt a következőre /usr/local/tomcat/conf/server.xml
alakítja. Az indítási szkriptnek telepítenie kell a libxsltet az APK-on keresztül. Az xsl-fájl és az indítási szkript FTP-vel tölthető fel. Az alábbiakban egy példa indítási szkript látható.
# Install libxslt. Also copy the transform file to /home/tomcat/conf/
apk add --update libxslt
# Usage: xsltproc --output output.xml style.xsl input.xml
xsltproc --output /home/tomcat/conf/server.xml /home/tomcat/conf/transform.xsl /usr/local/tomcat/conf/server.xml
Az alábbi példa XSL-fájl egy új összekötő csomópontot ad hozzá a Tomcat server.xml.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()" name="Copy">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@* | node()" mode="insertConnector">
<xsl:call-template name="Copy" />
</xsl:template>
<xsl:template match="comment()[not(../Connector[@scheme = 'https']) and
contains(., '<Connector') and
(contains(., 'scheme="https"') or
contains(., "scheme='https'"))]">
<xsl:value-of select="." disable-output-escaping="yes" />
</xsl:template>
<xsl:template match="Service[not(Connector[@scheme = 'https'] or
comment()[contains(., '<Connector') and
(contains(., 'scheme="https"') or
contains(., "scheme='https'"))]
)]
">
<xsl:copy>
<xsl:apply-templates select="@* | node()" mode="insertConnector" />
</xsl:copy>
</xsl:template>
<!-- Add the new connector after the last existing Connnector if there's one -->
<xsl:template match="Connector[last()]" mode="insertConnector">
<xsl:call-template name="Copy" />
<xsl:call-template name="AddConnector" />
</xsl:template>
<!-- ... or before the first Engine if there's no existing Connector -->
<xsl:template match="Engine[1][not(preceding-sibling::Connector)]"
mode="insertConnector">
<xsl:call-template name="AddConnector" />
<xsl:call-template name="Copy" />
</xsl:template>
<xsl:template name="AddConnector">
<!-- Add new line -->
<xsl:text>
</xsl:text>
<!-- This is the new connector -->
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="${{user.home}}/.keystore" keystorePass="changeit"
clientAuth="false" sslProtocol="TLS" />
</xsl:template>
</xsl:stylesheet>
Konfiguráció véglegesítése
Végül helyezze az illesztőprogram JARs-eit a Tomcat osztályútvonalra, és indítsa újra az App Service-t.
- Győződjön meg arról, hogy a JDBC-illesztőfájlok elérhetők a Tomcat-osztálybetöltő számára, ha a /home/site/lib könyvtárba helyezi őket. A Cloud Shellben futtassa
az webapp deploy --type=lib
az egyes illesztőprogramok JAR-jét:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --path <jar-name>.jar
Ha kiszolgálószintű adatforrást hozott létre, indítsa újra az App Service Linux-alkalmazást. A Tomcat visszaállítja CATALINA_BASE
a /home/tomcat
frissített konfigurációt, és használja azt.
JBoss EAP-adatforrások
Az adatforrás JBoss EAP-val való regisztrálása három alapvető lépésből áll: a JDBC-illesztőprogram feltöltése, a JDBC-illesztőprogram modulként való hozzáadása és a modul regisztrálása. Az App Service állapot nélküli üzemeltetési szolgáltatás, ezért az adatforrásmodul hozzáadására és regisztrálására szolgáló konfigurációs parancsokat a tároló indításakor szkripttel kell használni és alkalmazni.
Szerezze be az adatbázis JDBC-illesztőprogramját.
Hozzon létre egy XML-moduldefiníciós fájlt a JDBC-illesztőhöz. Az alábbi példa a PostgreSQL moduldefinícióját mutatja be.
<?xml version="1.0" ?> <module xmlns="urn:jboss:module:1.1" name="org.postgres"> <resources> <!-- ***** IMPORTANT : REPLACE THIS PLACEHOLDER *******--> <resource-root path="/home/site/deployments/tools/postgresql-42.2.12.jar" /> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
Helyezze a JBoss CLI-parancsokat egy nevű
jboss-cli-commands.cli
fájlba. A JBoss-parancsoknak hozzá kell adniuk a modult, és regisztrálniuk kell adatforrásként. Az alábbi példa a PostgreSQL JBoss CLI-parancsait mutatja be.#!/usr/bin/env bash module add --name=org.postgres --resources=/home/site/deployments/tools/postgresql-42.2.12.jar --module-xml=/home/site/deployments/tools/postgres-module.xml /subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgres",driver-class-name=org.postgresql.Driver,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource) data-source add --name=postgresDS --driver-name=postgres --jndi-name=java:jboss/datasources/postgresDS --connection-url=${POSTGRES_CONNECTION_URL,env.POSTGRES_CONNECTION_URL:jdbc:postgresql://db:5432/postgres} --user-name=${POSTGRES_SERVER_ADMIN_FULL_NAME,env.POSTGRES_SERVER_ADMIN_FULL_NAME:postgres} --password=${POSTGRES_SERVER_ADMIN_PASSWORD,env.POSTGRES_SERVER_ADMIN_PASSWORD:example} --use-ccm=true --max-pool-size=5 --blocking-timeout-wait-millis=5000 --enabled=true --driver-class=org.postgresql.Driver --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter --jta=true --use-java-context=true --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
Hozzon létre egy indítási szkriptet,
startup_script.sh
amely meghívja a JBoss CLI-parancsokat. Az alábbi példa bemutatja, hogyan hívhatja meg a sajátjátjboss-cli-commands.cli
. Később konfigurálja az App Service-t a szkript futtatására a tároló indításakor.$JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
Egy tetszőleges FTP-ügyfél használatával töltse fel a JDBC-illesztőt és
jboss-cli-commands.cli
startup_script.sh
a moduldefiníciót a következőre/site/deployments/tools/
: .Konfigurálja a webhelyet úgy, hogy a tároló indításakor fusson
startup_script.sh
. Az Azure Portalon keresse meg a Configuration>General Gépház> Startup parancsot. Állítsa be az indítási parancsmezőt a következőre/home/site/deployments/tools/startup_script.sh
: . Mentse a módosításokat.
Annak ellenőrzéséhez, hogy az adatforrás hozzá lett-e adva a JBoss-kiszolgálóhoz, az SSH-t a webalkalmazásba, és futtassa $JBOSS_HOME/bin/jboss-cli.sh --connect
. Miután csatlakozott a JBoss-hoz, futtassa a /subsystem=datasources:read-resource
elemet az adatforrások listájának nyomtatásához.
robots933456 a naplókban
A következő üzenet jelenhet meg a tárolónaplókban:
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
Az üzenet biztonságosan figyelmen kívül hagyható. /robots933456.txt
egy olyan próba URL-cím, amelyet az App Service annak a vizsgálatára használ, hogy a tároló képes-e a kérések kiszolgálására. A 404-es válasz egyszerűen azt jelenti, hogy a cím nem létezik, azonban jelzi az App Service számára, hogy a tároló kifogástalan állapotú, és készen áll a kérések megválaszolására.
Java-futtatókörnyezeti verzió kiválasztása
Az App Service-ben a felhasználók kiválaszthatják a JVM főverzióját, például a Java 8-at vagy a Java 11-et, valamint a javítás verzióját, például az 1.8.0_232-es vagy a 11.0.5-ös verziót. Dönthet úgy is, hogy az új alverziók elérhetővé válásával automatikusan frissíti a javításverziót. A legtöbb esetben az éles alkalmazásoknak rögzített javítás JVM-verziókat kell használniuk. Ez megakadályozza a nem várt kimaradást a javítások automatikus frissítések során. Minden Java-webalkalmazás 64 bites JVM-eket használ, és nem konfigurálható.
Ha Tomcat-et használ, dönthet úgy, hogy rögzíti a Tomcat javításverzióját. Windows rendszeren a JVM és a Tomcat javításverzióit egymástól függetlenül rögzítheti. Linuxon rögzítheti a Tomcat javításverzióját; A JVM javításverziója is rögzítve van, de külön nem konfigurálható.
Ha úgy dönt, hogy rögzíti az alverziót, rendszeresen frissítenie kell a JVM alverzióját az alkalmazásban. Annak érdekében, hogy az alkalmazás az újabb alverzión fusson, hozzon létre egy átmeneti pontot, és növelje az alverziót az előkészítési ponton. Ha meggyőződik arról, hogy az alkalmazás megfelelően fut az új alverzión, felcserélheti az előkészítési és éles pontokat.
JBoss EAP
Fürtözés a JBoss EAP-ban
Az App Service támogatja a fürtözést a JBoss EAP 7.4.1-s és újabb verzióihoz. A fürtözés engedélyezéséhez a webalkalmazásnak integrálva kell lennie egy virtuális hálózattal. Amikor a webalkalmazás integrálva van egy virtuális hálózattal, újraindul, és a JBoss EAP telepítése automatikusan fürtözött konfigurációval indul el. A JBoss EAP-példányok a virtuális hálózati integrációban megadott alhálózaton keresztül kommunikálnak a környezeti változóban WEBSITES_PRIVATE_PORTS
futásidőben megjelenített portokkal. A fürtözés letiltásához hozzon létre egy tetszőleges értékkel elnevezett WEBSITE_DISABLE_CLUSTERING
alkalmazásbeállítást.
Feljegyzés
Ha arm-sablonnal engedélyezi a virtuális hálózat integrációját, manuálisan kell beállítania a tulajdonság vnetPrivatePorts
értékét 2
. Ha engedélyezi a virtuális hálózati integrációt a parancssori felületről vagy a portálról, ez a tulajdonság automatikusan be van állítva.
Ha engedélyezve van a fürtözés, a JBoss EAP-példányok a FILE_PING JGroups felderítési protokollt használják az új példányok felderítéséhez, és megőrzik a fürt adatait, például a fürt tagjait, azonosítóikat és IP-címeiket. Az App Service-ben ezek a fájlok a következő alatt /home/clusterinfo/
találhatók: . Az első EAP-példány olvasási/írási engedélyeket szerez be a fürt tagsági fájlján. Más példányok beolvassák a fájlt, megkeresik az elsődleges csomópontot, és egyeztetnek a fürtbe felvenni kívánt csomóponttal, és hozzáadják a fájlhoz.
A Prémium V3 és az izolált V2 App Service-csomagtípusok opcionálisan eloszthatók a rendelkezésre állási zónák között, így javítva az üzleti szempontból kritikus fontosságú számítási feladatok rugalmasságát és megbízhatóságát. Ezt az architektúrát zónaredundanciának is nevezik. A JBoss EAP-fürtszolgáltatás kompatibilis a zónaredundancia funkcióval.
Automatikus méretezési szabályok
Ha automatikus méretezési szabályokat konfigurál a horizontális skálázáshoz, fontos, hogy a példányokat növekményesen (egyenként) távolítsa el, hogy az egyes eltávolított példányok átadhassák a tevékenységeit (például egy adatbázis-tranzakció kezelését) a fürt egy másik tagjára. Ha az automatikus méretezési szabályokat a Portálon úgy konfigurálja, hogy leskálázható legyen, használja az alábbi beállításokat:
- Művelet: "Darabszám csökkentése"
- Lehűlés: "5 perc" vagy nagyobb
- Példányszám: 1
Nem kell növekményesen hozzáadnia példányokat (horizontális felskálázás), egyszerre több példányt is hozzáadhat a fürthöz.
JBoss EAP App Service-csomagok
A JBoss EAP csak a Premium v3 és az Izolált v2 App Service-csomag típusok esetében érhető el. A váratlan viselkedés elkerülése érdekében azoknak az ügyfeleknek, akik egy másik szinten hoztak létre JBoss EAP-webhelyet a nyilvános előzetes verzióban, prémium vagy izolált hardverszintre kell skálázniuk.
Tomcat alapkonfiguráció az App Servicesben
A Java-fejlesztők megbízhatóan testre szabhatják a kiszolgáló beállításait, elháríthatják a problémákat, és magabiztosan helyezhetnek üzembe alkalmazásokat a Tomcatben, ha ismerik a Tomcat server.xml fájl- és konfigurációs adatait. A lehetséges testreszabások a következők:
- A Tomcat konfigurációjának testreszabása: A server.xml fájl és a Tomcat konfigurációs adatainak megismerésével finomhangolhatja a kiszolgáló beállításait az alkalmazások igényeinek megfelelően.
- Hibakeresés: Ha egy alkalmazás telepítve van egy Tomcat-kiszolgálón, a fejlesztőknek ismernie kell a kiszolgáló konfigurációját az esetleges problémák hibakereséséhez. Ez magában foglalja a kiszolgálónaplók ellenőrzését, a konfigurációs fájlok vizsgálatát és az esetlegesen előforduló hibák azonosítását.
- A Tomcat hibáinak elhárítása: A Java-fejlesztők elkerülhetetlenül problémákat tapasztalnak a Tomcat-kiszolgálójukkal, például teljesítményproblémákkal vagy konfigurációs hibákkal. A server.xml fájl és a Tomcat konfigurációs adatainak megismerésével a fejlesztők gyorsan diagnosztizálhatják és elháríthatják ezeket a problémákat, ami időt és energiát takaríthat meg.
- Alkalmazások üzembe helyezése a Tomcatben: Ha Java-webalkalmazást szeretne üzembe helyezni a Tomcatben, a fejlesztőknek tudniuk kell, hogyan konfigurálják a server.xml fájlt és más Tomcat-beállításokat. Ezeknek a részleteknek a megértése elengedhetetlen az alkalmazások sikeres üzembe helyezéséhez és annak biztosításához, hogy zökkenőmentesen futnak a kiszolgálón.
Ha egy beépített Tomcattel rendelkező alkalmazást hoz létre a Java-számítási feladatok (war- vagy JAR-fájlok) üzemeltetéséhez, bizonyos beállításokat ki kell vennie a Tomcat-konfiguráció keretéből. Részletes információkért tekintse meg az Apache Tomcat hivatalos dokumentációját , beleértve a Tomcat Web Server alapértelmezett konfigurációját is.
Emellett vannak bizonyos átalakítások is, amelyek a Tomcat-eloszlás server.xml felül vannak alkalmazva a kezdéskor. Ezek a Csatlakozás or, a Gazdagép és a Szelep beállításaira való átalakítások.
Vegye figyelembe, hogy a Tomcat legújabb verziói server.xml (8.5.58-at és 9.0.38-at) használnak. A Tomcat régebbi verziói nem használnak átalakításokat, és ennek következtében eltérő viselkedésük lehet.
Összekötő
<Connector port="${port.http}" address="127.0.0.1" maxHttpHeaderSize="16384" compression="on" URIEncoding="UTF-8" connectionTimeout="${site.connectionTimeout}" maxThreads="${catalina.maxThreads}" maxConnections="${catalina.maxConnections}" protocol="HTTP/1.1" redirectPort="8443"/>
maxHttpHeaderSize
a következőre van állítva:16384
URIEncoding
a következőre van állítva:UTF-8
conectionTimeout
értékreWEBSITE_TOMCAT_CONNECTION_TIMEOUT
van állítva, amely alapértelmezés szerint a következő:240000
maxThreads
értékreWEBSITE_CATALINA_MAXTHREADS
van állítva, amely alapértelmezés szerint a következő:200
maxConnections
értékreWEBSITE_CATALINA_MAXCONNECTIONS
van állítva, amely alapértelmezés szerint a következő:10000
Feljegyzés
A connectionTimeout, a maxThreads és a max Csatlakozás ions beállítások alkalmazásbeállításokkal hangolhatók
Az alábbiakban példa cli-parancsokat láthat, amelyekkel módosíthatja a conectionTimeout, a maxThreads vagy a max Csatlakozás ions értékét:
az webapp config appsettings set --resource-group myResourceGroup --name myApp --settings WEBSITE_TOMCAT_CONNECTION_TIMEOUT=120000
az webapp config appsettings set --resource-group myResourceGroup --name myApp --settings WEBSITE_CATALINA_MAXTHREADS=100
az webapp config appsettings set --resource-group myResourceGroup --name myApp --settings WEBSITE_CATALINA_MAXCONNECTIONS=5000
- Csatlakozás or a tároló címét használja a 127.0.0.1 helyett
Gazdagép
<Host appBase="${site.appbase}" xmlBase="${site.xmlbase}" unpackWARs="${site.unpackwars}" workDir="${site.tempdir}" errorReportValveClass="com.microsoft.azure.appservice.AppServiceErrorReportValve" name="localhost" autoDeploy="true">
appBase
értékreAZURE_SITE_APP_BASE
van állítva, amely alapértelmezés szerint helyiWebappsLocalPath
xmlBase
értékreAZURE_SITE_HOME
van állítva, amely alapértelmezés szerint a következő:/site/wwwroot
unpackWARs
értékreAZURE_UNPACK_WARS
van állítva, amely alapértelmezés szerint a következő:true
workDir
az alapértelmezett értékreJAVA_TMP_DIR
van állítvaTMP
errorReportValveClass
egyéni hibajelentési szelepet használ
Szelep
<Valve prefix="site_access_log.${catalina.instance.name}" pattern="%h %l %u %t "%r" %s %b %D %{x-arr-log-id}i" directory="${site.logdir}/http/RawLogs" maxDays="${site.logRetentionDays}" className="org.apache.catalina.valves.AccessLogValve" suffix=".txt"/>
directory
értékreAZURE_LOGGING_DIR
van állítva, amely alapértelmezés szerint a következő:home\logFiles
maxDays
WEBSITE_HTTPLOGGING_RETENTION_DAYS
az , amely alapértelmezés szerint0
[forever]
Linuxon ugyanazzal a testreszabással rendelkezik, plusz:
- Hiba- és jelentéskészítési oldalakat ad hozzá a szelephez:
<xsl:attribute name="appServiceErrorPage">
<xsl:value-of select="'${appService.valves.appServiceErrorPage}'"/>
</xsl:attribute>
<xsl:attribute name="showReport">
<xsl:value-of select="'${catalina.valves.showReport}'"/>
</xsl:attribute>
<xsl:attribute name="showServerInfo">
<xsl:value-of select="'${catalina.valves.showServerInfo}'"/>
</xsl:attribute>
Következő lépések
Látogasson el az Azure for Java Fejlesztői központba az Azure rövid útmutatóihoz, oktatóanyagaihoz és Java-referenciadokumentációihoz.