paint-brush
भविष्य की ओर वापसी: जावा 8 का उपयोग करके ग्लासफिश 4 में स्प्रिंग बूट 2 चलानाद्वारा@isharipov
332 रीडिंग
332 रीडिंग

भविष्य की ओर वापसी: जावा 8 का उपयोग करके ग्लासफिश 4 में स्प्रिंग बूट 2 चलाना

द्वारा ILia Sharipov8m2024/08/26
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

हर डेवलपर आधुनिक तकनीकों के साथ काम करने और अप-टू-डेट रहने का सपना देखता है। वास्तव में, पुरानी, अप्रचलित और अक्सर अप्रभावी तकनीकों के इर्द-गिर्द एक मजबूत भर्ती रणनीति बनाना लगभग असंभव है। स्प्रिंग बूट का उपयोग एप्लिकेशन सर्वर पर एप्लिकेशन को तैनात करने के लिए किया जा सकता है जब यह स्वतंत्र रूप से चल सकता है। जावा 8 का उपयोग अभी भी 28% मौजूदा परियोजनाओं में किया जाता है।
featured image - भविष्य की ओर वापसी: जावा 8 का उपयोग करके ग्लासफिश 4 में स्प्रिंग बूट 2 चलाना
ILia Sharipov HackerNoon profile picture
0-item

इनकार, क्रोध, सौदेबाजी, अवसाद...

हर डेवलपर आधुनिक तकनीकों के साथ काम करने और अप-टू-डेट रहने का सपना देखता है। वास्तव में, पुरानी, अप्रचलित और अक्सर अप्रभावी और यहां तक कि अभी भी जन्मी हुई तकनीकों के इर्द-गिर्द एक मजबूत भर्ती रणनीति बनाना लगभग असंभव है।


हालाँकि, जीवन जटिल है, और सब कुछ हमेशा हमारी इच्छाओं पर निर्भर नहीं होता।


आपको पदोन्नति की पेशकश की जा सकती है और ऐसे प्रोजेक्ट में स्थानांतरित किया जा सकता है, जहाँ तकनीकें वर्षों से नहीं बदली या अपडेट नहीं की गई हैं। या, आपको अपनी पसंदीदा कंपनी में नौकरी मिल सकती है, जहाँ वर्तमान तकनीक स्टैक में फिलहाल आपकी कोई खास दिलचस्पी नहीं है। शायद आपने अभी-अभी विश्वविद्यालय से स्नातक किया है और अपना पहला कार्य अनुभव प्राप्त करने के लिए उत्सुक हैं, या शायद आपको अपनी पिछली नौकरी से निकाल दिया गया है और वित्तीय कठिनाई से बचने के लिए आपको जल्दी से कोई नई नौकरी ढूँढ़ने की ज़रूरत है।


एक अन्य परिदृश्य भी है: साक्षात्कार के दौरान, आपको बताया जाता है कि आप वर्तमान स्टैक के साथ काम करना शुरू करेंगे, लेकिन भविष्य में बदलाव करने के लिए आपके पास बहुत सारे अवसर होंगे - शायद, संभवतः, लेकिन...


स्वीकृति...

लेकिन ईमानदारी से कहें तो यह सब सिर्फ़ दर्शनशास्त्र है। मैं सहमत हूँ, और मेरा प्रस्ताव है कि हम एक वास्तविक मामले का विश्लेषण करें जिसका सामना आपको अपने चुनौतीपूर्ण करियर पथ पर करना पड़ सकता है।


JVM स्टैक के सभी प्रशंसकों के लिए, विशेष रूप से जो स्प्रिंग फ्रेमवर्क को पसंद करते हैं, यह आपके लिए है, कृपया आगे पढ़ें।


वैसे, आपको स्प्रिंग बूट एप्लीकेशन को एप्लीकेशन सर्वर पर तैनात करने की क्या जरूरत है, जब यह स्वतंत्र रूप से चल सकता है? आखिरकार, यह स्प्रिंग बूट की सबसे बेहतरीन विशेषताओं में से एक है।


और इसलिए, इसके कई कारण हो सकते हैं:

  1. हो सकता है कि आपके पास GlassFish या किसी अन्य EE एप्लीकेशन सर्वर में एप्लिकेशन को तैनात करने के लिए पहले से ही बुनियादी ढांचा हो। इस मामले में, EE एप्लीकेशन सर्वर स्थापित, कॉन्फ़िगर और पूरी तरह से समर्थित है। भले ही एप्लिकेशन स्वतंत्र रूप से चल सकता है, जैसा कि यह स्प्रिंग बूट के साथ करता है, फिर भी आपको तैनाती और रनटाइम के लिए बुनियादी ढांचे को तैयार करने और बनाए रखने की आवश्यकता होगी।
  2. आप जानते हैं कि कुछ समय बाद आप एप्लीकेशन सर्वर को छोड़ना शुरू कर देंगे और इसलिए उस तकनीक का पहले से ही उपयोग करना शुरू कर देंगे जिसका उपयोग आप भविष्य में वर्तमान वातावरण में उपयोग करने की संभावना के साथ करेंगे।
  3. टीम में अलग-अलग अनुभव और विशेषज्ञता
  4. प्रयोग और परिकल्पना परीक्षण

