WWDC2003 Session 619

Transcript

Kind: captions Language: en you I give well folks it's a blisteringly hot day in san francisco and i'm glad you're all here because it's nice and air-conditioned we're going to have a pretty code intensive session today I've got a fair amount of slides but quite a bit of time at the demo machine showing you how to develop your applets and do some debugging with us with Safari and the java console so let's get into it so today we're going to talk about the web-based deployment technologies on Mac OS 10 if you saw session 608 you saw a little bit about the applications and deploying those on Mac OS 10 we'll get into the features available to you as an apple developer some features available to users web start developer I have a pretty long session with the debugging tips for applets and some settings that you can use to help you figure out what's going on and finally at the end we'll talk a little bit about helping you decide which is the right one for your deployment situation so here's a picture for deploying a java application on Mac OS 10 on the left you have this traditional double clickable application looks like any other application on Mac OS 10 in the center we have web start applications and the reason we have the sort of a you know sort of a left turn going on here is that you can deploy a web start application the traditional way through a web browser with the link to the jnlp file you can also make a double clickable application out of that web start jnlp file and you can ship that around to your end users web start is now smart enough that it will look at that jnlp file in the double clickable go out and update all the resources and it'll behave just as if you click from the link on in the web page and finally we have applets through web browsers here we go for this session we're just going to focus on the right two-thirds of this diagram now we had a really good session about the developing applications today we're going to talk about the web your web alternatives specifically for athletes this is sort of those the landscape today anything that uses the old the old embedding framework will get java one through one and those are things like internet explorer netscape or anybody else who's adopted the embedding framework currently if you are a cocoa application you and right now that's primarily Safari but you get you would use the Java cocoa plugin which uses the 141 vm and 141 applet viewer and that distinction if someone important if you've done development on windows because you know the feature set between the two plugins is somewhat different all right to build an applet when building applets on Mac OS 10 some things you want to know and keep in mind is that it's all built on the Java plug-in technology the applet viewer with mac OS 10 is identical its feature for feature compatible with what you get on windows or solaris it's already been installed there's no additional and user install that needs to be done like you would on windows no get job or anything like that we've already done that for you if you're going to use to fire your applet launcher app launcher is sort of a development tool that we use that also uses this applet viewer you'll get one for 101 want to make that distinction that we're currently 14 10 11 31 is what you'll get with Internet Explorer and netscape and anything else using the embedding framework and another choice available to you on Mac OS 10 is java web start it's it's a you can do you can deploy an applet or an applet or an application but Web Start is really geared towards developing into delivering a full application via the web we support one click launching from the browser Safari has already been configured to look at the mime type for a jnlp file and open up web start and do the right thing it has a full dynamic updating features of java web start so you put all of your jars up on a server and if you update those jar files Webster will just go get them and always bring the latest application down to your users it has something I call its platform neutral but it's not platform ignorant and by that I mean you can tailor the jnlp file to the platform that it's running on we'll get an example of that in a little bit but basically you can say well if I'm on Mac OS 10 I need these additional files we'll talk about that and how you do that and the big thing about web stores lets you deliver a full application much more easier than much more easily than you can in an applet you can sign the application and it gets full full access to the users desktop just just as a regular application of this and the last thing to mention Mac os10 out of the box can serve a jnlp based application now if you're on Windows and you're actually in Solaris if you're using apache for example you know that you have to tell apache that when it delivers a jnlp file you have to send out the right mime type type with it we've already done that for you we've already configured Apache correctly so there's no additional work for you to do if you want to you know if you want to use a mac OS 10 or server to deliver a web start application all right right now I want to show you an example of some of these some of these I want it I don't want to call the more advanced applets but more feature-rich applets that are available to you yeah and you've all seen an athlete before so I'm you know with we're basically gonna focus on some of the more interesting ones as far as what's available let's go to dent aren't we're already and Emma one so the first thing I want to show you is visual thesaurus and now but what's nice about this is it's got some pretty spiffy graphics for moving through a web of information about about words sort of a sort of a visual dictionary if you will so start with them in the word demonstration and you can see a jump to that word and now I can start clicking through here to other words and continue on a servo a web of following through the words gamescom oh ok ok cool so that you know this is sort of a neat visual applet that sort of highlights some of the graphics the graphics improvements we made in the latest release of with the Java DP that's was released on Friday one other applet i want to show you this is gamescom and gamescom is cool and not not for the only reason that it has really nice park of other games that i like to play personally but one of the new features in 141 is that you're going to find that in 131 this apple would not work that's because we're relying relying on an older version of jsse java secure socket extension a lot of those problems in fixed in one not for so if an applet now encounter is a certificate that it doesn't like in some way whether it's out of date or self-signed or something like that that it will continue to it will now ask the user if that's ok and we'll just take a look at a game in progress here any other impressive thing about to clue and some of these other games as they're fairly complex and it's a great visual experience for the user it's very responsive and it's something you just couldn't do on with 131 now we can do it with 14 have to get to slip graphic out of the way yes I hate you know you're watching the game for a little bit but the message here is that if you have been doing trying to deploy assigned a flute with 13 1 i've been running to a lot of trouble now is the time to look into 141 because we fixed a ton of problems in this area and there's just a lot more a lot more functionality available to you this is important for your particular deployment solution alright so we won't find out who when this wins this game but now let's move on to a web start application and one I picked up to show you today is Poseidon which is a UML design design and analysis application so uml editor and you know as you can see this looks like a regular mac left in application we got a screen menu bar we've got the icons in the menus and we've got to you know save and print and all the things that you expect out an application and what I'm going to do is create a very quick class diagram here we use the canonical shape example expand this a bit start with a shape class you subclass it a circle and i will add one more subclass of the square and now i can save it and here's a regular j file chooser there you go this is a Mac os10 application it's and it's delivered with java web start so whenever they make updates to Poseidon all i gotta do is just start it up again I'll get the latest version okay let's go back to slice alright looks getting a little bit more detail about how applets and developing applets on Mac os10 everything I'm going to talk to you about in these next few slides is documented at the URL you see here on the screen if you don't get it written down right now that's okay I'll show it to you is the end but the message here is that everything you see in that documentation will work on Mac OS 10 it all poured it over fairly cleanly from windows what we're going to do is we're going to focus on the areas where we've made improvements for you in Mac OS 10 and show you you know their ways we've done things better we think but they're also if you're coming from windows for solaris and may be different from what you're used to so we'll talk about those differences alright in particular the first thing you want to think about in an applet is your HTML and so a common question we get is how should you write your web page you know you can use an applique abject tag embed tag we want you we would like you to use the applet tag if you haven't done so already applet is going to give you the most compatibility across platforms on with safari internet explorer or on windows XP a son is trying really pushing people to use applet heads on windows and for the most amount of cross-platform compatibility that's the way to go another thing to think about you should never assume a Java VM version based on the browser that you've got that you detect with your with JavaScript so just because users running Safari don't automatically assume the running one for just because they're running Internet Explorer don't automatically assume one dot three that will probably it will definitely change in the future and if you're making assumptions in your HTML you're in for a lot of trouble the best way to determine what you're running is when the aplex starts up is to look at the Java dot version property java dot specification that version or OS de and os Nate these three will help you determine exactly what you're running now java dot version will give you the full one dot for that 101 with possibly a build after it but Java that specification that version will give you the short and what Java platform where you want so in this case for example in Safari if you did this you would get one dot for and that's it just the string 1 dot for ok another thing we often see is setting proxy settings now in windows in Solaris in particular this is a big deal and I think it's because son uses a firewall internally so you know they need to get the proxy setup so they can get out of the firewall I'm Mac os10 there is one place to set proxy settings that is in the network pain of the system preferences if you've got additional proxy settings that for your particular deployment situation create a new location in the network panel and set up your proxies that way you can get us those proxy settings by looking at standard properties in your athletics and i believe it's HTTP proxy host and HTTP proxy port for example for for HTTP proxies if we don't have a tech note or QA we should probably document the mapping of those things but everything you see in that network panel has a corresponding job of property and we'll get that information for you and make it to your applet or application if it was necessary ok HTTPS is one of those areas that's really improved in 14 it's all built into the plugin there's nothing for you to do and now in 14 there's nothing for you to do in your code either all you need to do is make a URL with an HTTPS scheme and just open a connection to it and we'll take it from there it's all based on the Java secure socket extension which is a now a standard part of 14 and 13 it was an extra add-on that didn't really fit in with a plug-in but it mostly did the job and now I 14 it's all in the grade and works very well one difference for from Windows is that the root certificate store by default comes out as a keychain we Mac os10 has a number of I believe it's in it's on the order of two dozen popular root certificates and we can match a certificate that you generate against that list based on what's in the certificate and sort of tying into that if the user now decides that they want to always trust the search its certificate in your applet we'll add it to the keychain and that gives the added benefit of letting people use the keychain access application now to take a look at all this all their certificates delete them or you know do what they need to do with them it's not a common thing to do but as you'll see it's a better better than the alternative and the alternative is something called the java keystore this is sort of funds cross-platform solution to destroying certificates but normally by default that key store is in flash library Java home libs security and you know very very down where a user wouldn't normally find it would have to go into terminal to start doing things with it so as a result you know we've tried to start moving away from that and stick to keychain access now currently there's a there is a bug actually it's a bug generated from Sun where a self-signed certificate won't can't be stored in the keychain that's not entirely true because I found situations where that's not exactly the case but for you know for the sake of your development let's assume that it's not going to work if that's a problem for you we have a job of property combat Apple that security I use Java keystore if you set that to true we will look in that Java key store for the root certificates and if the user decides always trust that certificate will get stored in that in that Java location for the key for certificates as close to the keychain now as I mentioned if the user wants to do anything with their key story when you're using this property ethical in the terminal and use jars are a key tool and start looking at the you know looking with things in the terminal and that's really not something we want end-users to do so that's why it gets a big red X use that key store as a last resort now most of what i said for https connections is true for a sign jar as well you know you get full signed a place' port sportsnet skate style or IE style signing you can sign it once and work everywhere you can and if you sign something to work with a 1 dot x version of java with it that comes with internet explorer for example or netscape christmas now the java plugin is pretty much becoming somewhat ubiquitous this is less of a problem but keep in mind that if you find something for one dot o it will continue work in one that for I'm sorry for one that one and will continue to work in 14 and once again if the user wants always trust that jar file the signature on that file it will go in the keychain and just like HTTPS the same properties that you will apply to using that key store if necessary and and as a and I'll say it again for your deployment you know try not to use a self-signed certificate you use that key store as a last resort okay one thing that's new and one not for and it has actually greatly improved and one that for over 13 Zappala caching and in 13 basically applets for cached on demand when you were I'm sorry not so much on demand but when indicated in the HTML file in 141 every remote applet and every remote reefs orchid resource gets cached automatically star files images sounds whatever you're using in your applet of course this is going to speed up subsequent launches of the applet and I made a slight common here about larger application most improvement that's because if you have a number of small files the overhead of checking to see if things are up to date may / may negate all the all the benefits of keeping everything locally so if you have a number of small jar files you may you may not want to bother with this or if you can actually probably the better messages to combine all your jars in one big file is possible does that make sense for you all right what we're showing up here is an example of what you would put in your applet tag I left out the rest of the applique and only have the relevant parts for application here and what you're seeing here is I guess what I would like to call 13 style application because it works in 13 and 14 but what you have is first of all the first parameter it's called cash archive and what you list there is all the jar files that you want cash for your applet she just string them out in the comma separated list and what goes along with that is something called cash version and as you can see if the the format is a dotted decimal I'm sorry dot a hexadecimal for part number so it looks something like an IP address but you have to have one of these for each entry in the cash archive so in this case we have three jars we want a cat and so we have three versions that match up with each one of those each one of those jars and the way this works is that the app of viewer will look at each version and it will look at what it's already got cached so if its season the cash will already have one dot to dot one of a jar well I don't need to update or do anything and if the HTML tells it that it's newer it will fetch the new merge our file now the reason it phase the reason this speeds things up at load time is that by default the the default mechanism for checking the things are up to date it's look at the last modified date on a jar and the side so the applet we will send an if modified since up to your server to find out if that jar file is newer than what it's got so if you don't put any controls on the caching you're going to send out an HTTP request anyway for every jar in your athlete so you can cut down on that overhead buy you some cash version can now the new one for way is something called cash archive VX and we have some additional things that you can specify in the HTML ok what's different now is that the jar file and name and the version are all put together in the same tag now so you have the jar file name semicolon something optionally called preload and then the version and if you give preload that means everything is loaded up front when the jar file is downloaded so if you for example when a stick a jar full of images in your applet you could stick them all on that jar file and they get loaded and turned into images right away so you take a little bit of hit up front but you take less of a hit while the users running the applet and so the perception will be the things are somewhat faster so there's an example of how you can use that down below and in this particular example we have set it up applet Sarge are always get you uses the default mechanism for seeing if it's up to date and it gets pre-loaded util that jar gets pre-loaded and it has a version on the end of it tools that jar gets loaded on demand and has a version at the end of it okay alright so that's some things about the HTML and some other things you can set up for your application for your applet talk a little bit about the debugging tools available to you as a developer you're probably going to be using the Java plug-in settings applications quite a bit we keep it in applications utilities Java and there's two versions in there 14 13 and 14 pay attention and pick the right one for the vm that you're going to be targeting i'll give you a demonstration of how you go about using this later on in a few minutes but that's where it's found them and we'll talk about it shortly here and one of the things you control with that is the java console java console is well is where you'll find all the system that out and system that air if it's turned on if your application stack crawls things like that we'll all go here it's got additional logging and tracing mechanisms that are very useful doesn't help you keep an eye on sure the loading the loading loading activity for your applet you can get thread stack if your applets hung you can go over to the console and you know find out where the deadlock star in your applet something about castle classloader cache control which is important for when you're you're doing iterative development will talk about why you need to know but why you need to know about that and why you need to clear it out every now and then all right let's go to the demo machine again and now I'm going to spend some time actually developing an applet and show you some of the techniques that you can use for doing some debugging alright so the first thing I'm going to do let's start with the Java plug-in settings and this first tab is has the controls for the java console and right now we only support either making a visible or not making a visible now windows you can sort of hide it in the toolbar so that it comes up minimized we don't have a good mechanism for doing that on 10 so we right now we only have show or don't show or don't show basically so for this example I'm going to show it and the console only comes on when an applet is loaded so if Safari launches up you will automatically get a Java console and we can turn this on to pop up an alert when an exception happens during loading I'm going to turn on for examples here click apply right now I'm going to go over here to Xcode and for the purposes of this demonstration I made a very simple applet so it's going to paint out a system property and what's what's special about this is the property i'm going to ask for is user at home which you can't normally get from an applet so protected property so all we're going to do is we're going to dump out this message user dot home and if we can't we're going to show security exception occurred and it's part of building this i want to point out one of the nice things about about xcode is that i can set Xcode up to automatically sign my jar file now you have to find the jar file for this applet in order to get this to work and so I've added a shell script face or I'm just going to run jar signer and I'm going on I've already got a a keystore with a self-signed certificate in it I'm like on my desk so we're going to build the applet and it's going to automatically sign it for me all right so I'm going to build it and that is that priest not much to do here all right so there's my console okay now here's my security alert because you want to trust this this applet and now people gave me a hard time says well you said you know the security was issued by companies is not trusted apple computer and well you all can trust Apple but now that the message I'm trying to give you here is that a self-signed certificate is inherently unsafe you know I you know I in here said I'm with Apple Computer well I am but I get easily asset on the Sun or I could easily have said I'm from the government you know and it's self time certificate so you get a this is something that users will eventually educate themselves about but it's something that you know for your deployment you want to think about so we're just going to say yes and you know there's our property all right so I'm gonna bring up the console here show you a few things that you can do let's see I one of the first things we're going to i'm going to show you is one hit s and here's a list of all the system properties now because this is assigned applet we're allowed to read every property available in system sorry I'm sorry available in the vm so we've you know we've got a number of these you know son that boot that classify past things like that that you will normally get from an applet click H to get to help again another thing is a list of all the threads we've been created by this applet you know we have a thread group for your applet down here here's my applets main thread and event queue for it she can take a look at those and new and 14 is the Veil the Veil the ability to dump out all of the thread stacks now as you can see the deepest deepest stack is the one that responded to the keystroke for the dump all stack that's usually going to be the case in fact you'll probably always find this particular stack when you're looking at the looking at the stacks for your applet okay alright so let's go back here and to Xcode and let's make a very small change to the applet just say home der I want to build it and we are all done there ok so I'm going to go back here and refresh and look G nothing happen I must be a bug right now this is not a bug the reason is something called a class loader cash and what the plug-in does is it classes that cash is class loaders say that ten times fast you'll just like now spin your head around for three minutes what it does is that it caches class loaders so that if you go back to a page it speeds up the load of the page again because as you know starting up an applet is some an expensive operation now if you're doing iterative development like this that's going to be somewhat of a pain so the console gives you the ability to hit X and clears out the castle classloader cash now I can go back here and reload it and I get my security dialogue again because now we don't know about this applet again and there's my uh ah what did I do wrong ok oh well mmm do that there we go all right okay alright just to show you you know if you've done some where we load this applet have two safaris running what's that Oh empty the trash oh well okay all right let's move on all right let's go back to the Java plugin settings here and kale over here on the Advanced tab we have a little box called Java Runtime parameters and this is a place where you would set properties that can go into that but the appli will pick up you can you know you can actually set a number of the properties that you saw in the and the session on application things like anti-aliasing and you know things like that but for the purposes of this discussion one of the more interesting things that you can set is the security related properties come on define just to show you some of the security properties available I'm going to do Java security debug equals hell and here you can see everything all the properties available to help you figure out what's going on with your jar files when you're loading up an applet this is really useful when developing a signed applet because as you'll see it will dump out a ton of information to the console about what what it's doing whilst looking at your jar file or looking at authentication another common use for this is with the policy I won't show it in this demonstration but the combination of access and policy so you're developing an applet and you're doing something that generates the security exception you can't figure out why he sets this particular property java dot security dat debug equals access it will show all of the permission checks that it's doing and log them out to the console and help you figure out what's going on all right so that's it for that so I'm going to show here i'm going to put javadoc security got debug equals jar and run our applet again I can see I've got a whole pile of information about how it's a taking a look at all the entries in my manifest here's my certificate it's looking at the public Keef just a ton of information that'll help you figure out what's going on if something goes wrong just I'm gonna say no when you see that you know it's not finding morsel not allowed to have that property okay it's quit safari one more time and let's go back here to the plug-in panel again he overhears the cache control panel and for an end user the reason they would use this if if you do if you run a lot of applets in your day-to-day work for example a common situation is Oracle Oracle delivers a ton of their functionality via applets what you can do is you can go over here and set the dark it was ajar compression level now if the jar that you deliver is already compressed this won't be much of a savings but what this will do is since these are all zip files it will when it writes them out to disk in the cache it will compress them even further further and we'll take a look at the cash and we'll see here's gamescom and visual thesaurus in the cache as I mentioned as I mentioned before you know we didn't have to do anything all the stuff got cash for us automatically now one thing you'll notice is that in this demonstration I've been building a jar file and you know running it through safari so may ask well where is it well it's not cash because it's it's scheme it's file a file-based applet one that won't be cached okay now this is completely separate from the Safari cash or the Internet Explorer cash has nothing to do with any of those so I can go in here and you know delete individual entries out of here for example and safaris cash will not be touched at all and I can clear out the entire cash now just like that okay i'm going to show you very quickly the certificates tab this tab only gets used when you set that up the property that uses the java key store so if the user would then you know okay I haven't you know trusted any fights and store them in the keychain yet that's why these panels are empty but if I did I would see them in this panel not in the teaching so if you don't want to use the key chain for whatever reason you you would come over here to the plug-in settings and look at it that way okay now the last thing I want to show you is using the keychain and for this particular example I'm going to go to install anywhere its download site for I for install anywhere 5 and now here we have a signed applet it was generated by a thought a which is one of my root certificates so showing up as a trusted certificate and this time I'm going to say always I always trust it and now I'm going to go over here two occasions utility use keychain access and there I see my certificate we've got all the details of this certificate certificate and if I quit safari again and load it up there you go we didn't get the security dialogue because we've already said that we already trust the certificate that came from install anywhere so now all over here and delete this and we'll go back and load up install anywhere and there it is we don't have it anymore so now it's asking us to trust it again and this is a pretty much immediate so whenever I click always it immediately goes right into the key chain that can take a look at it okay all right let's go back to slides so I hope that give you some some new ways of looking at your applet development and some additional things that you can use for your deployment okay stop a little bit about java web start now some of the details with 40 s 10 I'm windows in solaris it's possible to tell the user hey you don't have the version of Java that I want you to have for my application so I'm going to download it for you but we don't support that in what Mac os10 if end users need to go to software update to get java 141 or or our website to to update the VMS so should actually a change we need to make a web start to tell users to do that because right now we just say up sorry we don't support this but you know that's something we'll be looking at in the future finally a with web start keep in mind that if you want a native library which is something you can do and let's start it has to follow the Mac os10 conventions so it has to be lib the name of the native library name jni life and where native library name is what you would pass the system that load library and here's an example of something I was talking about earlier where you can saw Mac os10 specific resources using the resources element and if you pass in OS equals Mac os10 only those things will be downloaded to the user when they're running on Mac OS 10 you can do this for Windows you can do this for solaris but our Mac it's you specifically have to use mac OS x and because that's our OS named property okay another thing we could commonly get questions about is the JVM versions and specifically if I specify a j2se version well what am i what am I going to get now in web start this is this is a far more well specified than we do in applications applications it's pretty much identical to this but for web story it's the it's very well specified what you're going to get if you specify one got three star you're going to get 131 if you specify 14 * right now you will get one for one now in the future if we do a 1 for 2 or 1 32 or not that we would do that but you know say we do a 1 for 2 or 1 for X we have an implicit ordering that says we will always give you the newest dot dot version if you will so when 142 comes out you know a 14

  • will give you one for one will give

