Oracle GraalVM

Recent Posts

Accelerating OCI applications with GraalVM Enterprise

Oracle GraalVM Enterprise Edition is a high performance runtime that provides significant improvements in application execution and efficiency on premise and in the cloud.  For cloud, the good news is that GraalVM Enterprise is included in all Oracle Cloud Infrastructure (OCI) subscriptions so you can use it for no additional charge.  Let's see how to get started with GraalVM Enterprise in OCI and run some examples in a virtual machine.  While GraalVM Enterprise's improved performance and reduced resource requirements can lead to cost savings for OCI customers, OCI itself is running services on GraalVM Enterprise.  For example, the Oracle Cloud Infrastructure Monitoring service, which captures and provides analysis of service health and performance metrics, has reported a 5% reduction in CPU consumption and a 10% increase in the number of transactions per second when using GraalVM Enterprise.  For OCI user workloads, GraalVM Enterprise can be used in the following deployment scenarios: Bare Metal and Virtual Machines (OCI Compute) Containers (Oracle Container Engine for Kubernetes) Functions (Oracle Functions) Each of those deserves separate in-depth coverage, but for now we will focus on the first scenario, using GraalVM Enterprise in an OCI virtual machine compute instance.  We'll start by installing GraalVM Enterprise into our virtual machine and then run some samples to illustrate usage. First, we'll build and deploy the well known Spring PetClinic web application and make it accessible on the public internet.  Then we will go over a JMH benchmark to measure the performance of a Java application using the GraalVM compiler versus the JDK's default C2 compiler.  Finally, we will build and run a Micronaut microservice example, and then we'll compile it using GraalVM's native image ahead-of-time compiler to generate a native Linux executable. In an OCI VM there are two ways to install GraalVM Enterprise: Use YUM to install the necessary Linux packages Download and install GraalVM Enterprise manually We'll use YUM as this is the easiest and recommended approach.  For manual installation, consult the instructions in the reference guide.  If you have an OCI VM ready you can use that or create a new one.  If you need to learn how to create a VM you can work through the first Linux instance tutorial.  We'll use a VM.Standard.E3.Flex with the Oracle Linux 7.8 pre-built image that we'll call demo-instance. You can connect to an instance using a Secure Shell (SSH) or other remote desktop service.  To use SSH on a Unix-style system you would execute a command like the following, substituting in your VM's public IP address: ssh -i ~/.ssh/id_rsa opc@INSTANCE_PUBLIC_IP For example, ssh -i ~/.ssh/id_rsa opc@ The key file reference ~/.ssh/id_rsa is the name of the file containing the private SSH key associated with the public key used during the instance creation, opc is the default user name for the Oracle Linux image, and is the public IP address of the demo instance. For more details, refer to the Connecting to Your Linux Instance Using SSH guide. Oracle GraalVM Enterprise Edition RPMs are available in the OCI YUM repository, which means that OCI users can install GraalVM Enterprise using yum — a package-management utility for the Linux operating systems. Once you are ssh'd into your instance, verify what GraalVM RPMs are available for installation.  First refresh the repo data and search for available GraalVM Enterprise packages: $ yum check-update $ sudo yum provides graalvm* The resulting list is huge as it includes both current and previous versions of all of the available components, but we are looking for just the latest "Oracle GraalVM Enterprise Edition JDK8 Java Development Kit". To install GraalVM Enterprise version 20.2 with JDK 8 run the following command: $ sudo yum install graalvm20-ee-8-jdk-20.2.0-1.el7.x86_64 After installation, the GraalVM Enterprise binaries will be stored in /usr/lib64/graalvm.  You can verify the installation by checking the Java version: $ java -version java version "1.8.0_261" Java(TM) SE Runtime Environment (build 1.8.0_261-b33) Java HotSpot(TM) 64-Bit Server VM GraalVM EE 20.2.0 (build 25.261-b33-jvmci-20.2-b03, mixed mode) Let's set JAVA_HOME and point the PATH variable to the GraalVM Enterprise install's bin folder in the bash configuration with the following commands: $ echo "export JAVA_HOME=/usr/lib64/graalvm/graalvm20-ee-java8" >> ~/.bashrc $ echo "export PATH='$JAVA_HOME'/bin:'$PATH' " >> ~/.bashrc Once you run the following command to get the change into the current SSH session we'll be ready to start: $ source ~/.bashrc Time to run some examples! Spring PetClinic GraalVM Enterprise runs Java applications out of the box on either a local or virtual host.  We are going to demonstrate that using the well-known Spring PetClinic sample application.  With a few commands we can download the PetClinic source, build it, and get it running: $ wget -O spring-petclinic.zip https://github.com/spring-projects/spring-petclinic/archive/main.zip $ unzip spring-petclinic.zip $ cd spring-petclinic-main $ ./mvnw package  $ java -jar target/*.jar The Maven build pulls down many packages so it can take a couple of minutes. To visit PetClinic from your desktop browser we must ensure that the Linux host firewall and OCI security lists allow traffic to the virtual machine's port 8080.  Each compute instance in OCI is attached to a Virtual Cloud Network (VCN), which is comprised of a collection of subnets that can be configured to enable network connections to an instance using custom ingress rules.  In the OCI web console, navigate to your VCN, then to the Public Subnet connected to the instance, and open its Default Security List. Press "Add Ingress Rule" and fill in the following data:   Make sure the destination port is 8080.  Once you've created the ingress rule, restart the firewall in your running instance: $ sudo firewall-cmd --permanent --add-port=8080/tcp $ sudo systemctl reload firewalld You should be able to connect to the PetClinic running on OCI using the public IP of the instance and port 8080, for example, As long as your firewall and VCN settings permit network access it is fairly easy to deploy a Spring Boot or any other server-side application using GraalVM Enterprise! JMH Performance Benchmark The second example we are going to run is a JMH benchmark application to assess its performance using the GraalVM Enterprise compiler and the JDK C2 compiler. The benchmark creates a stream from array elements and maps each number using several mapping functions. GraalVM Enterprise achieves performance improvements of between 2x and 5x on Java Stream programs. First, download the GraalVM examples and unzip them: $ wget -O graalvm-demos.zip https://codeload.github.com/graalvm/graalvm-demos/zip/master $ unzip graalvm-demos.zip Once unzipped, cd into the graalvm-demos-master/java-simple-stream-benchmark directory: $ cd graalvm-demos-master/java-simple-stream-benchmark The benchmark project is built with Maven. Unlike the previous PetClinic Spring application, this demo does not come with a Maven Wrapper (.mvnw) and Oracle Linux 7 does not include Maven by default, so we will need to install it using yum: sudo yum install rh-maven35 Once installed we need to add a Maven script to your .bashrc: $ echo "source /opt/rh/rh-maven35/enable" >> ~/.bashrc $ source ~/.bashrc With Maven installed and configured, we can build and run the benchmark with the GraalVM Enterprise JIT compiler: $ mvn package $ java -jar target/benchmarks.jar The JavaSimpleStreamBenchmark.testMethod is executed with 3 iterations to allow the JIT compiler to warmup before it samples the performance. The benchmark result is in nanoseconds per operation which means lower numbers are better.  Now let's run this benchmark on the same JVM (GraalVM Enterprise), but without the GraalVM compiler by adding the -XX:-UseJVMCICompiler option. With this option, the JVM will use the C2 compiler that is default in most JDKs: $ java -XX:-UseJVMCICompiler -jar target/benchmarks.jar  The difference in score results is just striking!  The average number of nanoseconds per operation drops from  ~370.000 with C2  to ~10.000 with GraalVM Enterprise — 30x faster! Your performance measurement should be similar. Micronaut Microservices For our final example we are going to run a Micronaut application on GraalVM Enterprise with the JIT compiler and then as compile that same Java application into a native executable.  Download example sources and unzip: $ wget -O micronaut-creating-first-graal-app-master.zip https://codeload.github.com/micronaut-guides/micronaut-creating-first-graal-app/zip/master $ unzip micronaut-creating-first-graal-app-master.zip Change to the micronaut-creating-first-graal-app-master directory, build and run the example with Gradle Wrapper in a JVM mode: $ cd micronaut-creating-first-graal-app-master $ ./gradlew assemble $ ./gradlew run The application is started on port 8080. The Micronaut @Controller annotation is mapped to the /conferences path so to obtain a random conference name we can do a GET on http://<public_IP_address>:8080/conferences/random, for example: Now let's terminate the JVM and generate a native Linux executable with GraalVM Enterprise Native Image.  By design, the Micronaut framework does not rely on reflection or dynamic class loading so it works well with GraalVM Enterprise Native Image. Native Image comes as a separate installable so we need to add it to the base installation. Search for a proper package name with yum and then install it: $ yum search native-image Again you'll see various available versions. But we're using GraalVM Enterprise 20 with JDK 8 support so let's install the corresponding Native Image package and compile our application ahead-of-time: $ sudo yum install graalvm20-ee-8-native-image.x86_64 $ native-image --no-fallback --no-server -cp complete/build/libs/complete-0.1-all.jar example.micronaut.Application $ ./micronaut-graal-app Native image compilation times depend on application size and complexity and may take some time on low powered VMs. Let's compare startup time when running the Micronaut application on the JVM and as a native image: It starts 60x faster! The executable is a self-contained binary and does not require a JDK to run which makes it an easy way to distribute applications.  It's also quite small at only 60MB. Conclusion High performance, fast startup, and lower CPU and memory consumption make GraalVM Enterprise the perfect platform for cloud deployed Java applications.  Many of the Oracle Cloud Infrastructure services you're using are powered by GraalVM Enterprise, and you can take advantage of it too at no additional cost — it is available free of charge to all OCI users to improve the performance of their workloads and reduce their cloud resource consumption. If you would like to try GraalVM Enterprise on OCI but do not have an account, you can sign up for the Oracle Cloud Free Tier program. 

