paint-brush
Geleceğe Dönüş: Java 8 Kullanarak GlassFish 4'te Spring Boot 2'yi Çalıştırmaile@isharipov
268 okumalar

Geleceğe Dönüş: Java 8 Kullanarak GlassFish 4'te Spring Boot 2'yi Çalıştırma

ile ILia Sharipov8m2024/08/26
Read on Terminal Reader

Çok uzun; Okumak

Her geliştirici modern teknolojilerle çalışmayı ve güncel kalmayı hayal eder. Aslında, eski, demode ve genellikle etkisiz teknolojiler etrafında güçlü bir işe alım stratejisi oluşturmak neredeyse imkansızdır. Spring Boot, bağımsız olarak çalışabildiğinde bir uygulama sunucusunda uygulamaları dağıtmak için kullanılabilir. Java 8, mevcut projelerin %28'inde hala kullanılmaktadır.
featured image - Geleceğe Dönüş: Java 8 Kullanarak GlassFish 4'te Spring Boot 2'yi Çalıştırma
ILia Sharipov HackerNoon profile picture
0-item

İnkar, Öfke, Pazarlık, Depresyon…

Her geliştirici modern teknolojilerle çalışmayı ve güncel kalmayı hayal eder. Aslında, eski, modası geçmiş ve genellikle etkisiz ve hatta ölü doğmuş teknolojiler etrafında güçlü bir işe alım stratejisi oluşturmak neredeyse imkansızdır.


Ancak hayat karmaşıktır ve her şey her zaman bizim isteklerimize bağlı değildir.


Size terfi teklif edilebilir ve teknolojilerin yıllardır değişmediği veya güncellenmediği bir projeye transfer edilebilirsiniz. Ya da, şu anda mevcut teknoloji yığınının sizi özellikle ilgilendirmediği hayalinizdeki şirkette bir işe girebilirsiniz. Belki de üniversiteden yeni mezun oldunuz ve ilk iş deneyiminizi kazanmak için can atıyorsunuz veya belki de önceki işinizden çıkarıldınız ve finansal zorluktan kaçınmak için hemen bir şeyler bulmanız gerekiyor.


Bir de şu senaryo var: Mülakat sırasında, mevcut yığınla çalışmaya başlayacağınız ancak gelecekte değişiklikler yapmak için bolca fırsatınız olacağı söyleniyor - belki, muhtemelen, ama...


Kabul…

Ama dürüst olalım, bunların hepsi sadece felsefe. Katılıyorum ve zorlu kariyer yolunuzda karşılaşabileceğiniz gerçek bir vakayı analiz etmemizi öneriyorum.


JVM yığınının tüm hayranları, özellikle Spring Framework'ü sevenler için, lütfen okumaya devam edin.


BTW, bağımsız olarak çalışabiliyorken bir Spring Boot uygulamasını bir uygulama sunucusuna dağıtmanız neden gereksin ki? Sonuçta, bu Spring Boot'un öne çıkan özelliklerinden biridir.


Ve bunun birkaç nedeni olabilir:

  1. GlassFish'te veya başka bir EE Uygulama Sunucusunda uygulamaları dağıtmak için altyapıyı zaten kurmuş olabilirsiniz. Bu durumda, EE Uygulama Sunucusu kurulur, yapılandırılır ve tam olarak desteklenir. Uygulama, Spring Boot ile yaptığı gibi bağımsız olarak çalışabilse bile, dağıtım ve çalışma zamanı için altyapıyı hazırlamanız ve sürdürmeniz gerekecektir.
  2. Bir süre sonra uygulama sunucusunu terk etmeye başlayacağınızı ve dolayısıyla gelecekte kullanacağınız teknolojiyi mevcut ortamda kullanma olasılığıyla önceden kullanmaya başlayacağınızı biliyorsunuz
  3. Ekipte farklı deneyim ve uzmanlıklar
  4. Deneyler ve hipotez testleri

Java 8

Java 8, 18 Mart 2014'te yayımlandı ve bugün bile kullandığımız önemli özellikleri beraberinde getirdi.

