<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های علی اکبر عزیزخانی</title>
        <link>https://virgool.io/feed/@azizkhani</link>
        <description>برنامه نویس جاوا</description>
        <language>fa</language>
        <pubDate>2026-06-16 14:28:49</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/4528/avatar/CnKrxO.png?height=120&amp;width=120</url>
            <title>علی اکبر عزیزخانی</title>
            <link>https://virgool.io/@azizkhani</link>
        </image>

                    <item>
                <title>معرفی مطالب جالب برنامه نویسی -۴:Serverless</title>
                <link>https://virgool.io/baharan-co/serverless-xsf4h9udypgb</link>
                <description>تو این پست قصد دارم یک سری لینک با محوریت موضوعات FAAS ,Serverless به شما معرفی کنم. نمیدونم تا چه اندازه ای با این دو رویکرد آشنایی دارید . این معماری از پر اهمیت ترین موضوعاتی که در سال ۲۰۱۸ در حال پیگیری و اجرا است .این معماری سعی داره رویکرد جدیدی در اجرای نرم افزارهای ایجاد کنه و بعد از تحولی که الگوی معماری ماکروسرویس در سالهای گذشته ایجاد کردند.تاثیر گذاری و تحول جدیدی در نحوه توسعه و اجرای سامانه های بزرگ ایجاد کنه . بنابراین نیاز است که اطلاعات خوبی در این موضوع داشته باشیم .در ادامه یک سری منابع مفید در این حوزه معرفی می کنیم“Serverless will fundamentally change how we build business around technology and how you code.”Serverless architectures refer to applications that significantly depend on third-party services (knows as Backend as a Service or &quot;BaaS&quot;) or on custom code that&#x27;s run in ephemeral containers (Function as a Service or &quot;FaaS&quot;), the best known vendor host of which currently is AWS Lambda. By using these ideas, and by moving much behavior to the front end, such architectures remove the need for the traditional &#x27;always on&#x27; server system sitting behind an application. Depending on the circumstances, such systems can significantly reduce operational cost and complexity at a cost of vendor dependencies and (at the moment) immaturity of supporting services.لینک ۱ : یه مقاله عالی در مورد Serverless Architectures  در سایت مارتین فاولر . در صورتی که علاقه مند به دنیای FAAS ,Serverless هستید حتما این مقاله رو بخونید.ترجمه فارسی رو هم میتونید اینجا مطالعه کنیدلینک ۴: ارام آرام باید خودمون رو برای اتفاقای خوب در سال ۲۰۱۸ در حوزه FAAS آماده کنیم .اسپرینگ هم طرفدارهاشو تو این موضوع حسابی خوشحال خواهد کرد. این مقاله  یه سری قابلیت در مورد این ویژگی رو در اسپرینگ  معرفی میکنه .لینک ۳ : یکی از محصولات اپن سورس برای این معماری apache openwhisk هست این پروژه سعی داره تمام قابلتیهای این معماری رو پیاده سازی کنه . این مقاله روال اجرا و فراخوانی را در این معماری نشان می دهد . عکس پایین فلوی اجرا را نشان میدهد. The internal flow of processing لینک ۴: دوتا پروژه متن باز در این حوزه وجود دارد ، openfaas و openwhisk لینک ۵ : یه ریپازیتوری خوب در گیت که تمامی پروژه های این حوزه رو معرفی میکنه </description>
                <category>علی اکبر عزیزخانی</category>
                <author>علی اکبر عزیزخانی</author>
                <pubDate>Thu, 03 May 2018 22:53:21 +0430</pubDate>
            </item>
                    <item>
                <title>معرفی مطالب جالب برنامه نویسی -۳</title>
                <link>https://virgool.io/baharan-co/link3-ipnumzl3g9rf</link>
                <description>این پست با محوریت ویژگی های جدید spring-boot-2 ویژگی هایی که داره و موضوعات مرتبط ارسال میشه. تو دو ماه گذشته بالاخره تیم اسپرینگ نسخه نهایی رو ارایه داد و تمامی فریم های مربوطه در تلاش هستن که به این نسخه خودشون رو ارتقا بدن مخصوصا پروژه دوست داشتنی ما Jhipster یک لینک هم از ویژگی های جدید نسخه بتای هیپستر رو هم گذاشتم تا لذتش رو ببرید .چند تا از ویژگی های جدید ورژن ۲ پروژه اسپرینگ بوت کم کردن کدهای مورد نیاز برای Autoconfiguration یک سری قابلتهای خوب برای Production-readyیک سری قابلیتهای خوب برای تست عدم پشتیبانی از جاوا ۷ و کمترپشتیبانی از جاوا ۹حداقل ورژن تامکت 8.5حداقل ورژن هایبرنت 5.2ساده سازی ایجاد تنظیمات برای حوزه امنیت پشتیبانی از Reactive و WebFluxلینک ۱ :http://dolszewski.com/spring/feature-toggle-spring-boot/لینک ۲ :https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guideلینک ۳ : http://www.baeldung.com/new-spring-boot-2لینک ۴ : http://therealdanvega.com/blog/2018/03/01/what-is-new-spring-boot-2لینک ۵: https://www.infoq.com/presentations/spring-boot-2اینم قابلیتهای ورژن بتای هیپستر https://www.jhipster.tech/2018/04/03/jhipster-release-5.0.0-beta.0.html</description>
                <category>علی اکبر عزیزخانی</category>
                <author>علی اکبر عزیزخانی</author>
                <pubDate>Sun, 08 Apr 2018 21:49:31 +0430</pubDate>
            </item>
                    <item>
                <title>آینده از آن بات ها است</title>
                <link>https://dataio.ir/بات-a1k4tbe63sqg</link>
                <description>مقدمهسعی دارم تو این مقاله دو دست مخاطب رو با این چالش ها آشنا کنم .دسته اول  توسعه دهندگان سامانه ها و دسته دوم صاحبان کسب و کارها . توسعه دهندگان با درک این مشکلات و فناوری های مربوطه پی خواهند برد که چه کسب و کارهایی را می توان در این چالشها راه اندازی کرد.از طرفی صاحبان کسب و کارها متوجه خواهند شد که به چه روشهایی می توانند خدمات خود را به صورت الکترونیکی ارایه دهند.تا چه اندازه ای با دنیای آینده هوش مصنوعی آشنا هستید؟ تا چه اندازه روند رو به رشد فناوری در حوزه های مختلف را رصد می کنید؟ درآینده ای نه چندان دور یکی از تهدیدهایی مهم انسان ها،رشد فناوری و هوش مصنوعی ربات ها و سامانه های تولیدی به دست بشر ، و در ادامه عقب افتادگی انسان از هوش رباتها است.چالشهابسیاری از رباتها و سامانه ها با استفاده از امکان آموزش خودکار می توانند به صورت اتوماتیک بدون نیاز به انسان خود را رشد داده و تصمیمات قوی تری  و هوشمندانه تری از لحظه تولید و اجرا بگیرند.بنابراین انسان ها چاره ای ندارند جز اینکه خود را برای همچین تغییر بزرگی آماده کنند.برای مثال در آینده ای نه چندان دور دستیاران صوتی بسیاری از امور شما را انجام خواهند داد و با فرمانهای صوتی بسیاری از نیازمندی های شما را به راحتی و هوشمندی بالاتری حل خواهند کرد. در آینده ای نه چندان دور رباتهای کارگر به همراه شما در کنار خانواده شما حضور خواهند یافت و در بسیاری از امور به شما کمک خواهند کرد و همزمان با ارایه خدمات به شما رباتها نیز مانند یک انسان هوش،خود را ارتقا می دهند.درحال حاضر بسیاری از نیازمندی های امروزی مانند سفارش کالا از سوپر مارکت ،‍ درخواست خشکشویی ، سفارش خودرو ، پرداخت عوارض  ،پرداخت اجاره ، سفارش غذا از رستوران ،  سفارش میوه ،  سفارش نان ،سفارش خدمات داخل منزل ، پرداخت شارژ ساختمان ،  مشاهده مکان تردد  فرزند در فاصله رسیدن به خانه و مدرسه ، مشاهده وضعیت روشنایی خانه ، مشاهده وضعیت آب رسانی باغ بیرون شهر و  بسیاری از خدمات  الکترونیکی دیگر به صورت هوشمندانه ارایه می شوند . بخشی از این خدمات به صورت جزءی از زندگی ما تبدیل شده اند و نبود و حذف آنها برای بسیاری از افراد غیر ممکن می باشد.در نظر بگیرید در سالهای آینده و با توجه به بالا رفتن سطح رفاه و رشد فناوری در ایران ، بسیاری از این خدمات با زندگی جاری ما گره خواهند خورد و حتی تصور نداشتن آنها برای هر فردی استرس زا باشد .تصور کنید صبح زود به قصد کار از خانه بیرون رفته اید و در مسیر متوجه جا گذاشتن گوشی موبایل خود می شوید چه نگرانی هایی از جا گذاشتن موبایل برای شما در آن لحظه ایجاد خواهد شد . اغلب ما شاید  در ۱۵ سال قبل اصلا این موضوع را درک نمی کردیم و توضیح این معضلات و این مساله برای بسیاری تعجب اور بود که گوشی موبایل تا این حد برای هر فرد در زندگی روزمره مهم و اساسی شود . بدون شک ارایه این دست سرویس ها و نبود هر یک از این خدمات حسی مانند جا گذاشتن موبایل در منزل را خواهد داشت . این تغییر رویکرد در ارایه خدمات ،در کنار داشتن منافع زیاد چه مشکلاتی را می تواند در زندگی ما ایجاد کنند؟. آیا خود را برای استفاده از این چالشها آماده کرده ایم . آیا فرهنگ سازی برای این رشد فناوری و آشنایی مردم با این دست تهدیدات و سودمندی ها را برای توسعه دهندگان و صاحبان کسب و کار روشن نموده ایم .نکته بسیار مهم تعداد بالای خدماتی است که به صورت الکترونیکی دریافت خواهیم کرد .تصور کنید برای استفاده از هر یک از این امکانات باید  یک نرم افزار نصب نمود. تعداد این خدمات به نظر می رسد بین ۵۰ تا ۲۰۰ عدد باشد .مگر امکان دارد شما قبل از سفارش خرید گوشت وضعیت فریزر خود را مشاهده ننماید . مگر امکان دارد در حالی که درخواست سفارش ماشین را دارید اطلاعی از اب و هوای بیرون و مقصد پیدا نکنید .مگر امکان دارد پیش از پرداخت هزینه شارژ ساختمان صورت حساب های دیگر را مشاده و اولویت بندی نکرده باشید. در نظر بگیرید در آن واحد برای انجام یک سفارش چند سامانه را باید اجرا کنید .آیا چالش بعدی نحوه تعامل این خدمات و سرویس ها با یکدیگر نیست؟ آیا زبان مشترکی بین این سرویس ها وجود دارد؟ در نظر بگیرید به ازای هر خدمات  ذکر شده  ۱۰ سرویس دهنده با یکدیگر رقابت کنند در این صورت حداقل ۲۰۰۰ سرویس در فضای مجازی برای یک فرد یا خانواده عرضه خواهد شد . به چه روشی یک استفاده کننده  به این سرویس ها اعتماد نمایند .صاحبان کسب و کار به چه روشی توسعه دهندگان این خدمات را شناسایی کنند .راه حلبه نظر می رسد نیاز باشد به این سه سوال پاسخ داده شود :در آینده دیگر نیازی به توسعه اپ های موبایل برای ارایه کسب و کار ها نخواهد بود و بسیاری از خدمات با استفاده از فناوری بات ها ارایه خواهد شد .بنابراین ارایه یه پلتفرم تولید بات فارغ از اینکه این بات در چه پیام رسانی اجرا خواهد شد امری بسیار ضروری خواهد بودایجاد بستر ارتباطی برای تعامل باتها در قالب یک پلتفرم ارتباطی فراهم خواهد شد . این پلتفرم باید نقش یک مترجم بین یک زبان مبدا و مقصد را نماید و ارتباط بین یک ارایه دهنده خدمات با سایر خدمات را فراهم نمایدایجاد بستر معرفی باتها یک امر مهم برای شناسایی خدمات قابل اعتماد امری بسیار ضروری و مهم می باشد که هم کسب و کارها را معرفی خواهد نمود و هم توسعه دهندگان را به صاحبان کسب و کار نزدیک خواهد کرد. تیم بات چین متشکل از همکاران توانمند در حال ارایه راهکاری برای حل این سه چالش مهم در دنیای بات تحت نام تجاری BotChain.ir قصد دارد با ارایه رویکردهای فنی این مشکلات را حل نماید.در آینده با این موضوعات بیشتر آشنا خواهیم شد .</description>
                <category>علی اکبر عزیزخانی</category>
                <author>علی اکبر عزیزخانی</author>
                <pubDate>Fri, 06 Apr 2018 13:41:33 +0430</pubDate>
            </item>
                    <item>
                <title>معرفی مطالب جالب برنامه نویسی -۲</title>
                <link>https://virgool.io/baharan-co/link2-v2jteonu5mmt</link>
                <description>هفته دوم هم رسید و سعی میکنم هر هفته یک سری لینک از موضوعات جدید براتون به اشتراک بگذارم امیدوارم این سری هم لینک های جالبی براتون به اشتراک گذاشته باشم.مطلب هفته بعد موضوع معرفی قابلیت های جدید spring-boot-2 و مطالب مربوطه هست. اگر کسی لینک و مطلب جالبی را در این موضوع داره به پست الکترونیک من ارسال کنه لینک ۱ sonarcloud.io :شاید خیلی از برنامه نویس های جاوا با این ابزار یا فریم ورک آشنایی داشته باشن سونار با تحلیل کد شما اطلاعات خیلی خوبی به شما میده مثل :پیچیدگی کد.بدهی فنی شما و.. .سونار به تازگی این خدمات رو به صورت انلاین و رایگان برای پروژه های اپن سورس ارایه کرده .این هم روش استفاده با Mavenلینک ۲ rangle :بی شک یکی از بهترین منابع اموزشی برای انگیولار واقعا موضوعات رو عمیق و کاربردی توضیح داده .من که لذت بردملینک ۳ ng2-file-upload :یه لایبری خوب واسه اپلود فایل و عکس تو انگیولار ۲ به بعد . به نظرم خوب و ساده است و خیلی کار را بنداز. اگه نیاز داشتید عکس اپلود شده رو نشون بدید . با این دایرکتیو به راحتی میتونید به این نیاز هم برسید لینک ۴ Java Duration:چند مثال قابل فهم برای استفاده از ابجکت Duration , .. تو جاوالینک ۵ How to map entity attributes of type java.time.Duration: یه ویدیو ساده برای اعمال قابلیت استفاده از این ابجکت و تایپ تو هایبرنت </description>
                <category>علی اکبر عزیزخانی</category>
                <author>علی اکبر عزیزخانی</author>
                <pubDate>Fri, 30 Mar 2018 21:17:13 +0430</pubDate>
            </item>
                    <item>
                <title>معرفی مطالب جالب برنامه نویسی -۱</title>
                <link>https://virgool.io/baharan-co/link-1-ijxafmga2xt5</link>
                <description>یکی از روش های به اشتراک گذاری معروف معرفی لینک های جالب هست . من خودم سالها با این روش و دنبال کردن این پست ها از اخبار و مطالب جدید لذت بردم و خیلی چیزها یاد گرفتم و یادمیگیرم .به خودم گفتم شاید خوب باشه این کار رو این جا شروع کنم و دوستان هم با ارسال مطالب جدید در برنامه نویسی مخصوصا دنیای جاوا و وب کمک کنن تا با اشتراک گذاری به رشد همدیگه کمک کنیم .لینک ۱ IntelliJ IDEA shortcuts for Eclipse users  :معرفی یه سایت خوب برای نگاشت کیبور Eclipse به Intellij . تو چند سال اخیر روند رو به رشد Eclipse شدیدا رو به افول بوده و خیلی از برنامه نویسهای جاوا به Intellij مهاجرت کردن  .  بزرگترین نگرانی این دوستان از بین رفتن ShortKey است که یکی از مهمترین موضوعات در سرعت کد نویسی به حساب میباد . لینک زیر سعی کرده تو یه جدول کمک کنه که راحت تر این مهاجرت رو انجام بدید . البته اگه دوست داشته باشید با همون شورت کی های Eclipse هم کار رو ادامه بدید مشکلی نداره و Intellij این امکان رو فراهم کرده ولی بهتر اینه که کلا به همه چی Eclipse خداحافظی کنید .لینک ۲ Catalog of 312 Angular 2+ components &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp; libraries :معرفی یه سایت برای معرفی کامپوننتهای انگیولار به نظرم جالب بودلینک ۳ Jason Watmore:یه وبلاگ پر از پست های قشنگ در مورد انگیولار لینک ۴ Declarative, template-driven SweetAlert2 integration for Angular : پیاده سازی لایبری معروف SweetAlert برای انگیولار لینک ۵ ngx-datatable : یه لایبری خوب برای گرید به نظر قابلیتهای خوبی داره مخصوصا تو تمپلیتینگ  که باعث میشه دست برنامه نویس خیلی باز باشه</description>
                <category>علی اکبر عزیزخانی</category>
                <author>علی اکبر عزیزخانی</author>
                <pubDate>Sat, 24 Mar 2018 13:51:40 +0430</pubDate>
            </item>
                    <item>
                <title>تجربه های Jhipster قسمت اول</title>
                <link>https://virgool.io/baharan-co/%D8%AA%D8%AC%D8%B1%D8%A8%D9%87-%D9%87%D8%A7%DB%8C-jhipster-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-xaefbdal7kzu</link>
                <description> تجربه هیپستر یکی از موضوعات جالبی که تو این چند سال با آن برخورد کردم Jhipster بود . من خیلی روی استاندارد بودن رویکرد فنی که انتخاب میکنم حساس هستم .همیشه وقتی سعی دارم مشکلی رو حل کنم یا کار جدیدی را انجام بدم اول سعی میکنم مثل همه دنبال بهترین تجربه و استایل انجام اون کار باشم تا حسابی راضی بشم که کار رو درست انجام دادم  . معمولا پاسخ به این حساسیت خیلی ساده نیست .چون امکان داره روش های متنوعی رو پیدا کنی .حالا در نظر بگیرید که بخواهید در یک چالش فنی با ۱۰ تا چیز جدید رودرو بشی در این صورت ببینید چه اتفاقی خواهد افتاد . من تو سال ۲۰۱۵ با Jhipster اشنا شدم .یک پروژه عالی که به نظرم جمع شده از بهترین تجارب Full Stack است. از Front بگیر تا  Backend خیلی برای من جذاب و هیجان انگیر بود.باعث شد خیلی روشهای خوب را ازاین تکنولوژی یاد بگیرم و تقریبا هر جا که با مشکلی بر میخورد میکنم به اون رجوع میکنم و خیلی چیزها را از اون یاد گرفتم.ولی ای کاش یک چالش تو اون بهتر در نظر گرفته می شد . اگه تجربه کار کردن با جاوا و مخصوصا Spring رو داشته باشید قطعا میدونید باید یه مجموعه تنظیمات انجام بدید تا پروژه شما درست کار کنه و کافی یک مرحله رو درست انجام ندید قطعا پروژه استارت نمیشه . البته این مشکل با اضافه شدن پروژه Boot خیلی بهتر و کاملتر شده است .من اخرین تجربه ای که داشتم رو براتون بگم .من رو پروژه ای کار میکنم که احراز هویت آن بر اساس توکن میباشد . تصمیم گرفتیم به این پروژه یک ماژول ساده چت اضافه کنیم که مشتریان بتونن با هم چت کنن برای این موضوع نیاز داشتم که از تکنولوژی WebSocket استفاده کنم برای اینکار نیاز داشتم تنظیماتی رو به پروژه اضافه کنم شروع کردم به انجام این کار و کار درست پیش رفت و همه چی درست پیش میرفت تا این که دیدم با این حال که کاربر احراز هویت کرده بود ولی کاربر رو ناشناس نشون میداد بعد از چند ساعت متوجه شدم که باید در اولین کانکشن به وب سوکت توکن JWT رو هم ارسال کنم بنابراین نیاز بود اول SockJs رو به روز میکردم تا امکان ارسال پارامتر رو در حین ارتباط ارسال کنم var wrappedSocket = {
             init: function (url) {
   var authToken = AuthServerProvider.getToken();
                 if(authToken){
                     url += &#039;?access_token=&#039; + authToken;
                 }
                 stompClient = Stomp.over(new SockJS(url));
             },
             connect: function (successCallback, errorCallback) {
                 stompClient.connect({}, function (frame) {
                     $rootScope.$apply(function () {
                         successCallback(frame);
                     });
                 }, function (error) {
                     $rootScope.$apply(function () {
                         errorCallback(error);
                     });
                 });
             }      
   }از طرفی باید در فیلتر هم این موضوع رو اضافه میکردم که هم بتونم اطلاعات رو از هدر بخونم هم از پارامتر مثل کد زیر      private String resolveToken(HttpServletRequest request){ 
         String bearerToken = request.getHeader(JWTConfigurer.AUTHORIZATION_HEADER);
         if (StringUtils.hasText(bearerToken) &amp;&amp; bearerToken.startsWith(&quot;Bearer &quot;)) {
             return bearerToken.substring(7, bearerToken.length());
         }
   String jwt = request.getParameter(JWTConfigurer.AUTHORIZATION_TOKEN);
         if (StringUtils.hasText(jwt)) {
             return jwt;
         }
         return null;
     }بنابراین این دو تا تنظیم کلید حل این مشکل بود بعد از کلی فکر کردن و کمک کردن از Jhipster این مشکل رو حل کردم و دیدم اره هیپستر هم همین کارو انجام داده .&quot;یه نکته یادم نره من تقریبا هر کاری رو شروع میکنم خودم شروع کنم و بعد اگه مشکل برخورد کردم سراغ Jhipster میرم فکر میکنم این جوری دقیق تر و عمیق تر مطلب رو یاد میگیرم و کل پروژه رو بر مبنای Jhipster نمیرم &quot; اولین چیزی که به ذهنم رسید اینه. خوب آیا این ترفندها رو Jhipster جایی نوشته مگه کسی که این تجربه ها رو داخل Genrator هیپستر قرار داده قبلا با این مشکل رو درو نشده بوده . شاید اگه این ترفندها جایی بود باعث میشد من زودتر این مشکل رو پیدا کنم .سوالم اینه چرا جایی وجود نداره که این ترفندها توش قرار داده شده باشه </description>
                <category>علی اکبر عزیزخانی</category>
                <author>علی اکبر عزیزخانی</author>
                <pubDate>Sat, 03 Mar 2018 20:51:57 +0330</pubDate>
            </item>
                    <item>
                <title>اعمال دسترسی بر روی داده ها با استفاده از Hibernate Filter</title>
                <link>https://virgool.io/baharan-co/%D9%BE%DB%8C%D8%B4-%D9%86%D9%88%DB%8C%D8%B3-%D8%A7%D8%B9%D9%85%D8%A7%D9%84-%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%D8%A8%D8%B1-%D8%B1%D9%88%DB%8C-%D8%AF%D8%A7%D8%AF%D9%87-%D9%87%D8%A7-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-hibernate-filter-lnti2hzfegla</link>
                <description> یکی از موضوعاتی که تو اغلب سامانه های نرم افزاری قطعا با اون برخواهید خورد دسترسی کاربران به داده ها است . تقریبا ۶ سال است که از یه تجربه خوب در اعمال Authotization کاربرهای درسامانه های تولیدی شرکت خودمون استفاده میکنم گفتم شاید با درمیان قرار دادن اون بتونم از نظرات شما ها استفاده کنم . ما در شرکت خودمون سامانه هایی را تولید میکنیم که در این سامانه ها کاربرانی با نقشهای متفاوتی مشغول به استفاده از سامانه هستند که هر کدوم از این سامانه ها بر اساس منطق دسترسی مشخصی داده مورد نظر خود را مشاهده میکنند . برای مثال در نظر بگیرید که سازمانی داریم که به منظور مدیریت پرسنل خود از سامانه نرم افزاری ما استفاده میکند . این سازمان دارای ساختار بسیار بزرگ میباشد . و کاربرانی در این سامانه با نقش منابع انسانی باید اطلاعات پرسنلی را به روز نگه دارند . از طرفی نقش مدیر کل منابع انسانی باید بتواند تمامی اطاعات پرسنل در این سازمان را مشاهده نماید . برای انجام این مساله به این روش عمل کردیم در ابتدا نیاز داشتیم هر کاربر سطح دسترسی خود به ساختار سازمان را مشخص نماید بنابراین به کلاس دیاگرام زیر رسیدیمبنابراین هر کاربر سامانه به یک سازمان مورد نظر دسترسی دارد .بر اساسا شکل بالا هر پرسنل در یک سازمان مشغول به کار میباشد .بنابراین لازم است هر کاربر کارمند مورد نظر خود را مشاهده نماید در این جا لازم به ذکر است که سامانه های پیاده سازی شده برای persist کردن اطلاعات در جداول از Hibernate استفاده میکند بنابراین کلاس های مورد نظر به شکل زیر تنظیم شده است .الگوی پیاده سازی برای لایه های همان لایه های استاندارد هست در نظر بگیریدی که برای خواندن داده ها کارمندان باید چه متدهای نوشته شودpublic interface EmployeeRepositoy {Employee findById(Long id,);List&lt;Employee&gt; findByOrganizationId(Long orgId);List&lt;Employee&gt; allEmployee();}همانجوری که متدهای بالا را مشاهده میکنیم قرار است لیست یا یک کارمند به عنوان خروجی برگردانده شود در صورتی که نیاز باشد برای برای این متدهای یک hql معادل نوشته شود قطعا دارای شکل زیر خواهد بود @Query(“select e from Employee e where e.organizationStructure.id in (select os.id from User u join u.organizationStructures os where u.id=?#{ principal?.id })”)Employee findById(Long id);در صورتی که دقت کرده باشید بخش زیر در تمامی query ها تکرار شده است e.organizationStructure.id in (select os.id from User u join u.organizationStructures os where u.id=?#{ principal?.id })شاید همه مثالها مثل کلاس بالا دارای سه متد نباشد . امکان دارد کلاسی باشد که دارای متدهای زیادی باشد . سوال اول این است . به چه روشی این موضوع را حل کرد روش های زیر به نظر می رسد قابل انجام باشد یک: استفاده از @Where  این روش دارای مشکلات و خوبی های هست . این روش به صورت اجبار در تمامی query این فیلتر را اضافه میکند شاید نیاز باشد این فیلتر در همه حالتها اجرا نشود این روش این امکان را ندارد . مشکل دیگر عدم امکان استفاده از پارامتر در این روش هست . شاید نیاز باشد برای اعمال این منطق پارامترهایی ارسال گردد که این روش این امکان را نمیدهد . خوبی این روش این است که نیازی به فعال و غیر فعال کردن نیست و به راحتی اعمال خوهد شد دو: تعریف یه متغیر در سطح کلاس و concat کردن با query مشکل این روش این است که این امکان دارد برنامه نویس به هر دلیلی فراموش کند که این clause را به query خود concat کند . مشکل دیگر این است که این احتمال وجود دارد که در کلاس دیگری برنامه نویس روی این model یک query را اجرا نماید .در این حالت تضمینی نیست که این فیلتر اعمال شود سه: استفاده از @Filter به نظر این روش یکی از مطمین ترین روشها باشد .با استفاده از امکانی که Hibernate در اختیار ما قرار میدهد میتوان با تعریف یک فیلتر و فعال کردن ان در سطح session مطمین شد که تمامی query هایی که اجرا میشود در صورتی که دارای پیاده سازی این فیلتر در سطح مدل باشد این فیلتر در سطح آن مدل اعمال خواهد شد برای مثال </description>
                <category>علی اکبر عزیزخانی</category>
                <author>علی اکبر عزیزخانی</author>
                <pubDate>Sat, 03 Mar 2018 20:49:58 +0330</pubDate>
            </item>
            </channel>
</rss>