Oracle GraalVM Enterprise Edition is a high performance runtime that provides significant improvements in application execution and efficiency on premise and in the cloud.  For cloud, the good news is...

Optimizing Machine Learning Performance at Netsuite with GraalVM and NVIDIA GPUs

Netsuite used GraalVM and grCUDA to build fast and highly accurate machine learning models. Let's look at how they accomplished it. Creating a next generation recommendation system at NetSuite NetSuite provides a set of cloud-based business management services encompassing ERP, Financials, CRM, and e-commerce for more than 19,000 organizations. The NetSuite technology stack is based on Java SE and Oracle Database, which is deployed in Oracle data centers all over the globe. One of the most popular NetSuite products is SuiteCommerce — an e-commerce platform combining ERP, financials, order management, and more. The Netsuite engineering team has been working on its next generation recommendation system, which targets a few different use cases. One is a general recommendation widget — a “Recommended for You” block that you can often see on e-commerce or video streaming platforms. Another use case is “searchandising,” which augments search results based on ML algorithms.   Research Recommender systems typically provide recommendations based on either collaborative filtering or content-based filtering. Content-based filtering creates recommendations by comparing the content of the items and the user profile. For example, if you select science fiction movies as your favorite genre, or watched many of those in the past, your streaming service will likely recommend you more of this genre. Collaborative filtering methods are based on gathering and analyzing information about user preferences and behavior from many users, and predicting what the user will like based on their similarity to others. To create a better recommendation system, the team adopted one the most common collaborations techniques — matrix factorization. Matrix Factorization (Pulaparthi, N.V.)   Matrix factorization algorithms work by decomposing the user-item interaction matrix into the product of rectangular matrices of lower dimensionality (rank) that represent users and items. The version, implemented by the Netsuite team, uses implicit feedback, like clicks and transactions. Once data is computed, it’s easy to retrieve prediction for user-item relevancy (personal recommendations), or item-item similarity (helpful in cross-sell recommendations). After deciding to go with the matrix factorization approach, the team started exploring prototypes in Java, Scala, Spark and Python, and narrowed the solution down to two libraries: Implicit by Ben Frederickson and LightFM by Maciej Kula. Solution Both of the ML models mentioned above are fast and work well, but the issue is that they are both written in Python, whereas Netsuite is based on Java. The team decided to go with GraalVM Enterprise, since it supports both Java and Python along with other languages. For Python, GraalVM Enterprise offers high performance, and easy, consistent language interoperability. Another part of the solution is GPU acceleration using grCUDA — an open-source language binding that allows developers to share data between NVIDIA GPUs and GraalVM Enterprise languages (R, Python, JavaScript), and also launch GPU kernels. The team implemented the performance critical components in CUDA for the GPU, and used grCUDA from Python to exchange data with the GPU and to invoke the GPU kernels. Recommender system prototype architecture   Results To deploy the prototypes, the team used the following setup: a virtualized NetSuite datacenter on Oracle Cloud Infrastructure; deployed on a combination of VM and bare-metal machines (also using NVIDIA GPUs); Installed GraalVM Enterprise, CUDA, GraalVM Python implementation, and grCUDA; Netsuite running on GraalVM Enterprise. Model computation time for different implementations   The graph above compares computation time of two models: a Java model created with EJML, and a Python & grCUDA model. As you can see, the matrix factorization is significantly faster when using GraalVM Enterprise and grCUDA.     Conclusion If you’re exploring ways to use Python machine learning models in your applications, it’s worth looking into GraalVM Enterprise and grCUDA for best performance. As always, we would love to hear from you! If you have feedback or feature requests for our Python implementation or for GraalVM in general please create an issue in our GitHub repository or talk to us on Twitter: @graalvm. This project was first presented by Lukas Stadler and Radek Obořil at Devoxx Belgium. View the recording to learn more: https://www.youtube.com/watch?v=a1ZLEDN9BMc. It was also presented at NVIDIA’s GPU Technology Conference. Register for GTC Digital and view the session recording on-demand here: Simplifying GPU Access: A Polyglot Binding for GPUs with GraalVM [S21269].