जावा 8

जावा 8 को 18 मार्च 2014 को जारी किया गया और इसमें कुछ महत्वपूर्ण विशेषताएं शामिल की गईं जिनका उपयोग हम आज भी करते हैं।

मुझे उदाहरणों के लिए ज्यादा दूर जाने की जरूरत नहीं है, यहां उनमें से कुछ उदाहरण दिए गए हैं:

  • लैम्ब्डा एक्सप्रेशंस

  • स्ट्रीम एपीआई

  • वैकल्पिक कक्षा

  • java.time पैकेज (दिनांक और समय API)

  • आदि आदि


तब से लेकर आज तक तीन LTS संस्करण जारी किए जा चुके हैं( 19/08/2024 ):

  • जावा SE 11(55) - 25 सितंबर 2018
  • जावा SE 17(61) - 14 सितंबर 2021
  • जावा एसई 21(65) - 19 सितंबर 2023


न्यू रेलिक द्वारा किए गए एक अध्ययन के अनुसार, जावा 8 का उपयोग अभी भी 28.8% मौजूदा परियोजनाओं में किया जाता है, जो कि, जैसा कि आप सहमत होंगे, महत्वहीन नहीं है। जबकि इसका हिस्सा साल दर साल धीरे-धीरे कम होता जा रहा है, निश्चित रूप से इस तकनीक को पूरी तरह से खारिज करना जल्दबाजी होगी।

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

ग्लासफिश 4.1.2

एक्लिप्स ग्लासफिश को समर्पित प्रोजेक्ट एक्लिप्स वेबसाइट के अनुसार:


एक्लिप्स ग्लासफिश® एक पूर्ण एप्लिकेशन सर्वर है जो जकार्ता ईई विनिर्देश को लागू करता है। ग्लासफिश में सभी आवश्यक और वैकल्पिक जकार्ता ईई एपीआई के कार्यान्वयन शामिल हैं, और सभी जकार्ता ईई टीसीके को पास करता है। ग्लासफिश में एक पूर्ण प्रशासन कंसोल, क्लस्टरिंग समर्थन और अन्य डेवलपर और उत्पादन केंद्रित उपकरण और सुविधाएँ भी शामिल हैं।


दुर्भाग्य से, इस वेबसाइट से 5.1.0 से कम के संस्करण को डाउनलोड करना संभव नहीं है, लेकिन चूंकि हमने पांचवें से नीचे के संस्करण का उपयोग करने का फैसला किया है, इसलिए हमें Oracle वेबसाइट पर जाना होगा, जहाँ आप डाउनलोड अनुभाग में इस उत्पाद के कई पुराने संस्करण पा सकते हैं। लेकिन लाइसेंस के साथ सावधान रहें और अपने सैंडबॉक्स के बाहर इस फ़ोल्डर से कुछ भी उपयोग न करें।


बस वितरण फ़ाइल को अपनी मशीन पर कहीं रखें, bin फ़ोल्डर पर जाएँ, और निम्नलिखित कमांड चलाएँ:

 ./asadmin start-domain --verbose


थोड़ी देर प्रतीक्षा करें, और http://localhost:4848/ खोलने का प्रयास करें, एडमिन कंसोल डिफ़ॉल्ट रूप से उपलब्ध होना चाहिए और किसी भी प्रकार के क्रेडेंशियल्स के लिए नहीं पूछना चाहिए। बाएं पैनल पर, आपको एप्लिकेशन टैब मिलेगा, यदि आप उस पर क्लिक करते हैं, तो आपके पास एक मेनू तक पहुंच होगी जिसके साथ आप एप्लिकेशन को तैनात, अनडिप्लॉय, सक्षम और अक्षम कर सकते हैं।


ग्लासफिश पर अपना एप्लिकेशन तैनात करने के लिए आपको इस समय बस इतना ही जानना होगा।

स्प्रिंग बूट 2

वेब डेवलपमेंट की दुनिया में शायद ऐसा कोई व्यक्ति मिलना मुश्किल है जिसने कम से कम एक बार इस लोकप्रिय फ्रेमवर्क के बारे में न सुना हो।

स्प्रिंग बूट 2 को 2021 में जारी किया गया था और इसके लिए न्यूनतम संस्करण के रूप में जावा 8 की आवश्यकता होती है, जबकि संस्करण 3 के लिए न्यूनतम संस्करण के रूप में जावा 17 की आवश्यकता होती है


नवीनतम सुविधाओं, सुरक्षा पैच और कुछ अनुकूलन का उपयोग करने में सक्षम होने के लिए हमें जावा 8 का समर्थन करने वाला नवीनतम संस्करण खोजना होगा।


और यहाँ यह है, 2.7.18, उनके ब्लॉग के अनुसार, 2.7.18 स्प्रिंग बूट 2.x और तदनुसार जावा 8 और जावा 11 का समर्थन करने वाला नवीनतम संस्करण बन गया:

