মডিউল এবং তাদের স্ব স্ব প্যাকেজগুলির মধ্যে অ্যাক্সেসগুলির বোঝার বাইরে। আমি বিশ্বাস করি এর মূদ্রাটি মডিউল সিস্টেম # রিল্যাক্সড-স্ট্রং-এনক্যাপসুলেশনের মধ্যে রয়েছে এবং আমি প্রশ্নের প্রাসঙ্গিক চেষ্টা ও উত্তর দেওয়ার জন্য কেবল এর সম্পর্কিত অংশগুলি চেরি-বাছাই করব।
কোনটি একটি অবৈধ প্রতিফলিত অ্যাক্সেসকে সংজ্ঞায়িত করে এবং কোন পরিস্থিতিতে সতর্কবার্তাটি ট্রিগার করে?
জাভা -9 এ মাইগ্রেশনে সহায়তা করার জন্য, মডিউলগুলির শক্তিশালী এনক্যাপসুলেশন শিথিল করা যেতে পারে।
একটি বাস্তবায়ন স্থির অ্যাক্সেস প্রদান করতে পারে , যেমন বাইকোড সংকলিত দ্বারা।
এর অন -টাইম সিস্টেমে এক বা একাধিক মডিউলগুলির এক বা একাধিক প্যাকেজগুলির সাথে সমস্ত নামবিহীন মডিউলগুলিতে কোডের জন্য খোলা অর্থাত্ ক্লাসপথের কোডে একটি উপায় সরবরাহ করতে পারে। যদি রান-টাইম সিস্টেমটি এভাবে আহ্বান করা হয় এবং যদি তা করে প্রতিফলন APIs এর কিছু অনুরোধ সফল হয় যেখানে অন্যথায় তারা ব্যর্থ হত।
এই ধরনের ক্ষেত্রে, আপনি আসলে একটি প্রতিফলিত অ্যাক্সেস তৈরি শেষ করেছেন যা "অবৈধ" যেহেতু খাঁটি মডুলার জগতে আপনি এই ধরণের অ্যাক্সেসগুলি করতে চাননি।
কীভাবে এটি সমস্ত একসাথে স্তব্ধ হয়ে যায় এবং কোন দৃশ্যে সতর্কবার্তাটি ট্রিগার করে?
এনক্যাপসুলেশনের এই শিথিলকরণটি রানটাইম সময়ে একটি নতুন লঞ্চার বিকল্প দ্বারা নিয়ন্ত্রিত হয় --illegal-access
যা জাভা 9 সমানতে ডিফল্টরূপে হয় permit
। permit
মোড নিশ্চিত
এই জাতীয় কোনও প্যাকেজে প্রথম প্রতিফলিত-অ্যাক্সেস অপারেশনের কারণে একটি সতর্কতা জারি করা হয়, তবে সেই বিন্দুটির পরে কোনও সতর্কতা জারি করা হয় না। এই একক সতর্কতাটি আরও সতর্কতাগুলি কীভাবে সক্ষম করবেন তা বর্ণনা করে। এই সতর্কতা দমন করা যায় না।
মোডগুলি মানগুলি debug
(যেমন প্রতিটি অ্যাক্সেসের জন্য বার্তা পাশাপাশি স্ট্যাকট্রেস), warn
(প্রতিটি এই অ্যাক্সেসের জন্য বার্তা) এবং deny
(যেমন ক্রিয়াকলাপ অক্ষম করে) দিয়ে কনফিগার করা যায় ।
অ্যাপ্লিকেশনগুলিতে ডিবাগ এবং ঠিক করার জন্য কয়েকটি জিনিস হ'ল: -
- এ জাতীয় নির্দেশনা ( ) বা স্পষ্টভাবে ব্যবহার সহ মডিউল ঘোষণা ছাড়াই একটি মডিউল থেকে অন্য মডিউল থেকে অন্য প্যাকেজগুলি খুলতে
--illegal-access=deny
এড়াতে এটি চালিয়ে যান Runopens
--add-opens
ভিএম আরগের ।
- সংকলিত কোড থেকে জেডিকে-অভ্যন্তরীণ এপিআইগুলিতে স্থিতিক উল্লেখগুলি বিকল্পটির সাহায্যে
jdeps
সরঞ্জামটি ব্যবহার করে সনাক্ত করা যেতে পারে--jdk-internals
যখন অবৈধ প্রতিফলন-অ্যাক্সেস অপারেশন সনাক্ত করা হয় তখন সতর্কতা বার্তাটি জারি করে নিম্নলিখিত ফর্মটি রয়েছে:
WARNING: Illegal reflective access by $PERPETRATOR to $VICTIM
কোথায়:
$PERPETRATOR
কোড সহ এমন ধরণের পুরোপুরি যোগ্যতাসম্পন্ন নাম যা প্রশ্নে প্রতিফলনমূলক ক্রিয়াকলাপটি যোগ করে কোড উত্সের (যেমন, জেআর-ফাইলের পাথ) যদি উপলভ্য থাকে, এবং
$VICTIM
এমন একটি স্ট্রিং যা পরিবেষ্টনের ধরণের পুরোপুরি যোগ্যতার নাম সহ সদস্যকে অ্যাক্সেস করা হচ্ছে বলে বর্ণনা করে
যেমন একটি নমুনা সতর্কতা জন্য প্রশ্ন: = জেডিকে 9: একটি অবৈধ প্রতিফলিত অ্যাক্সেস অপারেশন ঘটেছে। org.python.core.PySystemState
সর্বশেষ এবং একটি গুরুত্বপূর্ণ নোট, আপনি যাতে এই ধরনের সতর্কতার মুখোমুখি না হন এবং ভবিষ্যতে সুরক্ষিত হন তা নিশ্চিত করার চেষ্টা করার সময়, আপনাকে যা করতে হবে তা হ'ল আপনার মডিউলগুলি যে অবৈধ প্রতিফলিত প্রবেশাধিকার না করে তা নিশ্চিত করা উচিত। :)