you one for 2 and similarly a1 dot 3 plus or one dot 4 plus gives you the most recent vm greater than or equal to I'm sorry let's instead of you know doing mathematically what it will do is it will give you the newest vm that's newer than that baseline that you specify so one that four plus if we have 14 1 15 16 whatever it will pick the newest one it will pick the yes we'll pick the newest vm and seem got one lat three think of when you're using plus think of it as a baseline basically you're saying I know that my applet I'm sorry I know that my jnlp application works on everything one that three and later now one thing we've done I've done below put red x's over what over the product version of the j2se version tag the first for our platform versions and that's the most flexible because basically you're saying that I work with any anything supporting the one not for platform similarly with applications if you say that I only support 131 or actually more correctly if I only support one for one when we do eventually come out with a 14 to that one full one probably won't be there anymore and your applications not going to work so try to avoid using a civic productversion tag much in the same way as we don't want you to do that for applications either all right let's talk about some new things that we have in the update one for Jaguar that just came out we now have cookie integration with Safari this is something that's been long requested and now that we finally got Safari we've got a good platform and now we can now we can work much more closely with them this is a foot one of the first things that you're going to see as a result of that collaboration nothing needs to be done on your part to give this to work if there's a cookie if the users already got a cookie for a particular URL will fetch that out the database and send it along with the HTTP requests for the jars or whatever other resources are needed same goes for setcookie as well as get cookie it works in both ways for 131 we don't have that integration but we do have a Q&A number 12 65 that gives you an example of how you would go about doing this someone free it's not automatic there's some work that you have to do but we think it's a good compromise until you're able to move over to 141 and once you give us your feedback on using this you know we think we've got it right but you know you guys are going to be able to tell us more correctly than them we are we fixed a few websites that you know that we hit we know that needed cookies and have it working but you know this is a preview really so we want your feedback on whether or not we've got it completely right another new seem to talk about let's go back to our where we are today slice and as we mentioned that one for one is only available in Safari right now is it with a cocoa plugin what we want announced this week is the availability of a Java carbon plugin and what this will do is it won't automatically make make it available to to ie in the other browsers but they will now be able to get to 141 via a carbon plugin so for any browser vendors out here in the audience that are built around carbon applications you know I talked to us and we can we can you know help you figure out how to get this going so finally let's talk about some deployment of choices that are available to you everything I'm going to talk about here applies whether you're doing on Windows or Mac OS 10 so basically you want to look at the resource needs of your of what you're trying to deploy just doing something simple talking the server giving some status things like that look for a simple applet that's probably going to be your best solution if you need to write something out to the users this because the preference or something like that look into assigned applet if you want to build a real application when to deliver it dynamically web starts the way to go web star will let you have some native code to put some customization into your application web starts also going to give you all the functionality that you need you know things like the EA WT and things like that are available to you through web start so you can build a full application with web start so that's what you want to do and deliver it and use dynamic updating and all the features of web start that's the way to go all right here's some more URLs for everything I've talked about in the session for web start documentation start at our site and I'll eventually take you over to Sun site where you can get the jnlp spec that's a DJ now the JLP specification is what you need to do is what you need to look at it we're going to be delivering webstart look again with the java plug-in documentation go to java dot suncom everything everything you need to know about the applets is there and of course all of the Apple to Apple documentation for java in general you can go to connect that apple com you can get the 141 Developer Preview up update one developer preview there's now a quick time for java seed and i strongly recommend actually i think it's on the next slide oh okay the wwc linked list everything that i've talked about is going to be at that URL there so start at the start there and you'll be able to find this later on people to contact allen samuels Bob Fraser I highly recommend that you join java dev if you haven't done so already it's a great resource for getting lots of questions answered and usually very quickly not by one of us by one of the other members and here are the rest of the sessions actually for those of you watching me on DVD right now you can go back and get session 608 which talks about info dot P list we've got the additional session this afternoon on Java native integration good session tomorrow about or performance and please come tomorrow to the feedback form and give us your feedback on anything you've seen this week