জাভা EE ধারকটিতে স্প্রে করা থ্রেডগুলি কেন নিরুৎসাহিত করা হচ্ছে?


120

জাভা ই ই বিকাশের বিষয়ে আমি প্রথম যে জিনিসটি শিখেছি তা হ'ল আমি জাভা ই ই ধারকের ভিতরে নিজের থ্রেডগুলি স্পোন করা উচিত নয়। তবে আমি যখন এটি নিয়ে ভাবতে আসি, তখন কারণটি আমি জানি না।

কেন আপনি নিরুৎসাহিত করছেন তা আপনি পরিষ্কারভাবে ব্যাখ্যা করতে পারেন?

আমি নিশ্চিত যে বেশিরভাগ এন্টারপ্রাইজ অ্যাপ্লিকেশনগুলিতে মেল ডিমন, নিষ্ক্রিয় সেশন, ক্লিনআপ জব ইত্যাদির মতো এক ধরণের অ্যাসিনক্রোনাস জব প্রয়োজন need

সুতরাং, যদি প্রকৃতপক্ষে কোনও থ্রেড স্পোন করা উচিত নয়, প্রয়োজন হলে এটি করার সঠিক উপায় কী?


4
অ্যাসিঙ্ক্রোনাস টাস্কগুলি সাধারণত জেএমএস মেসেজিং এবং এমডিবি ব্যবহার করে করা হয়।
কেন লিউ

5
পাত্রে জেএসআর 236 প্রয়োগ করা হলে এই সমস্যাটি শীঘ্রই অতীতের একটি বিষয় হওয়া উচিত ।
লেটমাইক

5
এটি নিরুৎসাহিত করা হয়েছিল কারণ কোনও দ্বিতীয় থ্রেড কনটেইনার দ্বারা তৈরি এবং পরিচালনা করা উচিত, যাতে থ্রেডটি অন্য এন্টারপ্রাইজ সংস্থানগুলিতে অ্যাক্সেস পায়। জাভা EE7 এর সাথে একটি এন্টারপ্রাইজ পরিবেশে থ্রেড তৈরি করার একটি মানক এবং সঠিক উপায় রয়েছে। কনকুরન્સી ইউটিলস ব্যবহার করে, আপনি নিশ্চিত হন যে আপনার নতুন থ্রেড তৈরি হয়েছে এবং ধারক দ্বারা পরিচালিত হয়েছে, গ্যারান্টি দিয়ে সমস্ত EE পরিষেবাদি উপলব্ধ। এখানে
ক্রিস রিচি

JSF / EJB দৃষ্টিভঙ্গি বেশ কিছু সঠিক উপায়ে এখানে পাওয়া যাবে: stackoverflow.com/q/6149919
BalusC

উত্তর:


84

এটি নিরুৎসাহিত করা হয়েছে কারণ পরিবেশের মধ্যে থাকা সমস্ত সংস্থানগুলি সার্ভারের দ্বারা পরিচালিত এবং সম্ভাব্যভাবে তদারকি করা। এছাড়াও, যে প্রসঙ্গে থ্রেড ব্যবহার করা হচ্ছে তার বেশিরভাগ অংশটি সাধারণত সম্পাদনের থ্রেডের সাথে সংযুক্ত থাকে। যদি আপনি কেবল নিজের থ্রেড শুরু করেন (যা আমি বিশ্বাস করি যে কিছু সার্ভার এমনকি অনুমতি দেয় না) তবে এটি অন্যান্য সংস্থানগুলিতে অ্যাক্সেস করতে পারে না। এর অর্থ কী, আপনি জেএমএস সংযোগ কারখানা এবং ডেটাসোর্সেসের মতো অন্যান্য সিস্টেমের সংস্থানগুলিতে অ্যাক্সেস পেতে একটি প্রাথমিক পর্ব পেতে এবং জেএনডিআই লুকআপগুলি করতে পারবেন না।

এটি "সঠিকভাবে" করার উপায় আছে তবে এটি ব্যবহৃত প্ল্যাটফর্মের উপর নির্ভর করে।

ওয়েব স্পিয়ার এবং ওয়েবলজিকের পাশাপাশি অন্যদের জন্য কমনজ ওয়ার্কম্যানেজার সাধারণ

