আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন। তথ্য
Java কলআউট কী?
Apigee Edge বিভিন্ন ধরনের নীতি প্রদান করে যা API ম্যানেজমেন্টের সাধারণ প্রয়োজনীয়তা পূরণ করে, যেমন নিরাপত্তা, ডেটা ট্রান্সফর্মেশন, ট্রাফিক ম্যানেজমেন্ট ও অন্যান্য।
তবে, এমন কিছু ক্ষেত্রে আপনার API-এর কাস্টম আচরণ প্রয়োজন যা স্ট্যান্ডার্ড নীতিতে প্রয়োগ করা হয়নি। এইসব ক্ষেত্রে, Apigee আপনাকে কাস্টমাইজ করা API আচরণ স্ক্রিপ্ট বা কোড করার জন্য বিভিন্ন বিকল্প প্রদান করে। একটি উপায় হল Java-তে কাঙ্ক্ষিত আচরণ প্রয়োগ করা।
Java-এর কোন কোন ভার্সনে কাজ করে তা জানতে, কাজ করে এমন সফ্টওয়্যার ও কাজ করে এমন ভার্সন দেখুন।
প্রক্সিতে Java কোড কীভাবে ব্যবহার করব?
Java কলআউট নীতি আপনাকে কোনও এক্সিকিউটিং প্রক্সি ফ্লোয়ের মধ্যে থেকে Java কোড কল করতে দেয়। আপনার Java কোডকে নির্দিষ্ট Edge-স্পেসিফিক Java ইন্টারফেস প্রয়োগ করতে হবে যা কোডকে এক্সিকিউটিং প্রক্সির সাথে ইন্টার্যাক্ট করতে দেয়। যেমন, প্রক্সি ফ্লোয়ের বর্তমান কনটেক্সটে হেডার, কোয়েরি প্যারামিটার, ফ্লো ভেরিয়েবল ও অন্যান্য এন্টিটি পাওয়া ও সেট করার জন্য Java মেথড আছে।
আমার কখন Java কলআউট ব্যবহার করা উচিত?
আসুন, সেইসব পরিস্থিতি দেখে নেওয়া যাক যেখানে Java কলআউট কাজে লাগে এবং সেইসব পরিস্থিতিও দেখে নেওয়া যাক যেখানে আপনাকে অন্যান্য পদ্ধতি বিবেচনা করতে হবে।
প্রথমে, বিকল্প পদ্ধতি বিবেচনা করুন
Java কলআউট ব্যবহার করার আগে, মনে রাখবেন যে এর পরিবর্তে আপনি ব্যবহার করতে পারেন এমন বিকল্প পদ্ধতি থাকতে পারে । যেমন:
- লাইটওয়েট অপারেশনের জন্য, যেমন রিমোট পরিষেবায় HTTP API কল করার ক্ষেত্রে, ServiceCallout নীতি ব্যবহার করার কথা বিবেচনা করুন। পরিষেবা কলআউট নীতি দেখুন।
- মেসেজ কন্টেন্টের সাথে তুলনামূলকভাবে সহজ ইন্টার্যাকশনের জন্য, যেমন HTTP হেডার, প্যারামিটার বা মেসেজ কন্টেন্ট পরিবর্তন বা এক্সট্র্যাক্ট করা , আপনি JavaScript বা Python ভাষা ব্যবহার করতে পারেন।
Java কোডে আপনি কী করতে পারেন
Java কলআউট এইসব প্রাথমিক অপারেশন সমর্থন করে:
- অনুরোধ বা উত্তর মেসেজ পরীক্ষা করা বা সেগুলিতে কারচুপি করা
- ফ্লো ভেরিয়েবেল পাওয়া ও সেট করা। Edge ফ্লো ভেরিয়েবেল অ্যাক্সেস করতে আপনি Java পদ্ধতি ব্যবহার করতে পারবেন। আপনি যদি কী ভ্যালু ম্যাপ (KVM) তথ্য অ্যাক্সেস করতে চান, তাহলে KVM নীতি ব্যবহার করুন, ফ্লো ভেরিয়েবলে KVM ভ্যালু অ্যাসাইন করুন এবং তারপরে আপনি Java কলআউটের মধ্যে থেকে ফ্লো ভেরিয়েবল অ্যাক্সেস করতে পারবেন।
- এক্সটার্নাল পরিষেবাতে কল করা
- সমস্যা জানানো
- সমস্যার মেসেজ ও স্ট্যাটাস কোড ম্যানিপুলেট করা
Java কোডে আপনি কী কী করতে পারবেন না
বেশিরভাগ সিস্টেম কল অনুমোদিত নয়। আপনি এগুলি করতে পারবেন না:
- ইন্টার্নাল ফাইল সিস্টেম রিড বা রাইট করা। এর অর্থ হল, ইন্টার্নাল ফাইল সিস্টেমে রিড/রাইট করার জন্য আপনি কোনও Java প্যাকেজ ব্যবহার করতে পারবেন না; তবে, আপনি এক্সটার্নাল রিমোট কল করতে পারবেন।
- মেশিনে বর্তমান প্রসেস, প্রসেস তালিকা বা CPU/মেমরি ব্যবহার সম্পর্কে তথ্য পান।
- `expressions-1.0.0.jar` এবং `message-flow-1.0.0.jar`-এ সোর্স কোড অ্যাক্সেস করুন।
যদিও এই ধরনের কিছু কল কাজ করতে পারে, তবে সেগুলি কাজ করে না এবং যেকোনও সময় সক্রিয়ভাবে বন্ধ করে দেওয়া হতে পারে। আপনার কোডে এই ধরনের কল করা এড়িয়ে চলুন।
Apigee Edge-এর সাথে অন্তর্ভুক্ত Java লাইব্রেরি ব্যবহার বা সেগুলির উপর নির্ভর করবেন না। সেইসব লাইব্রেরি শুধুমাত্র Edge প্রোডাক্টের কার্যকারিতার জন্য এবং কোনও লাইব্রেরি রিলিজ থেকে রিলিজ পর্যন্ত উপলভ্য থাকবে তার কোনও গ্যারান্টি নেই। আপনি এই ধরনের লাইব্রেরি ব্যবহার করলে, সেগুলি শুধুমাত্র প্রোডাকশন নয় এমন ডেমোনস্ট্রেশনে ব্যবহার করুন।
হ্যালো Java কলআউট
আসুন, একটি সাধারণ হ্যালো ওয়ার্ল্ড Java কলআউট উদাহরণ দেখে নেওয়া যাক। এই উদাহরণে, আমরা একটি জাভা কলআউট সহ সাধারণ প্রক্সি তৈরি করি যা "হ্যালো ওয়ার্ল্ড" উত্তর দেয়। প্রক্সি দুটি সম্ভাব্য উত্তরের মধ্যে একটি ফেরাতে পারে:
- আপনি যদি "name" ভ্যালু সহ "username" হেডার পাস করেন, তাহলে প্রক্সি এগুলি রিটার্ন করে:
Hello, <name>!
- আপনি হেডার বাদ দিলে, প্রক্সি শুধু এটি রিটার্ন করে:
"Hello, Guest!"
স্টার্টার প্রোজেক্ট ডাউনলোড করুন
বিষয়টি সহজ করতে, Apigee-এর GitHub-এ api-platform-samples রিপোজিটরিতে আপনার জন্য একটি প্রাথমিক প্রোজেক্ট প্রস্তুত করা আছে।
- আপনার সিস্টেমে api-platform-samples ডাউনলোড বা ক্লোন করুন।
- আপনার পছন্দের টার্মিনাল বা কোড এডিটরে গিয়ে
api-platform-samples/doc-samples/java-helloপ্রোজেক্টে যান।
Java কোড লেখা
- Java সোর্স ফাইল খুলুন:
java-hello/callout/src/main/java/HelloJava.java. এই ফাইলটি হল মূল Java ক্লাসের একটি প্রাথমিক ভার্সন যা আমরা প্রয়োগ করব। Edge Java কল-আউট কোডের জন্য ইমপোর্ট করা প্যাকেজ প্রয়োজন। এইসব ক্লাস এমন পদ্ধতি প্রদান করে যা আপনাকে প্রক্সি এক্সিকিউশন কন্টেক্সট অ্যাক্সেস করতে দেয়। এই কোড কম্পাইল ও ডেপ্লয় করার ধাপগুলি আমরা শীঘ্রই দেখিয়ে দেব।
package com.apigeesample; import com.apigee.flow.execution.ExecutionContext; import com.apigee.flow.execution.ExecutionResult; import com.apigee.flow.execution.spi.Execution; import com.apigee.flow.message.MessageContext; public class HelloJava implements Execution { public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) { try { // Your code here. return ExecutionResult.SUCCESS; } catch (Exception e) { return ExecutionResult.ABORT; } } }
- কমেন্ট করা লাইন
// Your code here-এর জায়গায় নিম্নলিখিত কোডটি লিখুন:
String name = messageContext.getMessage().getHeader("username"); if (name != null && name.length()>0) { messageContext.getMessage().setContent("Hello, " + name + "!"); messageContext.getMessage().removeHeader("username"); } else { messageContext.getMessage().setContent("Hello, Guest!"); }
- ফাইলটি সেভ করুন।
Maven-এর মাধ্যমে আপনার কোড কম্পাইল করুন
প্রোজেক্টটি এমনভাবে সেট-আপ করা হয়েছে যাতে আপনি Maven-এর মাধ্যমে কম্পাইল করতে পারেন। আপনি যদি
javac ব্যবহার করতে চান, তাহলে আমরা Maven উদাহরণ অনুসরণ করে একটি উদাহরণ যোগ করব।
- আপনার ডিভাইসে Maven ইনস্টল করা আছে কিনা তা নিশ্চিত করুন:
mvn -version
- স্ক্রিপ্ট
java-hello/buildsetup.shএক্সিকিউট করুন। এই স্ক্রিপ্ট আপনার লোকাল Maven রেপোতে প্রয়োজনীয় JAR ডিপেন্ডেন্সি ইনস্টল করে। java-hello/calloutডিরেক্টরিতে cd করুন।- Maven এক্সিকিউট করুন:
mvn clean package
- আপনি চাইলে, JAR ফাইল
edge-custom-policy-java-hello.jarjava-hello/apiproxy/resources/java-এ কপি করা হয়েছে কিনা তা যাচাই করে নিন। প্রক্সি সহ ডিপ্লয় করতে চান এমন JAR ফাইলের জন্য এই লোকেশনটি প্রয়োজন।
javac-এর মাধ্যমে কম্পাইল করা (ঐচ্ছিক)
আগের বিভাগে, আপনি Maven কমান্ডের সাহায্যে প্রয়োজনীয় Java JAR ফাইল অটোমেটিক জেনারেট
করেন। অথবা, আপনি যদি কোড কম্পাইল করার জন্য javac ব্যবহার করতে চান, তাহলে আপনি
নিচের মতো কিছু করতে পারেন (java-hello ডিরেক্টরি থেকে)। প্রয়োজনীয়
JAR ফাইল java-hello/lib ডিরেক্টরিতে আপনার জন্য দেওয়া আছে।
api-platform-samples/doc-samples/java-hello-এ cd করুন।- আপনার পাথে javac আছে কিনা তা নিশ্চিত করুন।
javac -version
- নিম্নলিখিত javac কমান্ড এক্সিকিউট করুন:
এর ফলেjavac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/HelloJava.java
com/apigeesample/HelloJava.classতৈরি হয়। -
apiproxy/resources/javaডিরেক্টরিতে কম্পাইল করা ক্লাস সহ একটি JAR ফাইল তৈরি করুন। প্রক্সি সহ ডেপ্লয় করতে চান এমন JAR ফাইলের জন্য এটি হল প্রয়োজনীয় লোকেশন।java-helloডিরেক্টরিতে নিম্নলিখিত কমান্ড চালিয়ে আপনি এটি করতে পারবেন (শেষে ফুলস্টপ দিতে ভুলবেন না)।
jar cvf apiproxy/resources/java/edge-custom-policy-java-hello.jar -C com .
প্রক্সি ডিপ্লয় ও কল করা
./java-hello ডিরেক্টরিতে একটি ডিপ্লয় স্ক্রিপ্ট প্রদান করা হয়েছে। তবে এটি চালানোর আগে,
আপনাকে দ্রুত সেট-আপ করতে হবে।
api-platform-samples/doc-samples/java-hello-এ cd করুন- আপনি যদি এটি এখনও না করে থাকেন, তাহলে ফাইলটি খুলুন
../../setup/setenv.shএবং আপনার Apigee অ্যাকাউন্টের তথ্য অনুসারে এটি এডিট করুন: আপনার ইউজারনেম (আপনার অ্যাকাউন্টের সাথে যুক্ত ইমেল আইডি ), আপনার প্রতিষ্ঠানের নাম এবং API ম্যানেজমেন্ট কল করার জন্য আপনি যে ডোমেন ব্যবহার করেন। যেমন, Edge ক্লাউডের জন্য ডোমেন হলhttps://api.enterprise.apigee.com; তবে, আপনি Edge প্রাইভেট ক্লাউড ব্যবহার করলে আপনার ডোমেন আলাদা হতে পারে। setenv.shফাইলটি সেভ করুন।- ডেপ্লয় স্ক্রিপ্ট এক্সিকিউট করুন:
./deploy.sh
- ডেপ্লয় করা হয়ে গেলে, ইনভোক স্ক্রিপ্ট এক্সিকিউট করুন:
./invoke.sh
ইনভোক স্ক্রিপ্ট একটি cURL কমান্ড কল করে যা দেখতে এইরকম:
curl http://$org-$env.$api_domain/java-hello -H "username:Will"
যা "হ্যালো, উইল!
নাম পরিবর্তন করতে আপনি
invoke.shস্ক্রিপ্ট এডিট করতে পারেন অথবা আপনি যদি হেডার সরানোর জন্য cURL কল পরিবর্তন করেন, তাহলে কমান্ড "হ্যালো, অতিথি!" রিটার্ন করে।
প্রক্সি সম্পর্কে
এই প্রক্সিতে ব্যবহৃত নীতিগুলি দ্রুত দেখে নেওয়া যাক। প্রক্সি ফ্লোতে নীতি কোথায় রাখা হয়েছে এবং কেন, সেই বিষয়ে মনোযোগ দিন।
অ্যাসাইন মেসেজ নীতি
ProxyEndpoint request flow-এর সাথে একটি Assign message নীতি অ্যাটাচ করা আছে। এটি অনুরোধ থেকে ইউজারনেম হেডার কপি করে এবং তা উত্তরের সাথে অ্যাসাইন করে। এই অপারেশনটি জাভা কলআউট নীতিকে অনুমতি দেয়, যা প্রতিক্রিয়া ফ্লোতে সংযুক্ত থাকে। এটি ব্যবহারকারীর নাম হেডার অ্যাক্সেস করতে এবং সেই হেডারের মান ব্যবহার করে একটি কাস্টম প্রতিক্রিয়া বডি তৈরি করতে পারে।
<AssignMessage async="false" continueOnError="false" enabled="true" name="CopyHeader"> <DisplayName>CopyHeader</DisplayName> <Copy source="request"> <Headers> <Header name="username"/> </Headers> </Copy> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
Java কলআউট নীতি
Java কলআউট নীতি উত্তর ফ্লোর সাথে অ্যাটাচ করা আছে। এর কারণ হল, কাস্টম জাভা কোড
রেসপন্স হেডার ও মেসেজে পরিবর্তন করে। নীতির ClassName
এলিমেন্ট, নীতি দ্বারা এক্সিকিউট করা প্রধান ক্লাস নির্দিষ্ট করে। ResourceURL এলিমেন্ট হল
JAR ফাইলের নাম যা আপনি তৈরি করেছেন এবং প্রক্সির resources/java ডিরেক্টরিতে
যোগ করেছেন।
<JavaCallout name="hello-java"> <ClassName>com.apigeesample.HelloJava</ClassName> <ResourceURL>java://edge-custom-policy-java-hello.jar</ResourceURL> </JavaCallout>
Java কলআউট সম্পর্কে আপনার যা জানা প্রয়োজন
Java কলআউট প্রয়োগ করার ব্যাপারে গুরুত্বপূর্ণ বিষয়গুলি হল:
com.apigee.flow.executionওcom.apigee.flow.messageপ্যাকেজ থেকে ক্লাস ইমপোর্ট করে। এইসব প্যাকেজকে অবশ্যই প্যাকেজ ও ডেপ্লয় করা JAR ফাইলে অন্তর্ভুক্ত করতে হবে। আপনি ম্যানেজমেন্ট UI প্রক্সি এডিটরের মাধ্যমে আপনার Java JAR আপলোড করতে পারেন অথবা আপনি এটি API প্রক্সির/resources/javaডিরেক্টরিতে অন্তর্ভুক্ত করতে পারেন যা আপনি লোকালি ডেভেলপ করেন।- Execution ইন্টারফেস প্রয়োগ করে। API প্রক্সির মধ্যে এক্সিকিউট করা যেকোনও Java কোডকে অবশ্যই Execution প্রয়োগ করতে হবে।
- Java কলআউট নীতিতে কোনও আসল কোড থাকে না। এর পরিবর্তে, Java কলআউট নীতি একটি Java 'রিসোর্স' রেফারেন্স করে, যা আপনাকে অবশ্যই JAR-এ প্যাকেজ করতে হবে।
- যেসব প্যাকেজের নাম এড়িয়ে যেতে হবে: Java কলআউটে io.apigee বা com.apigee প্যাকেজের নাম হিসেবে ব্যবহার করবেন না। এগুলি রিজার্ভ করা থাকে এবং অন্যান্য Apigee মডিউল ব্যবহার করে।
- আপনার Java কলআউট যদি স্বতন্ত্র JAR
ফাইল হিসেবে প্যাকেজ করা অতিরিক্ত থার্ড-পার্টি লাইব্রেরির উপর নির্ভর করে, তাহলে রানটাইমে সেগুলি সঠিকভাবে লোড করা হয়েছে কিনা তা নিশ্চিত করতে
সেইসব JAR ফাইল
/resources/javaডিরেক্টরিতেও রাখুন। - একাধিক JAR থাকলে, সেগুলি অতিরিক্ত রিসোর্স হিসেবে যোগ করুন। অতিরিক্ত JAR ফাইল উল্লেখ করার জন্য আপনাকে
নীতি কনফিগারেশন পরিবর্তন করতে হবে না। সেগুলি
/resources/java-এ রাখলেই যথেষ্ট। - Java JAR আপলোড করা সংক্রান্ত অতিরিক্ত তথ্যের জন্য, রিসোর্স ফাইল দেখুন।