سؤال

سأقوم بإعادة استخدام مكتبة ognl من نطاق Struts2. لديّ مجموعة كبيرة من الصيغ ، ولهذا السبب أود أن أتعامل معهم جميعًا:

Ognl.parseExpression(expressionString);

لكنني لست متأكدًا مما إذا كان يمكن استخدام التعبير المسبق في بيئة متعددة الخيوط. هل يعرف أي شخص ما إذا كان يمكن استخدامه؟

هل كانت مفيدة؟

المحلول

هذه PropertyUtils تتم كتابة الكود من ognl ليكون آمنًا لخيط الخيط ، ولذا أعتقد أن التعبيرات المترجمة تهدف إلى أن تكون آمنة.

دليل إضافي هو أن معظم واجهة برمجة تطبيقات الإكسسور توفر الحالة القابلة للتغيير كمعلمة سياق (على سبيل المثال انظر PropertyAccessor) ، وبالتالي فإن الطبقات نفسها لديها حالة قابلة للتغيير. الطبقات غير القابلة للتغيير آمنة من الخيط. يحث دليل المطورين على أن تكون آمنة الخيط ، وأخيراً تبحث في الكود ، حيث توجد حالة قابلة للتغيير ، يتم حراسةها في كتلة متزامنة ، على سبيل المثال انظر التقييم.

باختصار ، يبدو أن ognl قد تم تصميمه ليكون آمنًا للخيط. سواء كان ذلك بالفعل أم لا هو سؤال آخر! يمكنك كتابة اختبار سريع لرؤية بالتأكيد ، باستخدام على سبيل المثال concutest. بدلاً من ذلك ، إذا كان عدد مؤشرات الترابط معقولة ، فإن تخزين جميع التعبيرات في خطوط الخيط يتجنب المشكلة تمامًا ، على حساب القليل من الذاكرة الإضافية (أو ربما لا ، لأن ognl يقوم بالتخزين المؤقت للتعبير.)

نصائح أخرى

أعتقد أن أفضل خيارك هو الاتصال بالمطورين الأصليين ، مباشرة أو من خلال القائمة البريدية:
http://www.opensymphony.com/ognl/members.action
https://ognl.dev.java.net/servlets/projectmailinglist

يبدو أن المشروع قد تم التخلي عنه لبعض الوقت ، لذلك لا يوجد أي شخص آخر يعرف:/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top