 Great so a very good evening and thanks a lot for coming in for the session. I am Deepu Xavier I work with Oracle as the product manager of Java standard edition So today's talk so basically when we have been hearing a lot about Java 9 We have been hearing about J shell jigs. So and whatnot. I mean a lot of Java 9 features, right? And it's pretty interesting that you go to any of this tech talks or any devox or Java land or Java 1 For sure at minimum you'll have around four to five Java 9 tops and I was looking at the program calendar here Also, I think there are four if I'm not wrong four or five different Java 9 tops So my point was then how do I make it a bit different rather than giving you a lot of? Fundamentals or a lot of theoretical explanation about Java 9 other probably I'll make it for take it from a developer perspective To show you what is the power of Java 9 and also to give you a feeling that what should I do to my code? so that I can leverage the best sort of Java 9 and The other day I was taking one session for a different group and one question that they asked is that if I upgrade to Java 9 Will my code break? So thinking about the work in Java compatibility the answer was pretty clear. They were expecting. Yeah It won't break it'll run just like that, but actually the answer is it depends I don't know whether it will break because there will be certain pieces Which you may have to tweak or which you may have to correct if your code has in followed certain basic compatibility regulations so all those things we will try to cover in today's talk This is a pretty important slide actually doesn't have anything about Java 9 But still we'll be talking about things in future. We'll be talking about something which is not yet implemented So please don't make any business decision or technical decisions based on what I tell today. Please consider it as completely informational Okay, this we will see anyway on the way So when is Java 9 coming out? So Java 9 will be released on March 23rd of 2017. That's another six and a half months from today So we will have a Java 9 version available on 23rd March But you already have the Java 9 early access available. Can we have a quick show of hands? Like how many of you already have tried Java 9 early access one? Okay, good. How do you feel not Banu? He's working on Java. So he should so how do you feel about Java? And you already had a feeling about the new features Okay So that's what so as you said that has already broken some pieces because there may be certain piece of code Which you shouldn't have done like for example if you are using an internal API and all those things It used to run with warnings until Java 8 but with Java 9 it won't run with warning. It will just break So you should know all those things So a JEP is just a quick introduction about we are talking about 84 JDK enhancement Proposal as a part of Java 9 release which will be coming out in March 2017 So if you see there are six JEPs with respect to jigsaw a Lot with respect to client-lib, core-lib and whatnot you take the component and you have a Java 9 enhancement as part of Java 9 release So here in the interest of time we won't be able to describe or explain about the entire 84 JEPs Instead we will focus on those things which are really critical and crucial and as a developer You should be knowing that or as a technical person you should be knowing about those features So here you see that the main the most main that the release driver You can see the jigsaw then you have you might have heard about the new version string because until now you see the version of Java's 1.8 dot zero dot 61 like that But going forward it'll be 9 dot or dot one. So it's a pretty semantically Correct way of naming you have HTTP 2 compliance You have a G1 GC as the default garbage collection process API improvements We will have a look on that from a developer perspective So there are many but jigsaw is one of the most important feature And I won't be going too much into detail because it will be covered by my colleague Bhanu tomorrow the J-link part So before going into Where you should change your code or how your code should change? There are two things which as a developer I felt that yeah, these are pretty neat and these are something which I should be aware of anybody aware of J-shell or heard about J-shell Okay, great. So I think rather than talking I'll probably show how it is But to give an introduction J-shell is nothing but a repel read eval print loop So basically if you take other programming some of the programming languages, you should be able to see that yeah I can do an interactive coding. I take a console. I write some program I get the output immediately without all the ceremonial code like you don't have a public static void main You just write I equal inter equal to zero You should know what does it mean rather than writing a public static void main so with this You have Java has now the repel functionality repel read eval print loop Now, what does it do? Let's see quickly Okay, so this is a J-shell console. It's pretty neat. You just take command prompt and if you have a Java version of 9 what I have is a early access version build 1 3 1 is it visible everyone can see the screen, right? Okay, so you write just write J-shell and that's it you can you'll get this console So here, let's say I want to find the version of Java in a typical scenario The way you would do is you go to a you go to a clips create a new class Obviously at void main string arcs and then you do system dot get property and you get the value So it's a lot of ceremonial and boiler plate code in this what you would do is you just write system dot get property Java dot version It just runs as if it was running in a Normal Java code now the main advantage is like from two perspective. I can think one as a novice developer How I would use it I can learn how Java was for example in an academic scenario. I want to understand in I equal to 0 Okay, I is initialized and I write I plus plus Will it increment before or after it hasn't incremented Now I have tried to find the value of I I got one now if I write the same thing int k equal to 8 and Plus plus k it should give me nine, right? So from a developer from an academic perspective the way you will be learning Language will be much easier because you don't want to write anything complex You don't want to write the entire Java code to understand how it is going to behave Now another thing is that from an increment if you want to create an incrementally complex piece of code How would you do it? You can keep writing code here get it working? Yeah, this is working Let me please take this piece out and put it in my code. Let's try to Yeah, let's try to create a very small swing based UI because it's not just console based programming You can do it in a much better way in any interactive mode. So I'm gonna make a Simple screen with a button and with an action. Let us attach to it. So yeah, let's say import Java X dot. Okay. Now. I don't know what all are there. I just click on tab It will show me all the packages inside that I see Java X dot swing dot star So don't tap it'll tell me there are 143 possibilities. Do you want to see your no? I'll just take star Let me import everything in Java X dot swing. That's important. Now. We will create a J frame A frame is created Should be created. Yes. Now. We have a we'll create a J button new J button and We'll call it Click me Now we created a frame. We created a button. We'll add button to the frame Frame dot add. Okay, so that's not so like this interactively line by line. You can write the code and now where is output? It's not visible, right? We will say frame dot set Tab it showed me all possible combinations here Set visible auto completed with tab True. Okay, can see a small window on the left top Now I'm gonna do the same thing like frame dot set size 300 comma 300. Oh, I can see with the button now Let's try the lambda way of adding an action listener. I'm gonna say that button dot add Action listener event System dot out dot Okay, now let's see. I just created an action listener So it's as easy now. I want to see let's stop the program Okay, I'm gonna say a list I Can see what all I have written now from here I can take care of this is a piece that work can just take it and put it in my incrementally I can create a complex piece of code Yeah, so this is I mean it's when you have a lot whatever you can do on jdk9 You can do it in j shell also so that you can learn on the go You'll be I try to make a complex system end of the day So this is to give j shell, but we will keep using j shell if we require whenever we feel Yeah, what is the syntax or how does it work? We're just going to try it right out here. We just close it and we'll move ahead so this should have given ideally a Good introduction to what a j shell is all about now Java doc There's something which every developer would have used so now here if I can show you what has changed Let me just take the browser This is how a Java 8 Java doc used to look now if I want to find how a hash map dot put Works or what is the specification for that the way? I would have to do is I had to probably find the class here hash map and then I'll go to that click on that go find It's a heavy activity. I wouldn't say heavy. It's a nuisance activity But in Java 9 you have a small little search box and I'm going to just write Hash map dot put so it's as good as that you directly get Put and the syntax based on that So this I thought it's a very small feature But it's something really interesting like how you use Java doc is going to change with this. Yeah Okay, so done with all the simple things now. This is a part of jigsaw It's a one of the jet with respect to jigsaw This can potentially break some of your code if you upgrade to Java 9 if you don't delete properly Think it's that let me go to one of the following slide general compatibility policy Usually accepted thing is that whatever you have written in n version of Java it should work in n plus 1 That's a general compatibility accepted policy, but what is actually a Compatible policy. It's basically it depends if you have used only those allowed API's But there are certain API's which you are now allowed to use for example Just see this from 1996 since 1996 this was there up in the Sun website Saying that you shouldn't be using Sun dot star. I don't know whether it's visible But it says Sun dot star package are not part of the supported platform, but still there are many people who used all the Sun dot Lot of package like MISC and safe and a lot of things people have used now Again, let's go back to the let's open a command prompt Now I will show you a piece of code which has it implemented API usage Yeah, so if you see this piece of code basically what I'm trying to do here is that I want to encode a password For encoding the password. I am sorry. Yep So for encoding the password, I'm using Sun dot MISC dot base 64 encoder Okay, so I'm using Sun dot MISC dot base 64 encoder for encoding a password. Now the thing is that let's try to compile this in Older version of Java This is Java 8 I'm just gonna try Java 8 before that. Let me go to the folder so and API usage So compile this program in Java 8 it will compile successfully with three Warnings saying that you have used base 64 encoder and it's an internally proprietary API stuff like that But still it will work perfectly fine. Let's try to compile it. I mean, let's try to run it Java API usage It'll run it'll give me an encoded String of the password. Okay, well, and good everything is fine now But now let's try to run it using the Java 9 API usage dot Java Yep Here it will not be successful with three warnings instead. It'll get rears. It says that it is gone You can't use it anymore. See if you have any of these kind of code like anything where you have used Java Internal proprietary API it's gonna break in Java 9 now It's the question natural question would be like how do I identify like I have thousands of classes Should I'm I supposed to go to all through the package and understand where I'm using this internal API for that What we had right from Java 8 is something called J depths. Okay, it's a dependency analyze analysis analyzer tool So here what you have to do is you have to just run J depths on the jar file And then it's gonna print the entire output saying that in your jar file You have used so many internal API's and what is this suggested replacement? So Java has been so nice and kind to say that not just that you're using but what you should be ideally using Yeah, so let's try to run that and say J depths and API usage dot class here. It will give all the dependency of my class file Yeah, it's saying I'm using Java dot IO Java dot lang and Sun dot misc. So this is the culprit You're not allowed to do that and it's clearly saying that it's a JDK internal API. It is removed But this is not what I told I told that you will get even a replacement text also along with that, right? So what I'm going to do is J depths hyphen JDK Internals and API usage dot class This is going to give me the details of about only the internal API wherever I have used it basic different encoder, but use Util dot base 64 and It is available since 1.8 Yep, so this is a very useful tool that you should be considering you should be mandatorily running the moment You're going to Java 9. Yeah, this will help you to understand whether you will be breaking any code in German Okay, so now let's I'll quickly show you how it should ideally look like in Java 9 instead of the base 64 encoder I'm using to Java dot util dot base 64 and the same thing 64 encoder And you just get an encoder and then encode it. So this is the ideal way of doing it And how do I do? How did I know that java dot util dot base 64? I got it from here Java dot util dot base 64 Any questions on that or all clear? You can give the jar file name just come You can give the entire jar file and it will pass the entire jar file and you'll get the details and you can give a dot output There's a dot output Option for that which will dump the entire thing into a file so you can pass the file and then see later on Yep. Yeah, you have to do it I mean, we have been so kind to give you the Java is giving you this detail. So Yeah, good question. I'll come back. I'll have a slide about that. Sorry Okay, so that was one of the first slides you have already JDK 9 early access Available Go to JDK9.java.net you have the early access version of Java 9 already available But don't use it for any production purpose because things are changing. There are a lot of moving parts in Java 9 It's getting there by March. You will have a general availability version available But until then you can use this you have a new build and now the current build that I'm using is 131 Now if I go to Java hyphen version It'll tell me it's an EA version 9 hyphen EA It's an early access. So I have early access installed. So that's why it's in the path Your question, Ravi. I think you were asking about Has everything been replaced right you have it. Yeah So basically what we have tried to do is that we have tried to do a complete analysis on all the internal API's and we identify there are two different categories of API's one critical and one non critical So if you like non critical are like no evidence of use outside JDK, which means developers are safe We are also safe. We can equally replace it. We can remove it and no need of replacement Second one critical like functionality that would be difficult if not impossible to implement outside JDK So there there are two aspects one. It is difficult We know that but we have already given a replacement like Java dot U2 dot by 64 for that if a replacement is there We have removed it but if a replacement is not there, it will continue to be there You can have enable it to say command line switch. It will be there until a replacement is available So you won't you won't feel lost or you you will have a replacement for sure. Otherwise, the old one will work answers, right? Okay, so that's what do not encapsulate critical internal API Deprecate them in so for those things where you asked Deprecate them in Java 9 and plan to remove in JDK 10 because it's a plan It's a plan you never know until it is removed until it's replaced. You won't be it won't be removed Yeah, so this is that what we ran just now And there is a Maven plugin also J depths plug-in if you want to run it on your entire project We will you have a Maven plug-in also so you can use that also for your running So this is the example that we just so like we were using the basic st for encoder from Sun dot misc and we replaced it to Java the doodle and it worked perfectly fine with J depths Next one is the process API That's another thing like for example when we whenever studying in a college and when we learn Java We say that right once run anywhere Wari right, but it doesn't really apply to the case when I'm having a process API call when I want to get the system Processes what I end up doing is that I have to write a some piece of native code So if it is a line expression, I would write PSI for me or a task list dot exe and that's how you have a handle on the Processes process that is running on the system. So that's not really the right way of doing it I mean if I can show you a piece of code which Process API how it was earlier You basically do a exe see and run the task list dot exe you get the value You read it into a buffered reader and then get the value and that you process later on with that The way it has changed with Java 9 is You have a process handle you have a process handle which will Find the entire details of the processes running on your machine So in case if you have anything related to processes where you're using a native piece of code Go for a process handle once you have Java 9 So I feel if you have a real reason this is a compelling one if you have processes go with this It's widely accepted. I mean you can run it on linux or windows. It doesn't really matter. So maybe if I can just take a j shell Can quickly show you Say I'm gonna say process handle dot current Process ID so it's as good as that. It's very simple rather than it's the same thing If I want to get the current process in a JDK 8 The way I would have to go is the entire ceremonial stuff that I just showed you not this But this instead it is just one line for me in j shell one line, but otherwise it's just a one line of code Yeah So that's about the process API some signal issue Yeah, sure Yes, you can you can export that into a file and then you can take it from the command line. Yes Okay, now the next one is again, I will go to j shell if I love that I mean it's easy to describe and it's to explain stuff using a j shell now It's a convenience about convenience factory method for collection. Suppose you have a case wherein I need to create a list with say three alphabets. Let's say Array list of string list is equal to new Array list Yeah, let's just You are right. It's okay, but that's okay. Now. I'm gonna say list dot add Okay, up arrow down arrow works if you want to go to the previous and following statements Yeah, let's go to added list dot add B, let's stop with two and I'm gonna say This is a line of code that I have written till now So that last three lines of code is what matters now and I'm gonna see the value of list This is how it looks now if you look at it what I wanted was a list with two alphabets Two strings in that but ended up writing three lines of code. It's unnecessary, right? So what we have in Java 9 is I'm gonna say list dot off a b That's it. Just one line of code instead of the entire ceremonial piece of code for creating on such a small String, so it's kind of a collection literal types. So it's gonna help you while it's like making your code less Verbose and it's much easier to understand by seeing this But otherwise you would end up I mean these are three different options that you can see you can do a connections Unmodifiable set and you use a ass list and get the value there are multiple variety in which you can achieve that But now it is great list dot off or map dot off stuff like that now One question, maybe I can just quickly show you this one. I'm gonna create a string array string array of array is equal to a b Okay, I created a two array and I'm gonna say list dot of Array any any guess what will happen now. Will it create a List containing two strings because we can't say how do we do or will it create a list of string array in this one? List of string array, right? It'll create a list of strings because that is that is that's how it should happen ideally because if you want to create There's a workaround for that But compilations of war arcs because that is probably right because a list of array How how many times have you created that very rare a list of arrays instead of that? You would actually create a list of string array list of String yep, so this is what is happening But if your particular if you're really particular that you want to create a List of array you have this option of this one list dot. I'm gonna say that list dot and string array Of this will create me create me a list of string array if you want but very rare that you would be using it this one It seems to be a really simple one, but it can have an impact again depends on That's a the name of the sessions that preparing your code for jdk and right in case if it is applicable for example until now we were telling the name as 1.8 point 0.6 1 for example if I go to Command prompt and see Me open my java 8 Java hyphen version. I'm running it on Java 8 1.8.0 underscore 91. It's a complex name now the thing is that but that was how it was sadly This is how the version of Java was right so what happens is that if you have a piece of code Which somehow depends on? Let me just take it Yeah, if you have a piece of code which is actually checking for the Java version and doing some manipulation with that Java version I don't know what you are doing But in case if you're doing the thing is that if you look at the command prompt what happened was that? 1.8 so the major version is the third character or if you split with the dot the second one in the list String array is going to be the merger version which is true Which will work with every version until Java 8 but if you run the same code with Java 9 let's see that if I run the same thing with Java 8 Java see Check version to Java and just compiling with Java 8 that piece of code and I'm running with Java 8 It will give me major version is 8 which is correct because I am splitting with the dot and I'm taking the second instance Simple as that, but if I run the same with Java 9 Check major version it will compile fine because there is nothing wrong in The way we have written the code, but if I run it It's gonna give me a wrong result gone because 9 ea because it that's the error became because it's a early access You don't have anything after that dot anything like that It just took the first version major versions 9 hyphen ea, but it failed after that The reason is the naming convention. I mean the way you read is not after dot The first one you have to always go with the first one if you want to get a major version out of any version from Java 9 J link up so this I will not cover in detail because as I said it will be covered by one of my colleague tomorrow in detail but still I'll quickly show you how it's gonna how we can run jigso finally. I mean not focusing on the jailing part So how you have to probably change your code? Let me just quickly quickly take an example. I have an eclipse jigso folder here Okay, so what I'll be having is an SRC folder and a mods folder where now you let me just delete it This is where the modules will be kept end of the day once it is done. Okay, so before that Should I go into the basis of jigso just to give you a overview or your? Okay, good. So so jigso basically what we are talking about is that if I have a piece of code Okay, if I have a piece of code and I want to run in a machine without a without Java For example, let's take one practical cave How would you do you just give the entire jre the runtime and you run on that right? That's how you do it but then the problem is that my Program needs just three packages It's a harmless very small application For example, let's assume that this major checking the major version That is my job program and it doesn't require all the entire packages that the entire ceremony that is defined I just want only what the Java dot util dot on all the base classes That's it. So then the question is then why do I need this entire set of packages and the big 120 or 130? Let me see what is the size of the jre folder? Java, okay, the entire job jre 8 I'm talking about 175 MP. Why do I need this entire jre to be copied out to my machine because what I need is a basic packages Right, so just to give an introduction jigso what it does is it model rises the entire source code of Java And it enables you also to do that with your Java code It splits say for example, I can't take This one. So this is a very simple graph like you have the Java dot base Where in you have the Java dot lang and the base packages that we are talking about then this is a module Java dot base Then Java base is required for Java dot logging to work If I have a Java program which has only logging my final end product will be Java dot logging and Java dot base That's it. My jre final image will be having only those two packages or those two modules and these module can have multiple packages So Java source code itself is now modularized Okay Now if I suppose I want to write something called a Java dot SQL dot I want to play around with the result set, which means I'll end up Taking the Java dot SQL module if I take the Java SQL module I will be having Java to SQL Java dot XML or the transitive dependencies up to the root Java dot base Okay, so any module that you create by default will have Java dot base. That is pure mandatory Now once you create with all these things and finally you do a J linking which I said tomorrow You will have a detailed session Finally once you have the entire thing the size of the image will be like maybe 15 MB 20 MB depending upon your design okay now Did that give you a kind of a High-level understanding about jigsaw. It's like small small pieces put together to form a big Java image You can just imagine like that Now coming back. I will have a folder called a clip jigsaw, which I created I have more module folder. Nothing is there. I'll create an SRC folder eclipse dot jigsaw Eclipse I'll come to the Java file later jigsaw and inside that I have a main file Java file Okay, it's a normal normal Java file. Let's see what is there inside this normal Java file Okay, so here I am using Java dot SQL dot date if I'm using Java dot SQL dot date Ideally what we had seen earlier it should be having This package this module this module this module and Java dot base module Once I make the image. Yep. So this is how it's gonna work. So this is my Java file Now, let me go back How does my module look like? Yep, so this is my this is a mandatory Java file You need to have this module info for every module once you have a module You'd have to define it and you have to explicitly call out and say that I'll just make it a bit bigger Yeah, so here module eclipse dot jigsaw and I'm saying requires Java dot SQL unless I say I need this explicitly I won't be able to compile Now I said that requires Java dot SQL what Java would do is yeah This guy the developer said me that he's gonna require Java dot SQL Let me take up Java dot SQL, which means all the transitive dependency will be included as a part of the package enough now Yep, so we have this is the module.info has to be there mandatory Which defines your dependency and in turn it will take the transitive dependency from there now Let us try to compile this Yeah, let's try to compile this one. So now what I'm going to say is Java C What do I have here? Cd Eclipse jigsaw So I'm gonna do Java C hyphen d mods slash Eclipse dot jigsaw Yeah, but I'm doing it. I'm doing a Java C. I'm saying yeah This is where the compiled output should come in and I need to define the source for defining the source I'm going to say what we see we saw it in the SRC right in SRC in eclipse dot jigsaw in eclipse in eclipse in jigsaw I have the main file. So what I'm going to do is SRC Eclipse dot jigsaw slash Eclipse slash Jigsaw slash main dot Java Did I see that yeah, so which means mods? Okay, and we have the module.info also eclipse dot jigsaw module hyphen info.java Eclipse dot jigsaw So what I've done is M-module it's a spelling mistake from my file Sorry for that. It's gonna compile hopefully yes So what I've done is just Java C hyphen d mods This is the output module and these are the source So here you can even use the normal bash commands like can find the entire Java files and compile in one shot Not necessarily that you have to pick and list each entire Java file here Yeah, so this is how you compile now once you compiled Let's see whether the output is got created here mods. Yes. Yeah class files are created here the module info class file and The main class file sorry the main class file is created now Let us run it Java hyphen module path Mods so we are saying that the mods have the final class files Java hyphen MP in the module path the mods and The module name is eclipse or jigsaw yeah modules and Hyphen m the main class is eclipse dot jigsaw slash eclipse dot jigsaw dot Main so basically what I had in my main class is finding the major version of Java in Java night So this is how you run from a module. Okay now I told about that. Okay, since I am using very little features in Java I should ideally get a very smaller runtime right very small run time So how do you create that runtime image or the jre whatever we used to call it as jre? How do I create that right so very quickly without going into detail what we need is a jmod file That is a modular jar file for creating a jigsaw image It's nothing, but you can imagine like your older jar file, but it is a jmod. It's not a jar henceforth So, how do I create a jmod file jmod? Create hyphen hyphen class hyphen path. Okay now I need to define It's not this Program file JDK hyphen nine. So what I'm doing is I'll tell you once I'm just getting created JDK nine slash Jmods. Okay, once it runs, I'll add mods. It's not a recognized option Jmod just because it keeps changing. I think I would have to get something more here create multiple mods oops, no, no, no My mistake, sorry So basically what we've been doing here We will have to define we have to create a jmod out of the modules that we have created just now. Yeah, so what I'm going to do is I have to take this jmod create hyphen hyphen class hyphen path mods slash See what I've defined what I've done here is you can see the jmod got created in Here this one 354 this file got created how because we are creating a jmod create and giving the class path as Mod slash eclipse dot jigso. So whatever is there in the mods eclipse dot jigso where we created the class files We're creating a modular jar file, which is a jmod file now with the jmod file. We are going to create a final image This almost towards the end module path So here we want to define the module path here like what all module should be created added to the final image Yep, so final image will be JDK hyphen 9. You know what has happened is that J-link what is the module path? We are taking the basic modules from Java Where we are creating it not our module in JDK 9. I'm taking the basic modules and I'm taking my mods my module from the mods folder hyphen hyphen add mods This is my module and where do we keep it? output E app It will create Image which just has just those details what I need. Let's see that might be getting created now If you can see that E app is getting created. Yeah, it's created. Let's see the structure of that E app been this is a basic structure only the basic files that you need Now I want to see what all are there. I'm gonna say CD app CD bin List mods it will list me all the modules see if you see here as I said XML is there SQL is there Logging is there base is there and eclipse logic. So that is my custom module so Now let's immediately look at the size of the folder 41 MB Instead of the 175 MB that I ideally would have had if I was running Java 9 Java 8 Sorry with this I need only 41 MB of my and it can even further be Compressed which is a part of plug-in which is a part of the later talk I wouldn't be going into detail there, but it can be further reduced also if you want by Taking out the debug information, but taking out compressing the class using CIP functionality There are a lot of plugins available on top of that But without any of these plugins. I'm getting a 41 MP instead of 175 MP Which was there in Java 8 but it will run it is as good as a normal Java application and I can use this because if I go to the Hmm the release here I can see the entire details of what all is auto are part of this particular file You can see here Java dot SQL equestrian jigsaw Java dot lagging logging XML and base in line with The module graph that I showed here This module graph as of today is available if you go to Java on net website you can get that jdc9.net But this is the basis Yep any questions on this jailing the quick part I know it was a bit quick because it's it'll be covered in detail tomorrow I just want to give a feel of how it will be any questions on that Maybe okay, maybe I don't I mean fun. We do want to answer that because it's a part of your probably right RT dot jar possible it won't be there from Java 9 that's a different thing But I think that will be tomorrow. I believe right it'll be covered tomorrow It is RT dot jar won't be there So that's why I mean there are a lot of ideally I mean let me give you a background This session was supposed to be the last session tomorrow, but then we had to get it swapped for today So that's why this content would have made more sense once you go through the other sessions But this is it is but this will be covered in detail tomorrow about the jailing and that additional details behind it Native but this motorized is a Java source code only Java source code will be motorized There won't be no more jar. There'll be a basic one one jrt file system dot jar apart from that There won't be jar files. You'll have j mode and modular jar file Which is proprietary? I mean you won't be able to play around with that So this I don't have a demo because it's still waiting for feature complete but multi-release jar file is another important I mean beautiful feature in Java 9. Okay, so basically what it means is that for example Let's assume a situation wherein you have a particular version of the Java file a dot Java Let's assume a dot Java here the current scenario how it works is that one jar file is compatible to one version of Java And backward compatible as expected now how as a library developer How do I ensure that my Java file is compatible with Java 9 and Java 8 and Java 7 And I want to ensure that this a person who runs this Java file This is jar file in a Java 9 environment should get all the Java 9 benefits And if he's running on a Java 7 he should not be affected because a Java 9 is Incorporated into that so what we have is a multi-release jar file So if you see here in the right side in the meta in folder the structure could change later once it is implemented But the concept twice you have a meta in a folder and inside that you can have different versions of the same class file Like in 8 you can have an adult class in 9 also you can have an adult class now If this thing is gonna run in a Java 8 compatible environment It will take a dot class and it will run with a rotate feature a dot class features Java 8 features If you put it in a 9 environment, it's gonna run with Java 9's a dot class. So this is gonna be the multi-release jar file It's a multi-release compatible jar files. This is gonna come MR jar So this will help a library developers to have their Code compatible with multiple versions of Java Again, I don't know. I'm sorry. I don't have a demo for this one These are some small things which you should be aware of as a developer in case if you're using applets You're planning to deprecate. It's deprecated not removed deprecated in Java 9 and could be removed in Java 10 So the applet API is gonna be removed because of the Npapy plugin support being removed by the modern process Then jhat tool it was always an experimental one that will be removed You have already a lot of market replacements for that just to be aware of then launch time jre version selection is going to be removed in Java 9 because you all the latest Products have the feature of defining this should run with this particular version of Java JVM TI In a sprof agent again, you have all this visual VM and stuff like that already in the market So this will be in case if you are dependent on that probably you should consider Changing from there. Yeah, so yeah, I'm just one minute over show What next is very simple. This is this was my one of the first questions How many of you have actually tried Java 9 early access? I would say that this set of features should have given you good in motivation to try out Java 9 Go there jdk9.java.net grab a early access. I think it's 132 build number 132 available now Grab that and you can try out all the features like whatever is feature completed as of today Will be available or as of the last build date It will be available in the early access try that because it's gonna help the community as a whole so that you guys give feedback We can incorporate the feedback so that you get a better product once it is in the market by March 23rd 2017 Yep, so this is again there are a lot of quality outreach programs that is running now so that you can help the community you can take it you can give the feedbacks and move the Ecosystem forward as a team so that's it from my fire. I'm sorry two minutes overshot, but yeah, thank you unless you have any questions Thank you