۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

۷ پروژه عالی جاوا که باید درباره آنها بدانید

اکوسیستم جاوا پر از ابزارها و چارچوب ها برای تقریباً هر نیاز برنامه نویسی است. در اینجا هفت پروژه منبع باز جاوا وجود دارد که نمی خواهید آنها را از دست بدهید.

اکوسیستم جاوا پر از ابزارها و چارچوب ها برای تقریباً هر نیاز برنامه نویسی است. در اینجا هفت پروژه منبع باز جاوا وجود دارد که نمی خواهید آنها را از دست بدهید.

اکوسیستم جاوا خانه طیف وسیع و متنوعی از پروژه های منبع باز است که برای برآورده کردن تقریباً هر نیاز قابل تصوری توسعه یافته اند. از دست دادن برخی از این پروژه های بزرگ آسان است. در اینجا نگاهی به هفت پروژه منبع باز جاوا برای همه چیز از توسعه برنامه های کاربردی کامل تا میکروسرویس ها، Wasm و جایگزینی برای JVM آورده شده است.

حله وادین

Hilla یک فریم ورک تمام پشته با یک انتهای پشتی مبتنی بر جاوا و یک قسمت جلویی جاوا اسکریپت است. این فریم ورک های واکنشی front-end React و Lit را پشتیبانی می کند.

Hilla به شما امکان می دهد با دستوری ساده مانند: npx @vaadin/cli init --hilla foundry-hilla یک پروژه تمام پشته جدید را داربست کنید. این یک دستور NPM است، اما یک طرح‌بندی استاندارد Maven را با یک فهرست جلویی ساخته‌شده توسط Vite اجرا می‌کند و همه چیز برای اجرا همراه با اسکریپت ./mvnw آماده است.

Hilla تایپ کردن را بین دو نیمه برنامه اعمال می کند، به این معنی که IDE شما می تواند تغییرات را در Java API و قسمت جلویی TypeScript که آن را مصرف می کند شناسایی و منتشر کند. در این چارچوب، تکمیل خودکار و refactor فقط کار است. این عملکرد از نظر احساسی شبیه به tRPC در دنیای all-TypeScript است.

Hilla همچنین پایداری را از طریق JPA (در Hibernate) با تعدادی پایگاه داده SQL مانند MySQL و PostgreSQL ادغام می کند.

این کمی شبیه jHipster است، اما نظر بیشتری دارد. این بدان معناست که هیلا از نظر فناوری‌هایی که می‌تواند به هم بچسبد انعطاف‌پذیری کمتری دارد، اما جاده‌ای هموارتر را برای حرکت در اختیار شما قرار می‌دهد. حله به خوبی نگهداری و مستند شده است. اگر نیاز به ساخت یک برنامه فول استک با جاوا دارید، و اگر React یا Lit را برای قسمت جلویی خود دوست دارید، Hilla یک چارچوب عالی برای بررسی است.

jHipster

در ادامه موضوع چارچوب های تمام پشته، jHipster داریم. jHipster رویکرد بسیار انعطاف پذیری را اتخاذ می کند که می تواند با استفاده از جاوا به عنوان میان افزار API، بسیاری از فناوری های مختلف را در یک پشته منسجم متحد کند. شما می‌توانید از میان چندین بخش جلویی واکنش‌پذیر و انواع فروشگاه‌های داده SQL و NoSQL انتخاب کنید.

مانند Hilla، jHipster با تولید یک برنامه کاربردی با یک بسته NPM، jhipster شروع می کند. ابزار -generator. مولد شما را از طریق پرسشنامه ای راهنمایی می کند که به شما ایده خوبی در مورد قابلیت های آن می دهد. (اگر با خطای ERR_PACKAGE_PATH_NOT_EXPORTED مواجه شدید، راه حل را اینجا ببینید .) 