Örnekler için çok uzağa gitmeme gerek yok, işte birkaçı:

  • Lambda İfadeleri

  • Akış API'si

  • İsteğe bağlı sınıf

  • java.time Paketi (Tarih ve Saat API'si)

  • vb vb


O tarihten bu güne kadar üç LTS sürümü yayınlandı ( 19/08/2024 ):

  • Java SE 11(55) - 25 Eylül 2018
  • Java SE 17(61) - 14 Eylül 2021
  • Java SE 21(65) - 19 Eylül 2023


New Relic tarafından yürütülen bir araştırmaya göre, Java 8 hala mevcut projelerin %28,8'inde kullanılıyor ve kabul edeceğiniz gibi bu önemsiz bir oran değil. Payı her geçen yıl giderek azalsa da, bu teknolojiyi tamamen reddetmek için henüz çok erken.

https://newrelic.com/resources/report/2024-state-of-the-java-ecosystem

CamBalık 4.1.2

Eclipse GlassFish'e özel Project Eclipse web sitesine göre:


Eclipse GlassFish®, Jakarta EE spesifikasyonunu uygulayan eksiksiz bir uygulama sunucusudur. GlassFish, tüm gerekli ve isteğe bağlı Jakarta EE API'lerinin uygulamalarını içerir ve tüm Jakarta EE TCK'lerini geçer. GlassFish ayrıca eksiksiz bir yönetim konsolu, kümeleme desteği ve diğer geliştirici ve üretim odaklı araçlar ve özellikler içerir.


Maalesef, bu web sitesinden 5.1.0'dan daha düşük bir sürümü indirmek mümkün değil, ancak beşinci sürümün altındaki sürümü kullanmaya karar verdiğimizden, bu ürünün birkaç önceki sürümünü İndirmeler bölümünde bulabileceğiniz Oracle web sitesine gitmemiz gerekecek. Ancak lisansa dikkat edin ve bu klasörden sandbox'ınızın dışında hiçbir şey kullanmayın.


Dağıtım dosyasını makinenizin herhangi bir yerine yerleştirin, bin klasörüne gidin ve aşağıdaki komutu çalıştırın:

 ./asadmin start-domain --verbose


Bir süre bekleyin ve http://localhost:4848/ adresini açmayı deneyin, Yönetici Konsolu varsayılan olarak kullanılabilir olmalı ve herhangi bir kimlik bilgisi istememelidir. Sol panelde Uygulamalar sekmesini bulacaksınız, üzerine tıklarsanız uygulamaları dağıtabileceğiniz, dağıtımı kaldırabileceğiniz, etkinleştirebileceğiniz ve devre dışı bırakabileceğiniz bir menüye erişebileceksiniz.


Uygulamanızı GlassFish'te dağıtmak için şu anda bilmeniz gereken her şey bu kadar.

Bahar Önyükleme 2

Web geliştirme dünyasında bu popüler framework'ü en azından bir kere duymamış birini bulmak muhtemelen oldukça zordur.

Spring Boot 2, 2021 yılında piyasaya sürüldü ve sürüm 3'ün minimum Java 17 sürümünü gerektirmesinin aksine, minimum Java 8 sürümünü gerektiriyor.


En son özellikleri, güvenlik yamalarını ve bazı optimizasyonları kullanabilmek için Java 8'i destekleyen son sürümü bulmamız gerekiyor.


Ve işte karşınızda, 2.7.18, bloglarına göre, 2.7.18 Spring Boot 2.x'i ve buna bağlı olarak Java 8 ve Java 11'i destekleyen en son sürüm oldu:

5,5 yıl ve 121 sürümün ardından 2.7.18, Spring Boot 2.x için açık kaynak desteğinin sonunu işaret ediyor. Lütfen en kısa sürede Spring Boot 3'e yükseltin. Henüz yükseltmeye hazır değilseniz, Spring Boot 2.7.x için ticari destek mevcuttur .

Bunları birlikte kullanmaya başlamak

Ön koşullar:

  • Java 8
  • CamBalık 4.1.2
  • Bahar Önyükleme 2.7.18
  • Usta


Spring Boot Topluluğu, Spring Boot Uygulamasının EE ortamında nasıl çalıştırılacağına dair öneriler sunar + Resmi Belgeler

pom.xml

Uygulamayı derlemek ve çalıştırmak için gereken minimum ve yeterli pom.xml aşağıdaki gibi olacaktır:


 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.18</version> <relativePath/> </parent> <groupId>io.github.isharipov</groupId> <artifactId>sb2-to-gf4</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <exclusions> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-el</artifactId> </exclusion> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-websocket</artifactId> </exclusion> </exclusions> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>


Burada iki şeye dikkat etmeniz gerekiyor:

  1. Uygulamayı bir savaş dosyası olarak paketliyorum, böylece uygulama sunucusuna bir web uygulaması dağıttığımı açıkça gösterebiliyorum


     <packaging>war</packaging>


  1. Yerleşik Tomcat'ı hariç tutuyorum, spring-boot-starter-tomcat bağımlılığını ekliyorum, iki dahili bağımlılığı hariç tutuyorum ve sağlanan kapsamı ekliyorum


     <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <exclusions> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-el</artifactId> </exclusion> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-websocket</artifactId> </exclusion> </exclusions> <scope>provided</scope> </dependency>


Bu yaklaşım, Tomcat'i eklemenize ve yalnızca Spring Boot çalışma zamanı için kullanılabilir hale getirmenize olanak tanır ve böylece uygulamayı uygulama sunucusundan bağımsız olarak çalıştırabilirsiniz. Bu ayrım önemlidir. Spring, bu bağımlılığı, ortaya çıkan yapıtın içinde lib-provided adlı ayrı bir klasöre yerleştirir. Artık ortaya çıkan yapıtı çalıştırmak için en az üç seçeneğiniz var:


  • GlassFish'e dağıtım - temel olarak, bir uygulamayı dağıtmanın üç yolu vardır :
    • GlassFish Yönetici GUI'si
    • Arşiv dosyanızı domain-dir/autodeploy altındaki autodeploy dizinine kopyalayın
    • asadmin API - komutu dağıt
  • java -jar kullanarak çalıştırın: spring-boot-maven-plugin iki eser oluşturur - war ve war.original . Basit war lib-provided içerir, original olanı içermez.
  • Uygulamayı favori IDE'nizde başlatın - IntelliJ IDEA Community Edition için Çalıştır/Hata Ayıklama Yapılandırması altında aşağıdaki seçeneği eklemeniz gerekir

Aşağıdaki bağımlılıkları hariç tutmak, ortaya çıkan yapıt boyutunu azaltmamızı sağlar:


 <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-el</artifactId> </exclusion> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-websocket</artifactId> </exclusion>


Uygulama Sınıfı

Bir Spring Boot uygulamasını bir uygulama sunucusunda çalıştırmak için ana uygulama sınıfında iki değişiklik yapmanız gerekir.

Genellikle, basit bir web uygulaması kurmak için, main metodu olan bir public sınıf oluşturur ve bunu @SpringBootApplication notasyonuyla notlandırırsınız.


 @SpringBootApplication public class Application { private static final Logger LOGGER = LoggerFactory.getLogger(Application.class); public static void main(String[] args) { SpringApplication.run(Application.class, args); } }


Yani yukarıda da belirttiğim gibi iki değişiklik:


  1. SpringBootServletInitializer'dan Uygulama sınıfını devral
  2. Korumalı SpringApplicationBuilder configure(SpringApplicationBuilder builder) metodunu geçersiz kıl


 @SpringBootApplication public class Application extends SpringBootServletInitializer { private static final Logger LOGGER = LoggerFactory.getLogger(Application.class); public static void main(String[] args) { LOGGER.debug("From main"); SpringApplication.run(Application.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { LOGGER.debug("From configure"); return application.sources(Application.class); } }


Dağıtım Tanımlayıcısı

Ve son olarak, Dağıtım Tanımlayıcısını eklemeniz gerekir

Yani, ana → src → webapp → WEB-INF klasörünün altına şu dosyayı koymanız gerekiyor - glassfish-web.xml :


 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> <glassfish-web-app> <class-loader delegate="false"/> <session-config> <session-manager/> </session-config> <jsp-config/> </glassfish-web-app>


Dağıtım Tanımlayıcısı hakkında daha fazla bilgi edinin

Sınıf Yükleyici Delegasyonu hakkında daha fazla bilgi edinin

Özetleme

  1. Eski teknolojileri kullanmaktan korkmayın
  2. Meraklı kalın ve becerilerinizi geliştirmeye devam edin
  3. İyi şanlar



GitHub

Linkedin