আরও তথ্য এখানে

এবং এখানে

এছাড়াও কিছুটা সদৃশ এই এক এই সকাল থেকে

আপডেট: দয়া করে নোট করুন যে এই প্রশ্নোত্তরটি ২০০৯ সালে জাভা ইই রাজ্যের সাথে সম্পর্কিত, তখন থেকেই বিষয়গুলির উন্নতি হয়েছে!


1
আপনি জেএমএস সংযোগ কারখানা এবং ডেটাসোর্সেসের মতো অন্যান্য সিস্টেমের সংস্থানগুলিতে অ্যাক্সেস পেতে একটি প্রাথমিক সূচনা পেতে এবং জেএনডিআই লকআপস করতে পারবেন না। আমার একটি অ্যাপ্লিকেশন রয়েছে যা থ্রেডগুলি শুরু করার সময় ডেটাসোর্স ইনজেকশনের মাধ্যমে এগুলির চারপাশে কাজ করে, তবে আমাকে এই পদ্ধতির পুনর্বিবেচনা করতে হবে ...
rjohnston

6
কোর জাভা ইই এপিআই দিয়ে থ্রেডগুলি তৈরি করার এখন একটি মানক এবং সঠিক উপায় রয়েছে। কনকুরન્સી ইউটিলস ব্যবহার করে, আপনি নিশ্চিত হন যে আপনার নতুন থ্রেড তৈরি হয়েছে এবং ধারক দ্বারা পরিচালিত হয়েছে, গ্যারান্টি দিয়ে সমস্ত EE পরিষেবাদি উপলব্ধ। এখানে এবং এখানে
ক্রিস রিচি

@ ক্রিসরিচি টিপটির জন্য ধন্যবাদ। যদি কেবল JBoss AS / IBM WAS জাভা EE 7 সমর্থন করে ... :-(
asgs

1
@asgs WildFly 8 (JBoss আঃ জন্য নতুন নাম) সমর্থন জাভা EE 7. আইবিএম শুধুমাত্র জাভা EE 6 প্রত্যয়িত করে সার্টিফিকেশন
ক্রিস রিচি

34

ইজেবিগুলির জন্য, এটি কেবল নিরুৎসাহিত নয়, স্পেসিফিকেশন দ্বারা এটি স্পষ্টভাবে নিষিদ্ধ :

একটি এন্টারপ্রাইজ শিম একাধিক উদাহরণের সম্পাদনা সিঙ্ক্রোনাইজ করতে থ্রেড সিঙ্ক্রোনাইজেশন আদিম ব্যবহার করা উচিত নয়।

এবং

এন্টারপ্রাইজ বিন অবশ্যই থ্রেডগুলি পরিচালনা করার চেষ্টা করবেন না। এন্টারপ্রাইজ শিম অবশ্যই কোনও থ্রেড শুরু করতে, থামাতে, স্থগিত করতে বা পুনরায় শুরু করতে বা থ্রেডের অগ্রাধিকার বা নাম পরিবর্তন করার চেষ্টা করবে না। এন্টারপ্রাইজ বিন অবশ্যই থ্রেড গ্রুপগুলি পরিচালনা করার চেষ্টা করবেন না।

কারণটি হ'ল ইজেবিগুলি বোঝানো হয় পরিবেশিত পরিবেশে পরিচালনা করা। একটি ইজেবি হয়ত একটি মেশিন থেকে একটি ক্লাস্টারে অন্য মেশিনে স্থানান্তরিত হতে পারে। থ্রেড (এবং সকেট এবং অন্যান্য সীমাবদ্ধ সুবিধা) এই বহনযোগ্যতার জন্য গুরুত্বপূর্ণ বাধা are


3
জাভা EE7 কনকুরન્સી ইউটিসগুলি কোনও এন্টারপ্রাইজ পরিবেশে থ্রেড তৈরির সঠিক উপায় সরবরাহ করে। এখানে এবং এখানে
ক্রিস রিচি

1
@ ড্যান আপনি কি আমাকে ব্যাখ্যা করতে পারেন যে কেন একটি থ্রেড একটি ইএসবিটিকে একটি মেশিন থেকে অন্য মেশিনে অন্য যন্ত্রে নিয়ে যাওয়ার বহনযোগ্যতার ক্ষেত্রে গুরুত্বপূর্ণ বাধা হয়ে দাঁড়াবে?
গীক

13

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

এই কারণেই যে J2EE থেকে 1.4 টাইমার পরিষেবা চালু হয়েছিল। বিশদ জন্য এই নিবন্ধটি দেখুন ।


2
জেএসআর 236 জাভা EE 7 এবং তারপরে পরে থাকা থ্রেডগুলিকে সমর্থন করার জন্য বৈশিষ্ট্যগুলি যুক্ত করেছে। ক্রিস রিচি এই ভাইবোন উত্তরটি দেখুন ।
বেসিল বাউরক

8

জাভা EE এর জন্য সমকালীন ইউটিলিটিস

মূল জাভা EE API দিয়ে থ্রেডগুলি তৈরি করার এখন একটি মানক এবং সঠিক উপায় রয়েছে:

কনকুরન્સી ইউটিলস ব্যবহার করে, আপনি নিশ্চিত হন যে আপনার নতুন থ্রেড তৈরি হয়েছে এবং ধারক দ্বারা পরিচালিত হয়েছে, গ্যারান্টি দিয়ে সমস্ত EE পরিষেবাদি উপলব্ধ।

উদাহরণ এখানে


2

আপনি সবসময় আপনার স্থাপনার বর্ণনাকারীর অংশ হিসাবে কন্টেনারটিকে স্টাফ শুরু করতে বলতে পারেন। এরপরে আপনার যা কিছু রক্ষণাবেক্ষণের প্রয়োজন তা করতে পারে।

নিয়ম অনুসরণ করুন। আপনি যে কোনও দিন খুশি হবেন :)