Netsuite used GraalVM and grCUDA to build fast and highly accurate machine learning models. Let's look at how they accomplished it. Creating a next generation recommendation system at NetSuite NetSuite...

GraalVM at Oracle Code ONE and Oracle OpenWorld

It is going to be a big year for us at Oracle Code One and Oracle OpenWorld this year. The co-located developer and user conferences take place September 16-19 in San Francisco. If you haven't registered, you can still do so here. Registering for either Code One or Oracle OpenWorld gets you access to both conferences. GraalVM and Oracle GraalVM Enterprise Edition are the subject of 29 sessions, 2 hands on labs and our GraalVM Community Edition Birds of a Feather talk. With all the amazing sessions being presented by Oracle engineering as well as representatives from companies and open source projects from around the world, there is so much rich content to choose from. So, let’s take a closer look at a few we’d like to highlight: Join Thomas Wuerthinger as he looks back at recent history and then discusses the future of this project bolstered by its phenomenal community support in the GraalVM Vision and Roadmap session on Monday, September 16 at 4:00pm in Moscone South, room 203. Discover the advantages of and future plans for Oracle GraalVM Enterprise Edition with Eric Sedlar, Vice President and Development Director of Oracle Labs, on Tuesday, September 17 at 3:00pm in Moscone South, room 151D.  Using GPUs in your applications? Hear what Nvidia and GraalVM are up to on Wednesday, September 18 at 6:00pm, Moscone South, room 314. Want to hear about one company's journey to migrate an entire language to GraalVM? Join Jackie Haynes and Zach Fernandez in “One VM to Rule Them All” as they discuss implementing Goldman Sach's in-house language, Slang, in GraalVM. Get the inside story from Zach and Jackie at 11:30am on Wednesday, September 18 in Moscone South, room 310. Get hands on with GraalVM Native Image, or go serverless with Fn, GraalVM  and Kubernetes in our hands on labs; both labs are on Wednesday in Moscone West, 3024B. Meet GraalVM experts at the Groundbreakers Hub "Experts Exchange" from 3:00pm to 4:00pm Monday and Tuesday, September 16 and 17. Visit us in the Hackergarten and try out GraalVM Enterprise on Monday 12:00 pm - 2:00pm, Tuesday 11:00am - 1:00pm and Wednesday 11:00am - 1:00pm. Don't miss Edward Screven's Solution Keynote: Cloud Platform and Middleware Strategy and Roadmap on Tuesday at 12:30 in the YBCA Theater. And whether you are attending the conferences or not, you can always grab a beer and come see our latest demo at the Developer Appreciation event on Sunday, September 15 at The Thirsty Bear. No conference pass is required, but registration is – drop us a note if you’d like a ticket.  There is much to learn and take advantage of – see it all and add it to your schedule here. Here is everywhere GraalVM will be each day: Monday Hackergarten 12:00 PM – 02:00 PM Bringing Python Everywhere with GraalVM [DEV4042] Tim Felgentreff, Oracle Moscone South 302, 01:30 PM - 02:15 PM Helidon Flies Faster on GraalVM [DEV5356] Peter Nagy, Principal Product Manager, Oracle Tomas Langer, Consulting Member of Technical Staff, Oracle Moscone South 203, 01:30 PM - 02:15 PM Reactive Performance on GraalVM [DEV1878] Chris Thalinger, Staff Software Engineer, Twitter, Inc. Oleh Dokuka, Dev Rel / Principal Software Engineer, Netifi, inc Moscone South 201, 02:30 PM - 03:15 PM Evolving Java for the Microservice and Serverless Era [DEV2556] Graeme Rocher, Micronaut & Grails Project Lead, Object Computing Moscone South 202, 02:30 PM - 03:15 PM Meet the Experts 03:00 PM – 04:00 PM Making the Cloud More Efficient with GraalVM [DEV4877] David Delabassee, Software Evangelist, Oracle Amitpal Singh Dhillon, Oracle Moscone South 302, 04:00 PM - 04:45 PM Node.js: Just as Fast, Higher, and Stronger with GraalVM [DEV3949] Thomas Wuerthinger, Oracle Moscone South 214, 05:00 PM - 05:45 PM Tuesday Hackergarten 11:00 AM – 01:00 PM GraalVM Vision and Roadmap [DEV3726] Thomas Wuerthinger, Oracle Moscone South 306, 11:00 AM - 11:45 AM JavaScript and Python Code in the Database with GraalVM and Multilingual Engine [DEV4074] Scott Lynn, Director of Product Management, GraalVM, Oracle Matthias Brantner, Oracle Harshad Kasture, Oracle Moscone South 205, 11:30 AM – 12:15 PM Solution Keynote: Cloud Platform and Middleware Strategy and Roadmap [SOL6286] Edward Screven, Chief Corporate Architect, Oracle YBCA Theater, 12:30 PM - 01:15 PM Meet the Experts 03:00 PM – 04:00 PM Save Money, Improve Reliability with Oracle GraalVM Enterprise Edition [Pro6516] Eric Sedlar, Vice President and Development Director, Oracle Labs, Oracle Scott Lynn, Director of Product Management, GraalVM, Oracle Moscone South 151D, 03:15 PM – 4:00 PM GraalVM and Microservices: The Last Crusade [DEV3790] Cesar Hernandez Mendoza, Senior Software Enginner, Tomitribe Roberto Cortez, Principal Architect, Talkdesk Moscone South 201, 05:00 PM - 05:45 PM Cross-Platform Development with GraalVM [DEV3907] Moscone South 301, 06:00 PM - 06:45 PM Wednesday Hackergarten 11:00 AM – 01:00 PM GraalVM Native Images: The Best Startup Solution for Your Applications [DEV3920] Christian Wimmer,Oracle Moscone South 301, 12:30 PM - 01:15 PM Taking Java Serverless with the Fn Project, GraalVM, and Kubernetes - BYOL [HOL2966] Chad Arimura, Oracle Owen Strain, Oracle Amitpal Singh Dhillon, Oracle Moscone West 3024B, 02:45 PM – 04:45 PM Maximizing Performance with GraalVM [DEV3730] Thomas Wuerthinger, Oracle Moscone South 203, 04:00 PM - 04:45 PM GraalVM Native Image - BYOL [HOL6276] Julia Kindelsberger, Program Manager, Oracle Duncan MacGregor, Oracle Moscone West 3024B, 05:00 PM – 07:00 PM Sulong: High-Performance LLVM Bitcode Interpreter Built on the GraalVM [DEV3869] Evgeny Mandrikov,Tech Lead, SonarSource Moscone South 308, 06:00 PM - 06:45 PM Simplifying NVIDIA GPU Access: A Polyglot Binding for GPUs with GraalVM [DEV6097] Rene Mueller, Sr AI Developer Technology Engineer, NVIDIA Moscone South 314, 06:00 PM - 06:45 PM Building Microservices with Micronaut: A Full-Stack JVM-Based Framework [DEV3037] Michael Redlich, Past President, Amateur Computer Group of New Jersey Moscone South 303, 06:00 PM - 06:45 PM Thursday Building a DSL with GraalVM [DEV1124] Maarten Mulders, IT Architect, Info Support Moscone South 310/311, 09:00 AM - 09:45 AM GraalVM Community Edition Meetup [BOF6277] Julia Kindelsberger, Program Manager, Oracle Stepan Sindelar, Principal Member of Technical Staff, Oracle Moscone South 305, 11:15 AM – 12:00 PM JVM Comparison: Benchmark Performance of Different JDK/JVM Combos [DEV3470] Donald Raab, Managing Director, BNY Mellon Chandra Guntur, Director, Bank of New York Mellon Moscone South 203, 11:15 AM - 12:00 PM Faster R with FastR by GraalVM [DEV4031] Stepan Sindelar, Principal Member of Technical Staff, Oracle Moscone South 307, 12:15 PM - 01:00 PM Quarkus in Real-World Deployments [DEV3914] Bruno Baptista, Software Engineer, Talkdesk Roberto Cortez, Principal Architect, Talkdesk Moscone South 306, 12:15 PM - 01:00 PM Deploying TruffleRuby: How to Get the Best out of TruffleRuby and GraalVM [DEV4055] Duncan MacGregor,Oracle Moscone South 313, 01:15 PM - 02:00 PM Make Data Scientists Happy: Polyglot Database Functions and Procedures on GraalVM [DEV3727] Moscone South 310/311, 01:15 PM - 02:00 PM Quarkus + GraalVM: JPA Apps from Live Reload to 10 ms Boot and 15 MB of RSS [DEV2615] Michael Simons, Senior Software Engineer, Neo4j, Inc. Michael Hunger, Lead Neo4j Labs, Neo4j Moscone South 302, 01:15 PM - 02:00 PM Quarkus: Fast, Small, Innovative, and Native? [DEV1895] Rafael Benevides, Cloud-Native Development Advocate, Oracle Moscone South 202, 02:15 PM - 03:00 PM Polygot Java EE on GraalVM [DEV3446] Ryan Cuprak, Formulation Applications R&D Development Senior Manager, Dassault Systemes Moscone South 202, 03:15 PM - 04:00 PM We look forward to seeing you there!