jHipster با اجازه دادن به شما بین یک برنامه یکپارچه، یک معماری میکروسرویس یا یک دروازه، شروع می‌کند و به شما ایده‌ای از محدوده این چارچوب را می‌دهد. اگر یکپارچه را انتخاب کنید، می‌توانید با Spring WebFlux آن را به یک برنامه به سبک واکنش‌گرا تبدیل کنید. . در مرحله بعد، می‌توانید سبک‌های مختلف احراز هویت مانند JWT یا Oauth 2 را انتخاب کنید. سپس می‌توانید از میان چندین ذخیره‌گاه داده مانند SQL، MongoDB، و Cassandra انتخاب کنید و سپس یک حافظه پنهان برنامه سطح دوم مانند Ehcache، Memcached یا Redis را انتخاب کنید.

Svelte 4 ردپای کد، خروجی کامپایل شده را کوچک می کند

مولد jHipster در مرحله بعد امکان افزودن تعداد انگشت شماری فناوری دیگر را فراهم می کند: Elasticsearch برای موتور جستجوی شما، WebSockets با استفاده از Spring WebSocket، Apache Kafka به عنوان یک واسطه پیام ناهمزمان، و توسعه API-first با استفاده از OpenAPI-generator. در مرحله بعد، می‌توانید از میان چندین فریم‌ورک جلویی انتخاب کنید و در صورت تمایل، یک رابط کاربری Admin، همراه با چندین موضوع ایجاد کنید.

jHipster همچنین دارای بین المللی سازی و آزمایش است و از Maven و Gradle پشتیبانی می کند.

این قدرت بسیار زیادی است. همچنین توانایی تولید مدل های دامنه و ساختارهای داده و رابط کاربری برای همراهی با آنها وجود دارد. jHipster یک انتخاب عالی برای ساخت انواع مختلفی از برنامه های جاوا است.

GraalVM

پروژه GraalVM در مارس ۲۰۱۸ با مأموریت ارائه یک پیاده سازی گسترده تر از ماشین مجازی آغاز شد. GraalVM هر کاری را که یک JVM می تواند انجام دهد انجام می دهد و سپس برخی از آنها را انجام می دهد: اجازه می دهد تا زبان های مختلف را مصرف کند و به محیط های مختلف اجرای هدف خروجی دهد. همچنین شامل چندین سبک کامپایلر، از جمله یک کامپایلر JIT (در زمان مقرر) است که می تواند عملکرد را افزایش دهد.

GraalVM می‌تواند هر زبانی را که به LLVM کامپایل می‌شود، اجرا کند که شامل C، C++، Rust، Swift و بسیاری دیگر می‌شود. همچنین زبان های بایت کد مانند جاوا، اسکالا، کاتلین و Groovy را مدیریت می کند. و از زبان های جاوا اسکریپت، پایتون، روبی و R پشتیبانی می کند. (در آینده، می توانیم امیدوار باشیم که GraalVM از Zig پشتیبانی کند.)

این بدان معناست که ما تمام خوبی های JVM را برای همه نوع زبان ها یک بار و هرجا اجرا می کنیم. به عنوان مثال، GraalVM می تواند یک برنامه C را که در بایت کد LLVM کامپایل شده است (مانند GCC) بگیرد و با دستور lli اجرا کند. یا GraalVM می‌تواند کد C را مستقیماً به یک فایل اجرایی با clang کامپایل کند. GraalVM نسخه‌های اجرای مستقل را برای بسیاری از زبان‌ها و پلتفرم‌ها (و نه همه) خروجی می‌دهد.

همچنین از بسیاری از باینری های هدف مانند Wasm، انواع لینوکس، macOS، Windows، iOS و Android پشتیبانی می کند. برای بسیاری از اهداف، GraalVM از تصاویر بومی که بدون نیاز به نصب GraalVM اجرا می شوند، پشتیبانی می کند. همچنین به توسعه دهندگان این امکان را می دهد تا حالت های اجرا را انتخاب کنند – مانند کامپایل JIT، کامپایل AOT و تفسیر – برای تنظیم دقیق پروفایل های عملکرد.

GraalVM به خوبی با یک انجمن فعال نگهداری و مستند شده است. در مجموع، این یک پروژه قانع کننده است که در حال تبدیل شدن به نوعی ابزار زبان جهانی است. برای اطلاعات بیشتر در مورد آن به صفحه اصلی پروژه GraalVM مراجعه کنید.

موارد جدید در آپاچی کاساندرا 4.1

