প্রতিটি বিকাশকারী আধুনিক প্রযুক্তির সাথে কাজ করার এবং আপ টু ডেট থাকার স্বপ্ন দেখে। প্রকৃতপক্ষে, পুরানো, অপ্রচলিত এবং প্রায়শই অকার্যকর এবং এমনকি মৃতপ্রায় প্রযুক্তির চারপাশে একটি শক্তিশালী নিয়োগের কৌশল তৈরি করা প্রায় অসম্ভব।
যাইহোক, জীবন জটিল, এবং সবকিছু সবসময় আমাদের ইচ্ছার উপর নির্ভর করে না।
আপনাকে একটি প্রচারের প্রস্তাব দেওয়া হতে পারে এবং এমন একটি প্রকল্পে স্থানান্তরিত করা হতে পারে যেখানে প্রযুক্তিগুলি কয়েক বছর ধরে পরিবর্তিত হয়নি বা আপডেট করা হয়নি। অথবা, আপনি আপনার স্বপ্নের কোম্পানিতে চাকরি পেতে পারেন, যেখানে বর্তমান প্রযুক্তি স্ট্যাক এই মুহূর্তে আপনাকে বিশেষভাবে আগ্রহী করে না। সম্ভবত আপনি সবেমাত্র বিশ্ববিদ্যালয় থেকে স্নাতক হয়েছেন এবং আপনার প্রথম কাজের অভিজ্ঞতা অর্জন করতে আগ্রহী, অথবা হয়ত আপনাকে আপনার আগের চাকরি থেকে ছাঁটাই করা হয়েছে এবং আর্থিক কষ্ট এড়াতে দ্রুত কিছু খুঁজে বের করতে হবে।
আরও একটি দৃশ্য রয়েছে: সাক্ষাত্কারের সময়, আপনাকে বলা হয়েছে যে আপনি বর্তমান স্ট্যাকের সাথে কাজ শুরু করবেন কিন্তু ভবিষ্যতে পরিবর্তন করার প্রচুর সুযোগ পাবেন—হয়তো, সম্ভবত, কিন্তু...
কিন্তু আসুন সৎ হতে, এই সব শুধু দর্শন. আমি সম্মত, এবং আমি প্রস্তাব করি যে আমরা একটি বাস্তব কেস বিশ্লেষণ করি যা আপনি আপনার চ্যালেঞ্জিং ক্যারিয়ারের পথে সম্মুখীন হতে পারেন।
JVM স্ট্যাকের সমস্ত অনুরাগীদের জন্য, বিশেষ করে যারা স্প্রিং ফ্রেমওয়ার্ক পছন্দ করেন, এটি আপনার জন্য, অনুগ্রহ করে পড়ুন।
BTW, কেন আপনি একটি অ্যাপ্লিকেশন সার্ভারে একটি স্প্রিং বুট অ্যাপ্লিকেশন স্থাপন করতে হবে যখন এটি স্বাধীনভাবে চলতে পারে? সর্বোপরি, এটি স্প্রিং বুটের স্ট্যান্ডআউট বৈশিষ্ট্যগুলির মধ্যে একটি।
এবং তাই, এর জন্য বেশ কয়েকটি কারণ থাকতে পারে:
Java 8 18 ই মার্চ 2014-এ প্রকাশিত হয়েছিল এবং মাইলস্টোন বৈশিষ্ট্য নিয়ে এসেছিল যা আমরা আজ অবধি ব্যবহার করি।
উদাহরণের জন্য আমাকে বেশিদূর যেতে হবে না, এখানে তাদের মধ্যে কয়েকটি রয়েছে:
ল্যাম্বডা এক্সপ্রেশন
স্ট্রিম API
ঐচ্ছিক ক্লাস
java.time প্যাকেজ (তারিখ এবং সময় API)
ইত্যাদি ইত্যাদি
তারপর থেকে, আজ পর্যন্ত তিনটি LTS সংস্করণ প্রকাশিত হয়েছে ( 19/08/2024 ):
নিউ রিলিক দ্বারা পরিচালিত একটি সমীক্ষা অনুসারে, জাভা 8 এখনও বর্তমান প্রকল্পগুলির 28.8% এ ব্যবহৃত হয়, যা আপনি সম্মত হবেন, তা তুচ্ছ নয়। যদিও এটির ভাগ ধীরে ধীরে বছরের পর বছর কমছে, তবে এই প্রযুক্তিটিকে পুরোপুরি খারিজ করা অবশ্যই খুব তাড়াতাড়ি।
Eclipse GlassFish-এর জন্য নিবেদিত প্রজেক্ট Eclipse ওয়েবসাইট অনুসারে:
Eclipse GlassFish® হল একটি সম্পূর্ণ অ্যাপ্লিকেশন সার্ভার যা জাকার্তা EE স্পেসিফিকেশন প্রয়োগ করে। GlassFish সমস্ত প্রয়োজনীয় এবং ঐচ্ছিক জাকার্তা EE API-এর বাস্তবায়ন অন্তর্ভুক্ত করে এবং সমস্ত জাকার্তা EE TCKs পাস করে। GlassFish-এ একটি সম্পূর্ণ অ্যাডমিনিস্ট্রেশন কনসোল, ক্লাস্টারিং সাপোর্ট এবং অন্যান্য ডেভেলপার এবং প্রোডাকশন ফোকাস টুলস এবং ফিচারও রয়েছে।
দুর্ভাগ্যবশত, 5.1.0-এর চেয়ে কম বয়সী এই ওয়েবসাইট সংস্করণ থেকে ডাউনলোড করা সম্ভব নয়, কিন্তু যেহেতু আমরা পঞ্চম সংস্করণের নিচের সংস্করণটি ব্যবহার করার সিদ্ধান্ত নিয়েছি, তাই আমাদের ওরাকল ওয়েবসাইটে যেতে হবে, যেখানে আপনি এই পণ্যটির আগের বেশ কয়েকটি সংস্করণ খুঁজে পাবেন ডাউনলোড বিভাগ। কিন্তু লাইসেন্সের ব্যাপারে সতর্ক থাকুন এবং আপনার স্যান্ডবক্সের বাইরে এই ফোল্ডার থেকে কিছু ব্যবহার করবেন না।
বিতরণ ফাইলটি আপনার মেশিনে কোথাও রাখুন, bin
ফোল্ডারে নেভিগেট করুন এবং নিম্নলিখিত কমান্ডটি চালান:
./asadmin start-domain --verbose
কিছুক্ষণ অপেক্ষা করুন, এবং http://localhost:4848/ খোলার চেষ্টা করুন, অ্যাডমিন কনসোলটি ডিফল্টরূপে উপলব্ধ হওয়া উচিত এবং কোনো ধরনের শংসাপত্রের জন্য জিজ্ঞাসা করা উচিত নয়। বাম প্যানেলে, আপনি অ্যাপ্লিকেশন ট্যাবটি পাবেন, যদি আপনি এটিতে ক্লিক করেন, আপনার কাছে একটি মেনুতে অ্যাক্সেস থাকবে যার সাহায্যে আপনি অ্যাপ্লিকেশনগুলিকে স্থাপন, স্থাপন, সক্ষম এবং নিষ্ক্রিয় করতে পারবেন।
আপনার অ্যাপ্লিকেশনটি সেখানে স্থাপন করার চেষ্টা করার জন্য এই মুহূর্তে গ্লাসফিশ সম্পর্কে আপনার এতটুকুই জানা দরকার৷
ওয়েব ডেভেলপমেন্টের জগতে এমন একজনকে খুঁজে পাওয়া সম্ভবত বেশ কঠিন যে এই জনপ্রিয় ফ্রেমওয়ার্কের কথা অন্তত একবার শুনেননি।
স্প্রিং বুট 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-এর জন্য বাণিজ্যিক সমর্থন উপলব্ধ ।
স্প্রিং বুট সম্প্রদায় ইই পরিবেশ + অফিসিয়াল ডকুমেন্টেশনে স্প্রিং বুট অ্যাপ্লিকেশন চালানোর বিষয়ে সুপারিশ প্রদান করে
অ্যাপ্লিকেশন তৈরি এবং চালানোর জন্য সর্বনিম্ন এবং পর্যাপ্ত 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>
এখানে আপনাকে দুটি বিষয়ে মনোযোগ দিতে হবে:
আমি অ্যাপ্লিকেশনটিকে একটি যুদ্ধ ফাইল হিসাবে প্যাকেজিং করছি যাতে অ্যাপ্লিকেশন সার্ভারে আমি একটি ওয়েব অ্যাপ্লিকেশন স্থাপন করছি তা স্পষ্ট করে দিতে
<packaging>war</packaging>
আমি এমবেডেড টমক্যাট বাদ দিচ্ছি এবং স্প্রিং-বুট-স্টার্টার-টমক্যাট নির্ভরতা যোগ করছি দুটি অভ্যন্তরীণ নির্ভরতা বাদ দিয়ে এবং প্রদত্ত সুযোগ যোগ করছি
<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-প্রদত্ত ফলের আর্টিফ্যাক্টের মধ্যে। ফলস্বরূপ আর্টিফ্যাক্ট চালানোর জন্য আপনার কাছে এখন কমপক্ষে তিনটি বিকল্প রয়েছে:
domain-dir/autodeploy
এর অধীনে autodeploy ডিরেক্টরিতে আপনার সংরক্ষণাগার ফাইলটি অনুলিপি করুনasadmin
API - কমান্ড স্থাপনjava -jar
ব্যবহার করে চালান : spring-boot-maven-plugin দুটি আর্টিফ্যাক্ট তৈরি করে - war
এবং war.original
। সহজ war
মধ্যে lib-provided
, original
নেই।নিম্নলিখিত নির্ভরতাগুলি বাদ দিলে আমাদের ফলে আর্টিফ্যাক্ট আকার হ্রাস করতে দেয়:
<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); } }
সুতরাং, আমি উপরে উল্লেখ করেছি, দুটি সংশোধনী:
@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>
ডিপ্লয়মেন্ট বর্ণনাকারী সম্পর্কে আরও পড়ুন
ক্লাস লোডার প্রতিনিধিত্ব সম্পর্কে আরও পড়ুন