It is going to be a big year for us at Oracle Code One and Oracle OpenWorld this year. The co-located developer and user conferences take place September 16-19 in San Francisco. If you haven't...

Developing Microservices with GraalVM Enterprise Edition + Micronaut on Oracle Cloud

  Microservices have been one of the emerging technologies and are beginning to get mainstream adoption thanks to several other emerging technologies like containerization, cloud but most importantly the business demands to be agile, scalable and fast. A well-written article — Why Microservices Will Become a Core Business Strategy for Most Organizations by Dion Hinchcliffe gives a good summary on the business impact of Microservices. Why Oracle GraalVM Enterprise Edition?   GraalVM Enterprise Edition 19.0 is a new product released by Oracle after putting in years of investments in research and productization and now it is ready for production deployment. GraalVM Enterprise Edition is a high-performance, embeddable, polyglot Virtual Machine for running applications written in JavaScript, Python, Ruby, R, JVM-based languages like Java, Scala, Kotlin, and LLVM-based languages such as C and C++ and allows efficient interoperability between programming languages. A list of benefits of GraalVM Enterprise Edition can be viewed on GraalVM Enterprise Edition's website. Where do GraalVM Enterprise Edition and Microservices come together? One of the features of GraalVM Enterprise Edition is native-images (available as an early adopter at the point of writing this) that works with many Java microservices frameworks. Projects such as Quarkus, Micronaut and Helidon have accepted this technology as native-images significantly reduce runtime memory requirements and startup time. What are we going to do ? In this article, we will be showing how we can develop microservices with GraalVM Enterprise Edition and Micronaut on Oracle Cloud Infrastructure (OCI). The diagram below depicts the cloud services we are using in this setup and how each of the cloud services interact with one another. Let’s Get Started (Working with Windows 10) Steps Summary Summary of steps in this hands-on exercise Step 1: Software Installation IntelliJ CE for Windows (I prefer this) Plugins: GIT, Terraform, Docker Docker for Windows 10 (increase the memory allocation to Docker if system exit during native-image generation) Micronaut KubeCtl OCI Tool for Windows Step 2: Create a project in ODCS Create a Project and setup a GIT repository Project provisioning on ODCS Clone the sample project from GitHub to ODCS If you are working in a team, add your team members and give them appropriate rights. Step 3 (Optional): Using IntelliJ for your development. If you are not making any changes to the codes or configurations, proceed directly to Step 4. Check out project IntelliJ → VCS | Checkout from Version Control | Git Step 4: Setup Docker Repository on OCIR Create a repository — the name will be used to make the changes in the wercker.yml / kubernetes_deployment.template.yaml Ensure that it is set to public (this is to save a few more steps to setup secrets, if you know how to deal with K8S secrets, go ahead and make this private) Step 5: Setting up OKE instance There are 2 ways that you can setup OKE — using the web UI (follow this tutorial) or terraform scripts. Upon successful creation of your OKE instance, get the values needed for the Wercker’s environment in Step 8. Ensure your Kubernetes are running by following this set of instruction. Download your kubeconfig Run your Kubernetes Dashboard Step 6: Setup Wercker After login into Wercker, Click on (+) and “Add Application”. Go through the wizard. Select the “User”, and SCM → Oracle Developer Cloud Service Select the repository you have created for this project and complete the setup wizard. Step 7: Creating the Wercker Pipeline In the sample code, there are 2 pipelines in the workflow (build, deploy-to-oke). This pipeline will be triggered once a new check-in is pushed to the Master branch. The build pipeline will compile the codes, create a docker image and push it to the image repository and the deploy-to-oke will then take the newly created image from the OCIR to be deployed on OKE. A good example of Wercker in general can be found here. Step 8: Define the Wercker Environment These environment variables are important for the tutorial. For the Wercker pipeline these are the key variables needed. Step 9: Modify the config files and Start the Wercker Pipeline Make a modification to your the wercker.yml and kubernetes_deployment.template.yaml (Edit lines marked with #TODO:) Commit and push the to files to the master branch to trigger the Wercker pipeline Step 10: Check your K8s dashboard and access the application Enter: http://<external_endpoints>/meetup/random on your browser (Random conferences) Enter: http://<external_endpoints>/abs/java/<number> (Absolute number)   Try GraalVM Enterprise Edition now:  GraalVM Enterprise Edition is free for development and evaluation usage from the Oracle Technology Network.  GraalVM Enterprise Edition is available for purchase and is free on Oracle Cloud. The full documentation for GraalVM Enterprise Edition is now available on the Oracle documentation page.   Keep an eye out for more information via blog posts on graalvm.org. Credit to Joseph Che for the codes

  Microservices have been one of the emerging technologies and are beginning to get mainstream adoption thanks to several other emerging technologies like containerization, cloud but most importantly...