Micronaut

Micronaut برداشت جدیدی از توسعه جاوا است که هدف آن محیط‌های ابری و بدون سرور مدرن است. دارای ویژگی های فراوانی مانند ابزار خط فرمان برای داربست، ساخت، اجرا و آزمایش پروژه ها با طیف وسیعی از فناوری های یکپارچه است. شاید مهم‌تر از همه، Micronaut حول یک چارچوب وارونگی کنترل (IOC) با قابلیت AOT طراحی شده است که زمان راه‌اندازی را در مواجهه با پایگاه‌های کد بزرگ حفظ می‌کند.

به این پشتیبانی میکروسرویس گرا مانند کشف سرویس، ردیابی و استقرار کانتینری اضافه کنید، و Micronaut یک گزینه کاملاً فکر شده و متقاعدکننده برای توسعه جاوا مدرن است.

Micronaut یک طراح پروژه مبتنی بر وب ارائه می‌دهد که می‌توانید از آن برای درک طیف وسیعی از ابزارها استفاده کنید. که می تواند به هسته Micronaut وصل شود. این ابزار از نظر روحی شبیه به Spring Initializr یا مولد آنلاین jHipster است، اما چرخش خاص خود را دارد. چیزها Micronaut در قلب خود واکنش‌پذیر است و از پیاده‌سازی‌های واکنشی مانند RxJava و Reactor پشتیبانی می‌کند و هر چیز دیگری در بالای این ستون مرکزی ساخته شده است. Micronaut شامل سرویس گیرنده HTTP واکنشی خود است.

هر گره در Micronaut یک جزء واکنشی است که می تواند در یک معماری میکروسرویس بزرگتر ترکیب شود، با استفاده از یک کارگزار خدمات مرکزی مانند ZooKeeper یا Eureka.

Micronaut اتخاذ بهترین روش‌ها را در چارچوب یک مرحله‌ای که از نظر وسعت مشابه Spring است، اما بیشتر بر جزئیات اجرای ملموس متمرکز است، آسان می‌کند. این یک انتخاب وسوسه انگیز برای توسعه دهندگانی است که بر روی محیط های ابری و بدون سرور مبتنی بر جاوا کار می کنند.

MicroStream

در تکامل پایداری شی گرا مبتنی بر جاوا، MicroStream ممکن است اصلاح مفهومی نهایی را نشان دهد. این گراف شی زمان اجرا شما را همانطور که هست می گیرد و به آن اجازه می دهد تا با معنای برنامه نویسی شی گرا در هر تعداد ذخیره داده زیربنایی تداوم یابد.

MicroStream به شما امکان می‌دهد در قلمرو فکری اشیا و ویژگی‌ها باقی بمانید در حالی که فریم‌ورک بیشتر کار ذخیره و بازیابی آنها را انجام می‌دهد. به‌عنوان یک توسعه‌دهنده، شما همچنان باید نگرانی‌های متا مانند استراتژی‌های واکشی و مرزهای پایدار را در نظر بگیرید، اما اینها به سادگی و بدون تداخل با کد برنامه تعریف می‌شوند، که دقیقاً مانند آن بدون فکر کردن به پایداری کار می‌کند.

MicroStream شامل مفهوم root است که ریشه درخت پایداری را تعریف می‌کند. همانطور که در فهرست ۱ نشان داده شده است، یک برنامه می تواند بیش از یک ریشه داشته باشد.


// Saving
EmbeddedStorageManager manager = EmbeddedStorage.start();
manager.setRoot(myObject);
manager.storeRoot();
//Restoring
EmbeddedStorageManager storageEngine = EmbeddedStorage.start();
myObject = (MyClass) storageEngine.root();

MicroStream یک برداشت جدید جالب از ماندگاری شی در جاوا است و قطعاً ارزش دیدن هر پروژه جدیدی را دارد.

TeaVM

کامپایل جاوا به Wasm (WebAssembly) هنوز هم چیزی شبیه به مرز است، اما TeaVM امروزه این امکان را فراهم می‌کند. TeaVM از انتقال بایت کد جاوا به جاوا اسکریپت (مشابه Google Web Toolkit) و Wasm پشتیبانی می کند. از اینها می توان برای ایجاد برنامه های کاربردی وب استفاده کرد که از کد جاوا و کتابخانه ها از داخل مرورگر استفاده می کنند.