5.5 साल और 121 रिलीज़ के बाद, 2.7.18 स्प्रिंग बूट 2.x के लिए ओपन सोर्स सपोर्ट का अंत दर्शाता है। कृपया जल्द से जल्द स्प्रिंग बूट 3 में अपग्रेड करें। यदि आप अभी भी अपग्रेड करने के लिए तैयार नहीं हैं, तो स्प्रिंग बूट 2.7.x के लिए व्यावसायिक समर्थन उपलब्ध है

इन्हें एक साथ उपयोग करना शुरू करें

पूर्वापेक्षाएँ:

  • जावा 8
  • ग्लासफिश 4.1.2
  • स्प्रिंग बूट 2.7.18
  • मावेन


स्प्रिंग बूट समुदाय ईई वातावरण में स्प्रिंग बूट एप्लिकेशन को चलाने के तरीके पर सिफारिशें प्रदान करता है + आधिकारिक दस्तावेज़

पोम.xml

अनुप्रयोग के निर्माण और चलाने के लिए न्यूनतम और पर्याप्त pom.xml निम्न प्रकार दिखाई देगा:


 <?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>


यहां आपको दो बातों पर ध्यान देने की जरूरत है:

  1. मैं एप्लिकेशन को एक वॉर फ़ाइल के रूप में पैकेज कर रहा हूं ताकि एप्लिकेशन सर्वर को यह स्पष्ट हो सके कि मैं एक वेब एप्लिकेशन तैनात कर रहा हूं


     <packaging>war</packaging>


  1. मैं एम्बेडेड टॉमकैट को छोड़कर स्प्रिंग-बूट-स्टार्टर-टॉमकैट निर्भरता को जोड़ रहा हूं, दो आंतरिक निर्भरताओं को छोड़कर और प्रदान किए गए दायरे को जोड़ रहा हूं


     <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>


यह दृष्टिकोण आपको टॉमकैट को शामिल करने और इसे केवल स्प्रिंग बूट रनटाइम के लिए उपलब्ध कराने की अनुमति देता है, जिससे आप एप्लिकेशन को एप्लिकेशन सर्वर से स्वतंत्र रूप से चला सकते हैं। यह पृथक्करण महत्वपूर्ण है। स्प्रिंग इस निर्भरता को परिणामी आर्टिफैक्ट के भीतर lib-provided नामक एक अलग फ़ोल्डर में रखता है। अब आपके पास परिणामी आर्टिफैक्ट को चलाने के लिए कम से कम तीन विकल्प हैं:


  • ग्लासफिश पर तैनात करें - मूलतः, किसी एप्लिकेशन को तैनात करने के तीन तरीके हैं :
    • ग्लासफिश एडमिन GUI
    • अपनी आर्काइव फ़ाइल को domain-dir/autodeploy के अंतर्गत autodeploy निर्देशिका में कॉपी करें
    • asadmin API - तैनाती आदेश
  • java -jar का उपयोग करके चलाएँ: spring-boot-maven-plugin दो आर्टिफैक्ट बनाता है - war और war.original । सरल war में lib-provided शामिल है, original में नहीं।
  • अपने पसंदीदा IDE में एप्लिकेशन प्रारंभ करें - IntelliJ IDEA सामुदायिक संस्करण के लिए आपको रन/डीबग कॉन्फ़िगरेशन के अंतर्गत निम्नलिखित विकल्प जोड़ना होगा

निम्नलिखित निर्भरताओं को बाहर करने से हम परिणामी आर्टिफैक्ट आकार को कम कर सकते हैं:


 <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>


आवेदन वर्ग

एप्लिकेशन सर्वर पर स्प्रिंग बूट एप्लिकेशन चलाने के लिए, आपको मुख्य एप्लिकेशन क्लास में दो संशोधन करने होंगे।

आमतौर पर, एक सरल वेब अनुप्रयोग स्थापित करने के लिए, आप एक main विधि के साथ एक सार्वजनिक वर्ग बनाएंगे, और इसे @SpringBootApplication एनोटेशन के साथ एनोटेट करेंगे।


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


तो, जैसा कि मैंने ऊपर बताया, दो संशोधन:


  1. SpringBootServletInitializer से एप्लीकेशन क्लास प्राप्त करें
  2. संरक्षित SpringApplicationBuilder configure(SpringApplicationBuilder builder) विधि को ओवरराइड करें


 @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); } }


परिनियोजन विवरण

और अंतिम लेकिन महत्वपूर्ण बात, आपको परिनियोजन विवरण जोड़ने की आवश्यकता है

तो, main → src → webapp → WEB-INF फ़ोल्डर के अंतर्गत आपको निम्न फ़ाइल डालनी होगी - 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>


परिनियोजन विवरण के बारे में अधिक पढ़ें

क्लास लोडर डेलिगेशन के बारे में अधिक पढ़ें

ऊपर लपेटकर

  1. पुरानी तकनीकों का उपयोग करने से न डरें
  2. जिज्ञासु बने रहें और अपने कौशल का विकास करते रहें
  3. आपको कामयाबी मिले



GitHub

Linkedin