For Building Programs That Run Faster Anywhere: Oracle GraalVM Enterprise Edition

Today, Oracle is announcing Oracle GraalVM Enterprise Edition. GraalVM Enterprise is built on the global standard for enterprise-class application development, Java SE.  GraalVM Enterprise is a multilingual virtual machine, and delivers even higher efficiency, better isolation and greater agility for enterprises in cloud and hybrid environments. GraalVM is ideal for cloud native environments because it starts services up to 100X faster and reduces memory usage up to 5X by compiling programs, including Java applications, ahead-of-time. Fast startup and low footprint makes GraalVM excellent for running microservices, Function-as-a-Service and service mesh.   Running a Netty.io microservice without GraalVM Enterprise and with GraalVM Enterprise Native Image.   GraalVM core features include: GraalVM Native Image, available as an early access feature –– allows scripted applications to be compiled ahead of time into a native machine-code binary GraalVM Compiler –– generates compiled code to run applications on a JVM, standalone, or embedded in another system Polyglot Capabilities –– supports Java, Scala, Kotlin, JavaScript, and Node.js Language Implementation Framework –– enables implementing any language for the GraalVM environment LLVM Runtime –– permits native code to run in a managed environment in GraalVM Enterprise Oracle GraalVM Enterprise Edition High-level Architecture   Efficiency GraalVM Enterprise contains optimization algorithms that seek out opportunities to accelerate application processes by rearranging compiled code. The addition of these, and other, algorithms typically provide an additional 20% application performance improvement, while at the same time reducing the memory footprint.  Examples include: Path Duplication –– specializes optimizations for each code path based on profiling Aggressive Method Inlining and Escape Analysis –– removes more unnecessary function calls in the GraalVM Enterprise Compiler than any other compiler Advanced Vectorization –– uses optimistic aliasing and high-level map/reduce/fill vector analysis to vectorize complex loops GraalVM Enterprise shows up to 3x performance improvements on a wide variety of measurements in the new JVM benchmark called “Renaissance,” which was accepted at the most prestigious programming language conference — PLDI.  The benchmark and performance results are maintained by Charles University in Prague. Security GraalVM Enterprise also includes security features to address some of the common sources of security application vulnerabilities, including buffer overflows in native code. Most real-world applications today in managed languages like Java, JavaScript or Python include native libraries to improve performance of compute-intensive code.  However, these native libraries may form a back-door that could enable an attacker to bypass VM-level isolation features like bounds-checks and garbage collection, which increases the potential for security vulnerabilities for your application. Considering those issues, GraalVM Enterprise includes a “managed mode” for native libraries based on our LLVM bitcode runtime.  Safe Mode compiles even those portions of the application implemented in C code to use managed memory, garbage collection and bounds-checks, which help protect against common security applications vulnerabilities like buffer overflows.  In addition, GraalVM Native Image improves security by reducing your application attack surface by putting only the code needed by your application into the runtime, removing unused code that expands the attack surface. Agility The multilingual capabilities of GraalVM allow legacy applications to be modernized and new ones to be built faster. The open source library ecosystem for all of the supported GraalVM languages is available to your application, not just the one for the language in which you wrote the application. Legacy applications can be rewritten one piece at a time rather than all-at-once and new cloud microservices can mix multiple languages with no performance overhead. Developers can use diagnostic tools, including GraalVM Visual VM, NetBeans and Chrome debugging across language boundaries, resulting in faster diagnosis and development. GraalVM is designed to be embeddable in any other server or runtime with virtualized interfaces for any access points.  For example, GraalVM Enterprise is integrated into in Oracle Netsuite and the Oracle RDBMS Multilingual Engine. Try GraalVM Enterprise now:  GraalVM Enterprise is free for development and evaluation usage from the Oracle Technology Network.   GraalVM Enterprise is available for purchase and is free on Oracle Cloud. The full documentation for GraalVM Enterprise is now available on the Oracle documentation page.   Keep an eye out for more information via blog posts on graalvm.org.

Today, Oracle is announcing Oracle GraalVM Enterprise Edition. GraalVM Enterprise is built on the global standard for enterprise-class application development, Java SE.  GraalVM Enterprise is a...