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 স্ট্যাকের সমস্ত অনুরাগীদের জন্য, বিশেষ করে যারা স্প্রিং ফ্রেমওয়ার্ক পছন্দ করেন, এটি আপনার জন্য, অনুগ্রহ করে পড়ুন।


BTW, কেন আপনি একটি অ্যাপ্লিকেশন সার্ভারে একটি স্প্রিং বুট অ্যাপ্লিকেশন স্থাপন করতে হবে যখন এটি স্বাধীনভাবে চলতে পারে? সর্বোপরি, এটি স্প্রিং বুটের স্ট্যান্ডআউট বৈশিষ্ট্যগুলির মধ্যে একটি।


এবং তাই, এর জন্য বেশ কয়েকটি কারণ থাকতে পারে:

  1. আপনার কাছে ইতিমধ্যেই গ্লাসফিশ বা অন্য EE অ্যাপ্লিকেশন সার্ভারে অ্যাপ্লিকেশন স্থাপনের জন্য অবকাঠামো সেট আপ করা থাকতে পারে। এই ক্ষেত্রে, EE অ্যাপ্লিকেশন সার্ভার ইনস্টল, কনফিগার করা এবং সম্পূর্ণরূপে সমর্থিত। এমনকি যদি অ্যাপ্লিকেশনটি স্বাধীনভাবে চলতে পারে, যেমন এটি স্প্রিং বুটের সাথে করে, আপনাকে এখনও স্থাপনা এবং রানটাইমের জন্য পরিকাঠামো প্রস্তুত এবং বজায় রাখতে হবে।
  2. আপনি জানেন যে কিছুক্ষণ পরে আপনি অ্যাপ্লিকেশন সার্ভার ত্যাগ করতে শুরু করবেন এবং তাই আগাম প্রযুক্তি ব্যবহার করা শুরু করবেন যা আপনি ভবিষ্যতে ব্যবহার করবেন বর্তমান পরিবেশে এটি ব্যবহারের সম্ভাবনা সহ।
  3. দলে ভিন্ন অভিজ্ঞতা ও দক্ষতা
  4. পরীক্ষা এবং অনুমান পরীক্ষা

জাভা 8

Java 8 18 ই মার্চ 2014-এ প্রকাশিত হয়েছিল এবং মাইলস্টোন বৈশিষ্ট্য নিয়ে এসেছিল যা আমরা আজ অবধি ব্যবহার করি।

উদাহরণের জন্য আমাকে বেশিদূর যেতে হবে না, এখানে তাদের মধ্যে কয়েকটি রয়েছে:

  • ল্যাম্বডা এক্সপ্রেশন

  • স্ট্রিম API

  • ঐচ্ছিক ক্লাস

  • java.time প্যাকেজ (তারিখ এবং সময় API)

  • ইত্যাদি ইত্যাদি


তারপর থেকে, আজ পর্যন্ত তিনটি LTS সংস্করণ প্রকাশিত হয়েছে ( 19/08/2024 ):

  • Java SE 11(55) - 25ই সেপ্টেম্বর 2018
  • Java SE 17(61) - 14ই সেপ্টেম্বর 2021
  • Java SE 21(65) - 19ই সেপ্টেম্বর 2023


নিউ রিলিক দ্বারা পরিচালিত একটি সমীক্ষা অনুসারে, জাভা 8 এখনও বর্তমান প্রকল্পগুলির 28.8% এ ব্যবহৃত হয়, যা আপনি সম্মত হবেন, তা তুচ্ছ নয়। যদিও এটির ভাগ ধীরে ধীরে বছরের পর বছর কমছে, তবে এই প্রযুক্তিটিকে পুরোপুরি খারিজ করা অবশ্যই খুব তাড়াতাড়ি।

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

গ্লাসফিশ 4.1.2

Eclipse GlassFish-এর জন্য নিবেদিত প্রজেক্ট Eclipse ওয়েবসাইট অনুসারে:


Eclipse GlassFish® হল একটি সম্পূর্ণ অ্যাপ্লিকেশন সার্ভার যা জাকার্তা EE স্পেসিফিকেশন প্রয়োগ করে। GlassFish সমস্ত প্রয়োজনীয় এবং ঐচ্ছিক জাকার্তা EE API-এর বাস্তবায়ন অন্তর্ভুক্ত করে এবং সমস্ত জাকার্তা EE TCKs পাস করে। GlassFish-এ একটি সম্পূর্ণ অ্যাডমিনিস্ট্রেশন কনসোল, ক্লাস্টারিং সাপোর্ট এবং অন্যান্য ডেভেলপার এবং প্রোডাকশন ফোকাস টুলস এবং ফিচারও রয়েছে।