چگونه آسیب پذیری Log4j را در برنامه های خود شناسایی کنیم

TeaVM بدین صورت کار می کند که ابتدا کد را به یک نمایش متوسط ​​سطح پایین کامپایل می کند، که سپس بیشتر بهینه شده و به دستورالعمل های WebAssembly ترجمه می شود. کد به دست آمده بسیار کارآمد است و می تواند در هر مرورگر مدرنی که از WebAssembly پشتیبانی می کند اجرا شود.

یکی از مزایای اصلی TeaVM پشتیبانی آن از فریمورک های محبوب جاوا مانند Spring و Hibernate است. توسعه‌دهندگان می‌توانند از این چارچوب‌ها برای ساخت برنامه‌های وب پیچیده و تمام پشته استفاده کنند، سپس کد را برای استقرار مبتنی بر وب در Wasm کامپایل کنند.

اگرچه TeaVM هنوز چیزی شبیه به یک پروژه نوپا است – سازنده از آن برای کار روزانه خود استفاده می کند و سپس اصلاحات و بهبودها را به مخزن منبع باز ارائه می دهد – به نظر می رسد در حال حاضر بهترین مسیر را از جاوا به Wasm ارائه می دهد.

به طور کلی، TeaVM ابزاری قدرتمند و انعطاف‌پذیر برای توسعه برنامه‌های کاربردی وب در جاوا است و راه جالبی برای کار با جاوا در مرورگرها و سایر محیط‌های Wasm ارائه می‌دهد.

Apache Flink

Flink در سال ۲۰۱۱ آغاز شد و به یک چارچوب پردازش رویداد پیشرو تبدیل شد. این توسط بسیاری از نام‌های معروف مانند Airbnb و Netflix برای پردازش هم‌زمان استفاده می‌شود و در بسته‌ای که مدیریت نسبتاً آسانی دارد، قدرت زیادی در دستان شما قرار می‌دهد.

Apache Flink تحمل خطا و مدیریت حالت را در یک فرم توزیع‌شده و کانتینر پسند ترکیب می‌کند. می تواند به طور خودکار بالا و پایین شود تا بار را با مقیاس بندی پویا مدیریت کند.

اگرچه اجرای Flink در Docker با Kubernetes معمولی است، Flink همچنین می‌تواند روی زیرساخت‌های بدون سرور مانند AWS Lambda، Azure Functions و Google Cloud Functions با استفاده از چارچوبی مانند Apache Beam اجرا شود. این مزیت فقط پرداخت برای منابع محاسباتی مورد استفاده در طول پردازش را فراهم می‌کند و امکان مقیاس‌گذاری آسان‌تر و کارآمدتر را فراهم می‌کند.

Flink قابلیت‌های زیادی در زیر کاپوت دارد، اما درک چیزهای ساده نسبتاً آسان است. به عنوان مثال، در فهرست ۲، Flink سوکتی را در پورت ۹۹۹۹ تماشا می کند و کلمات را در متن دریافت شده در آنجا می شمارد و داده ها را به کنسول ارسال می کند.


DataStream<String> text = env.socketTextStream("localhost", 9999);

DataStream<Tuple2<String,Integer>> wordCounts = text
    .flatMap(new FlatMapFunction<String, Tuple2<String,Integer>>() {
        public void flatMap(String value, Collector<Tuple2<String,Integer>> out) {
            for (String word : value.split(" ")) {
                out.collect(new Tuple2<String,Integer>(word, 1));
            }
        }
    })
    .keyBy(0)
    .sum(1);

wordCounts.print();

می‌توانید ببینید که Flink با یک سبک عملکردی کار می‌کند، و خود پلتفرم با گسترش عملکرد به زیرساخت‌های ابری به روشی مقیاس‌پذیر و مقاوم در برابر خطا، مدیریت می‌کند. در مجموع، این یک پروژه چشمگیر برای رسیدگی به پردازش رویداد در زمان واقعی است.