2

এটি না করার কোনও আসল কারণ নেই। আমি কোনও সমস্যা ছাড়াই একটি ওয়েব অ্যাপে বসন্তের সাথে কোয়ার্জ ব্যবহার করেছি । এছাড়াও একযোগে ফ্রেমওয়ার্ক ব্যবহার করা যেতে পারে। আপনি যদি নিজের থ্রেড হ্যান্ডলিং বাস্তবায়ন করেন, তাদের জন্য ডিডনগুলিকে ডিডোন সেট করুন বা একটি নিজস্ব ডিমন থ্রেড গ্রুপ ব্যবহার করুন যাতে ধারক আপনার ওয়েবপ্যাপটি যে কোনও সময় আনলোড করতে পারে।java.util.concurrent

তবে সতর্কতা অবলম্বন করুন, শিমের স্কোপস সেশন এবং অনুরোধটি থ্রেডগুলিতে কাজ করে না aw এছাড়াও বেসড অন্যান্য কোড বাক্সটির ThreadLocalবাইরে কাজ করে না, আপনাকে নিজের দ্বারা তৈরি থ্রেডগুলিতে মানগুলি স্থানান্তর করতে হবে।


1

আমি কখনই পড়িনি যে এটি নিরুৎসাহিত হয়েছে, এটি সঠিকভাবে করা সহজ নয় এই বিষয়টি বাদ দিয়ে।

এটি মোটামুটি নিম্ন-স্তরের প্রোগ্রামিং, এবং অন্যান্য নিম্ন-স্তরের কৌশলগুলির মতো আপনারও ভাল কারণ হওয়া উচিত। থ্রেড পুলের মতো বিল্ট-ইন কনস্ট্রাক্ট ব্যবহার করে বেশিরভাগ একযোগে সমস্যাগুলি আরও কার্যকরভাবে সমাধান করা যেতে পারে।


7
এটা আসলে অনুমান দ্বারা নিষিদ্ধ।
কেন লিউ

1

একটি কারণ আমি খুঁজে পেয়েছি যে আপনি যদি আপনার কাছে EJB তে কিছু থ্রেড তৈরি করেন এবং তারপরে আপনি কনটেইনারটি আনলোড বা আপনার ইজেবি আপডেট করার চেষ্টা করেন যা আপনি সমস্যা হতে চলেছেন। এমন কোনও কাজ করার প্রায় সবসময় অন্য উপায় রয়েছে যেখানে আপনার কোনও থ্রেডের প্রয়োজন নেই তাই কেবল না বলুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.