দুর্ভাগ্যবশত, 5.1.0-এর চেয়ে কম বয়সী এই ওয়েবসাইট সংস্করণ থেকে ডাউনলোড করা সম্ভব নয়, কিন্তু যেহেতু আমরা পঞ্চম সংস্করণের নিচের সংস্করণটি ব্যবহার করার সিদ্ধান্ত নিয়েছি, তাই আমাদের ওরাকল ওয়েবসাইটে যেতে হবে, যেখানে আপনি এই পণ্যটির আগের বেশ কয়েকটি সংস্করণ খুঁজে পাবেন ডাউনলোড বিভাগ। কিন্তু লাইসেন্সের ব্যাপারে সতর্ক থাকুন এবং আপনার স্যান্ডবক্সের বাইরে এই ফোল্ডার থেকে কিছু ব্যবহার করবেন না।


বিতরণ ফাইলটি আপনার মেশিনে কোথাও রাখুন, bin ফোল্ডারে নেভিগেট করুন এবং নিম্নলিখিত কমান্ডটি চালান:

 ./asadmin start-domain --verbose


কিছুক্ষণ অপেক্ষা করুন, এবং http://localhost:4848/ খোলার চেষ্টা করুন, অ্যাডমিন কনসোলটি ডিফল্টরূপে উপলব্ধ হওয়া উচিত এবং কোনো ধরনের শংসাপত্রের জন্য জিজ্ঞাসা করা উচিত নয়। বাম প্যানেলে, আপনি অ্যাপ্লিকেশন ট্যাবটি পাবেন, যদি আপনি এটিতে ক্লিক করেন, আপনার কাছে একটি মেনুতে অ্যাক্সেস থাকবে যার সাহায্যে আপনি অ্যাপ্লিকেশনগুলিকে স্থাপন, স্থাপন, সক্ষম এবং নিষ্ক্রিয় করতে পারবেন।


আপনার অ্যাপ্লিকেশনটি সেখানে স্থাপন করার চেষ্টা করার জন্য এই মুহূর্তে গ্লাসফিশ সম্পর্কে আপনার এতটুকুই জানা দরকার৷

স্প্রিং বুট 2

ওয়েব ডেভেলপমেন্টের জগতে এমন একজনকে খুঁজে পাওয়া সম্ভবত বেশ কঠিন যে এই জনপ্রিয় ফ্রেমওয়ার্কের কথা অন্তত একবার শুনেননি।

স্প্রিং বুট 2 2021 সালে প্রকাশিত হয়েছিল এবং সংস্করণ 3 এর বিপরীতে ন্যূনতম সংস্করণ হিসাবে Java 8 এর প্রয়োজন হয় যার ন্যূনতম সংস্করণ হিসাবে Java 17 প্রয়োজন


সর্বশেষ বৈশিষ্ট্য, নিরাপত্তা প্যাচ এবং কিছু অপ্টিমাইজেশান ব্যবহার করতে সক্ষম হতে আমাদের জাভা 8 সমর্থন করে এমন সর্বশেষ সংস্করণটি খুঁজে বের করতে হবে।


এবং এখানে, 2.7.18, তাদের ব্লগ অনুসারে, 2.7.18 সমর্থন স্প্রিং বুট 2.x এর সর্বশেষ সংস্করণে পরিণত হয়েছে এবং সেই অনুযায়ী Java 8 এবং Java 11:

5.5 বছর এবং 121 রিলিজের পর, 2.7.18 স্প্রিং বুট 2.x এর জন্য ওপেন সোর্স সমর্থনের সমাপ্তি চিহ্নিত করে। যত তাড়াতাড়ি সম্ভব স্প্রিং বুট 3 এ আপগ্রেড করুন। আপনি যদি এখনও আপগ্রেড করতে প্রস্তুত না হন, তাহলে Spring Boot 2.7.x-এর জন্য বাণিজ্যিক সমর্থন উপলব্ধ

তাদের একসাথে ব্যবহার করা শুরু

পূর্বশর্ত:

  • জাভা 8
  • গ্লাসফিশ 4.1.2
  • স্প্রিং বুট 2.7.18
  • মাভেন


স্প্রিং বুট সম্প্রদায় ইই পরিবেশ + অফিসিয়াল ডকুমেন্টেশনে স্প্রিং বুট অ্যাপ্লিকেশন চালানোর বিষয়ে সুপারিশ প্রদান করে

pom.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-প্রদত্ত ফলের আর্টিফ্যাক্টের মধ্যে। ফলস্বরূপ আর্টিফ্যাক্ট চালানোর জন্য আপনার কাছে এখন কমপক্ষে তিনটি বিকল্প রয়েছে:


নিম্নলিখিত নির্ভরতাগুলি বাদ দিলে আমাদের ফলে আর্টিফ্যাক্ট আকার হ্রাস করতে দেয়:


 <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 কনফিগার(SpringApplicationBuilder বিল্ডার) পদ্ধতি


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


স্থাপনার বর্ণনাকারী

এবং শেষ কিন্তু অন্তত নয়, আপনাকে ডিপ্লয়মেন্ট বর্ণনাকারী যোগ করতে হবে

সুতরাং, প্রধান → 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. শুভকামনা



গিটহাব

লিঙ্কডইন