JavaPoly.js: لایبرری جاوااسکریپتی برای ساپورت JVM در مرورگر


JavaPoly.js یک لایبرری است که با استفاده از آن می‌توان JVM (ماشین مجازی جاوا) را داخل مرورگر اجرا کرد. به عبارتی، JavaPoly.js این امکان را به دولوپرها می‌دهد تا کدهای نوشته شده با زبان جاوا را با استفاده از زبان جاوااسکریپت در داخل مرورگر اجرا کنند.

JavaPoly.js این امکان را به کاربران می‌دهد تا حتی اگر جاوا روی سیستم آن‌ها نصب نباشد، بتوانند کدهای جاوا را داخل مرورگر اجرا کنند. برای مثال، به سورس زیر توجه کنید:

<!-- Include the Polyfill -->
<script src="https://www.javapoly.com/javapoly.js"></script>

<!-- Write your Java code -->
<script type="text/java">
  package com.demo;
  import com.javapoly.dom.Window;

  public class Greeter
  {
    public static void sayHello(String name)
    {
      Window.alert("Hello " + name + ", from Java!");
    }
  }
</script>

<!-- Invoke your Java code from Javascript -->
<script type="text/javascript">
  com.demo.Greeter.sayHello("world");
</script>

علاوه بر این، بسیاری از لایبرری‌های زبان Java را نیز به سادگی ایمپورت کردن لایبرری‌های جاوااسکریپت، می‌توان به داخل برنامه اضافه کرد:

<!-- Include the Polyfill -->
<script src="https://javapoly.com/javapoly.js"></script>
<!-- Include your favorite Java libraries (jar files) -->
<script type="text/java" src="https://example.com/jimboxutilities.jar"></script>

سپس لایبرری‌های ایمپورت شده را از طریق جاوااسکریپت به واسطهٔ نام کامل‌شان می‌توان فراخوانی کرد:

<script type="text/javascript">
  com.yourpackage.Foo.doSomething();
  com.yourpackage.Noise.doSomethingElse();
</script>

نکته‌ای که در ارتباط با این لایبرری باید مد نظر داشت این است که زبان برنامه‌نویسی جاوا اصطلاحاً Multi-threaded است اما این در حالی است که زبان جاوااسکریپت Single-threaded می‌باشد:

var promise = com.mypackage.MyClass.getSomeValue();
promise.then(function(result) {
  console.log(result); // "Stuff worked!"
}, function(err) {
  console.log(err); // Error: "It broke"
});

از همین روی، مادامی که مرورگر صبر می‌کند تا JavaPoly.js پاسخی را بازگرداند، به منظور جلوگیری از توقف کار مرورگر، تمامی فراخوانی‌های JVM اصطلاحاً Asynchronous صورت می‌گیرند.