---
title: WWDC2000 Session 401
framework: wwdc
role: article
path: wwdc/wwdc2000-401
---

# WWDC2000 Session 401

## Transcript

Kind: captions Language: en it's traditional to survey the audience at the beginning of one of these sessions as you saw its lastest I want people to raise your hands how many people here are Canadians yeah how do you pronounce je a VA Java Java right Java James Gosling inventor of Java who I tried to go to bring about now I try to get him here today he's from Calgary so I think if I pronounced Java it's out of homage to the inventor of this wonderful language by the way it's also pronounced and quack well let's seem to be losing on that one and if I say process and project I hope you'll forgive me this is a oh yes one other announcement I'd like to because this is a standing-room-only audience here it's not quite a standing room with the last one seriously I would like the Apple employees to please vacate their seats so that the paying developers can come and sit down so if any of you guys our Apple developers you've heard me talk about this a million times the you Apple employees get out of here I don't need you're just going to ask me hard embarrassing questions at the end anyway I still see a few seats here put your hand up there's a seat beside you there's some people standing out there the others a few seats is a bunch over here it's good place to stand over there seriously Apple people out out and about Apple people barred me well I want to give you a technical overview of web objects and I want to position this product for those of you who presumably don't know too much about web objects development I have the great advantage in this seminar of not having to give an in-depth answer to virtually any question you might add ask because there's 16 more seminars coming after this one it so the best answer I can give to just about any question you might ask is go to session 417 on director whatever and they'll take care of it there but I would like you to understand how a web objects application works what the different pieces are what the different objects are that you write versus the ones that we write how you choose ours how you choose yours once at the front end what's at the back end and what do the tools do if I can get most of that across I'll be pretty happy so that's our goal we're going to look at the frameworks if all goes well I have had some trouble with my database server here my database server by the way is running Windows 2000 so that if it crashes not my fault all right but I do hope to build a little application at the end if all goes well and I'd like you to understand at least the titles or the other sessions what the heck is directed you have a client anyway let's find out about that I'm going to have these little logos in my presentation when it's a good spot for you to go off and think about a different session that might answer more about this so what does web objects do it's an application server I hate that term okay because it sounds like all it's doing is coughing up applications but this is a slot the industry has put us in and I think it's much more than that it's developer tools it's frameworks and a runtime environment and a monitoring environment mode but most importantly frameworks to do most of the hard part of development for you for instance the web objects application you might write some objects you might choose some of ours and deploy them on this box in the middle is big square here and those objects might talk to a variety of data services at the back end it might deliver either a Java client or a web-based interface out the front end in fact the same objects can do both kinds of interface and there are other objects that can even do web interfaces how many people here have whap on their telephone right here in the room Darin I was going to write a web application and have you log in and send me something during the demo I knew I knew that probably wouldn't work out now who is this for this is a developer product those of us who are Apple I services employees can make this thing look much easier use and it maybe actually is but but that's alright this is a powerful product with a huge amount of functionality and a corresponding learning curve associated with it but a steep learning curve is good because it means you're going to learn a lot in a short period of time right thank you engineering wanted me to take that off the slide I'm glad I left it there web objects works with a whole variety of technologies I'm going to court I'm going to talk for the most part about web objects 4.5 but I'll touch a little bit on what's coming in the future we work at a variety of program you know what that's not right that's better well okay today today with four point five you can use objective-c and web script although I would encourage you if you're going to get started and you want to move ahead to the new all Java version probably best to start working in Java today we work with a variety of databases a variety of adapters that you can see there and this is an open process there a process there are more adapters coming from third parties we have a variety of mainframe conductivity solutions you can build different user interfaces you can work with a bunch of web servers but the most important thing open open open open open open open this is a very open product that people have made integrate with a whole variety of oddball things that we've never heard of we had a customer in New York that apparently wanted to use pic as their database so when I heard this with a pic like God isn't that database it died in about 1975 or something like that but we have an open enough product where we can make it integrate with anything that has a reasonable API you can develop on those various platforms you can deploy those others note that Linux and Mac OS 10 are sort of future release platforms on this particular slide here and you can mix and match those as needed and grow from a small deployment to a vast one without hopefully a huge amount of effort you might start with something like this where your application is all deployed on one little box there and grow it now don't be frightened by this next slide but you might grow from that to something like this where you've got multiple firewalls and multiple web servers and multiple web objects servers in fact these purple things over here these are actual identical copies of your web objects application running on a bunch of different machines and a little thing we call the adapter runs on the web server and sorts everything L keeps everybody straight so you can move fairly seamlessly from that to this with our runtime environment if you want to learn more go to the building large-scale applications session a couple of key ideas there's objects at the front end objects at the back end the ones at the front end we call web components and you use web objects builder to develop those the ones at the backend or Enterprise objects and use her prized objects modeler to do that I think they took me for this talk to get the talk faster than anybody else that Apple but always my mouth right but these objects are kept completely separate the objects that generate the HTML user interface have no idea what the heck is going on back at the database back-end because they're all talking to a common middle tier of business objects that provide functionality on request to the front end HTML components and these middle objects are created on demand by the enterprise objects framework objects at the back end and all the decisions about how any of this works are actually made pretty much at runtime so at the front end a web component consists of some HTML that you might type up yourself or get from somewhere along with this one special tag this is all we put in the HTML with this tag it says a web object the tag it says here something cool is going to happen really I thought it's a web object name equals picture and then there's another file that says you know what when you see that web object tag name equals picture that means send this certain message to this object of the middle tier and take the result and put it where that web object tag was and repeat this process over process over and over again to build a dynamic page on the fly these components at the front end that are producing these things can produce all sorts of stuff they can produce plain text they can produce more HTML they can produce fancy clever JavaScript effects images whap Apple script whatever you like it's a it's an open framework at the front end there and you can have a variety of non HTML components we have a partner report mill that has a really interesting PDF based reporting kit that takes your middle tier objects and builds a dynamic PDF document that she can send to the end user we have a partner in Europe called wipe objects that's building web enabled things that I just think that's so much fun to say a wrap object like it cartoon sound effect we also have api's in the product that can generate XML in a in a fairly straightforward way that hopefully I can have I don't think I'm going to show you that when there's a session on XML coming later at the backend oh I can see this down here no this is great thank you I would like to say konbanwa to the Japanese translators konbanwa konbanwa they're waving thank you thank you very much also whenever I do a presentation I'd like to try to take out the cameraman so like to go this way back in we've got these Enterprise objects we call them Enterprise objects and they are objects like anything else in the computer science sense of the term they've got data they've got procedures that operate on this data but what makes them special is that there is something gluing them to a data source there is this whole back-end architecture that says this kind of object customers comes out of this let's say Oracle table for every row in some Oracle table let's make a customer object for every row in some other table let's make another kind of object excuse me Oh enterprise objects manages this whole collection of middle tier business objects and takes care of issuing the SQL necessary to fetch things out of databases and constructing the objects it'll also notice is when these objects change and it pushes the changes back into the database nothing I like less than SQL programming and EOF is a great way to keep me from having to actually know anything about SQL so don't ask me any questions about SQL EOF also has a very sophisticated architecture for managing relationships of objects customers purchased a bunch of products a customer object has a list of product objects in the database world being one too many joint students take classes student has a list of classes that they're in a class has a list of students that are taking it many too many join with some sort of ugly middle intermediate table in SQL in the web object environment with enterprise objects this is very very seamless you just think in terms of objects and their properties and their relationships to other objects EOF the enterprise objects framework is the real gem of web objects I want to say I was not in the meeting when they picked the name EOF I mean that kind of meant something in computing already but this really is a dynamite a dynamite product here how's that joke working in the Japanese probably not very well this really is the best part of web objects is enterprise objects I would encourage you to go to session 403 please this object modeling session I'm going to show you a rough look at object modeling here but there really is a huge amount of meat behind this that provides you with all the rocket fuel necessary to turbocharge web objects coming soon AJ be don't ask me Rory who was just here he's the guy to ask he loves talking about EJB and all of these different objects are bound together runtime by a web objects application that finds the front end w/o components finds these tags figures out what messages it has to send such as objects maybe from databases and mixes everything together and sends a stream of plain ordinary HTML most of the time to the end user along with some advanced session management we have a very sophisticated session object in web objects you might have only one copy of your application running and 100 users using it they're going to be a hundred different session objects created by the application maintaining data for each of those individual users and this is a full compton subclass and implement your own behavior you can you can use a variety of sophisticated strategies for dealing with people that seem to have connected to your application and then disappeared you can arrange for objects session objects themselves to be kept in the database you can add shopping carts and security and so on we give you a framework that provides this individualization as needed along with some runtime monitoring tools memory that big scary slide you've got to get from the one copy of the application to the 45 distributed copies on seven different machines we have a tool called monitor which itself is a web objects application so let's go clickity clickity click I want four copies over there I want three over here I want to over here it starts them all it keeps them running it sends you mail if they crash it measures the load and statistics and so on pretty good runtime environment so here comes my big money slide I want it we have this thing called the request response loop which is sort of the core of everything that goes on in web objects a user makes a request they fill in a form they click on a hyperlink data comes whipping in through the web server something happens on the web application and a response goes back understanding that is sort of the core of understanding the web objects architecture because it shows you the various different components play and I'm going to show you a few pieces of this here let's suppose on today's vast Internet there are three users and you know that's the net because it's a cloud that's some sort of ANSI standard and you've got a web server with this web objects adapter on it you've got a variety I'm showing three here a variety of application servers with enterprise object adapters to talk to databases the web server as we've heard can be pretty much any operating system any web server the web objects adapter we have special adapters for the more popular servers and we have a CGI adapter that really you probably shouldn't use you're using one of these other servers but we have a variety of tuned adapters for certain web servers the application server can be a variety of platforms again Mac OS 10 and Linux are sort of future directions in the next product and we have a collection of enterprise objects adapters that can talk to a whole bunch of back-end databases in a variety of ways so let's suppose we had a really incredibly complex web object application here where user is going to log in he's going to type that same and it's going to do some processing it's going to look up a same in the database it's going to make a user object or something and say welcome back Steve thought long and hard about this particular example so there's two things that have to happen we have to process that request we have to figure out what to do with this string s haman that's coming in from the web browser and we have to generate a response we have to make up some HTML and send it back to the web browser well it's actually three it's actually three customizable phases of this loop there's a second action invoking phase after web objects has collected all this data then it's thanks for a moment what actions should I send what message should I send what other object and then that object is responsible for generating the response so see all this all this works in action let's suppose the user has submitted a request to a web server all the web send the string s Haman is coming along they filled in the form along with some HTTP gunk about what field that was and everything that request comes to the web server and the web server adapter hunts around for a copy of the web objects application just to hand this off to very first time it's going to pick one at random there might be 30 it picks one at random tuqwan times it's usually going to redirect you to the same copy of the application that you started with although that's optional so all the disturber really has to do is relay this string to the web objects application so it finds one of those throbbing instances there passes this string the user typed that same and that kind of information is coming along with this instance and that particular instance is going to find the component that created this particularly the combination as I said of some HTML and a second file that defines the meaning of these tags and all you web objects wise guys in the audience are already saying he didn't clouds the wo tag and besides it doesn't it's not the tag is not wo it's web objects I don't care it in every room on that thing but previously this login component was used before to generate that page that says what's your name and now that the response has come back in the web object session is able to automatically find the component that caused that page to be generated and to study these bindings down there value equals username that means whatever they typed in the box called input we want to assign to an object called username so it takes a look at the various form values that came in and it figures out what action to invoke now there's probably some Java code associated with this particular component you can see in this little example of a log in Java this object has a string called username and it has a little procedure called handle login and those bindings in that other file in red there that's called the wad file the web objects declaration that says where stuff goes the data that you've got is the user name should be stuffed into this username variable and then the method handle login should be invoked and the handle login method here is just messing around with a session saying here's the customer name is you go and fetch the customer object and then it returns the welcome page so that's phase one and phase two of this request response loop we've extracted some values we've figured out what action to invoke the action is invoked which as you saw in that bit of code says go find the component called welcome another one of these things is loaded and in this case there's a tag in there that says web object name equals user name and as the second file that says you know what user name is a string and it gets its value by sending the message customer to the session object then it sends a message first name to that one so we're need to fetch some sort of customer object so we can send this message I'm getting to that any needed objects might be fetched from the database here and some SQL is going to be generated automatically so one of these object model files which I'll show you in a moment it's automatically loaded and that's just a textual description that says you know what we're talking to Oracle in this case customer objects are coming out of the cust table so you should probably find the row where some property equals s payment and return that and make it into a customer object so our back-end automatically figures out this SQL sends it to the database some text comes back from the database and has automatically stuffed into a blank customer object that AOF automatically fetched so the application is really kind of disconnected from the details of how these customer objects are actually created all that SQL flow back and forth happens automatically then this complete response component says oh I need to sit now that we've got that object I need to send the message first name to it some strings Steve comes back and we take that web objects tag and we substitute it with whatever the object responded with Steve and then some fascinating HTML goes flowing back to the end-user I assure you you can write more sophisticated applications than this one with web objects but there's a basic loop like this at the heart of every single one of them and every one of those arrows that you saw is an opportunity for you as a developer to customize what's going on here you can leave the session object alone if you want but if you want you can also have it intercept these things intercept the loading of components and do clever things you can in fact you can do quite a bit without writing any code at all although I don't want to give the impression that that's how this works because most of the objects as they come out of the box are prepared to wire themselves into this request response loop so the requests responsible one of the reasons I came up with this slide and one of the interesting things about this job is that you never really know what what Steve Jobs is going to announce in the keynote is he here and I used to go through a huge song and dance about this request/response loop because this was how we licensed web objects and this is how we decided what to charge you the more of these requests and responses per second the more money you had to give us and we had a whole tiered architecture right up to fifty thousand bucks where you could have an unlimited quantity of these things now it's six hundred ninety nine bucks but that doesn't excuse you from having to understand how this actually works please note that there was no mixing of SQL and HTML in here in fact there kept as far apart as possible I think the worst scenario you could imagine is to have SQL and HTML in the same file something's wrong there you got your user interface and your persistent to your business logic all mixed up in our case we keep them pretty separate we have one kind of object that sends out HTML we have another kind of object that connects to a database we have a middle object that implements the business rules is this student allowed to graduate that might be a business rule on a student object is this student what's his first name that might be a string but something like is he allowed to graduate might be a complicated piece of Java that determines whether he's paid his parking fines and return his library books and sends a bunch of other messages and it says yes or no you write logic at a middle tier like that and you let our framework map the data into and out of Oracle or whatever you like you let our other frameworks and our other components build the UI on the fly and you don't personally have to write SQL or HTML at all unless you want to some people want so we have three tools here that are used in web objects development project builder as I'm going to refer to it has sort of been retro renamed to now be project builder wo for those of you who are experienced web objects developers this is the new name of the project builder you're used to project builder wo just to keep it straight from the brand-new project builder that engineering is working on for a future release but we have two other tools web objects builder that builds the front end components and Ile modeler that sets up this mapping to these middle tier objects I'm going to talk a little bit about each of these the old version of project though they're frankly not that exciting anymore the web objects developers in the room would agree with me that it's great that project builder is undergoing a major overhaul yeah and better debugging is coming I had to do the web objects debugging seminar at WWDC last year and I'm glad now having done that seminar that our story is improving a little bit by the way we have mark Ritchie in here mark won the world web objects debugging championship last year at WWC in my session I'm sorry we've marked you have no opportunity to defend your title today anyway let's talk about these tools let's talk about these tools oh this way okay no come on yeah all right thank you dear this you know this which is the top of this could you tell by looking at this which one is it which way is the top no me neither all right please go to james Dempsey session on designing reusable web components to hear a lot more about how that is designed but the goal with building one of these front-end components is to come up with some HTML with these special tags in it to say here's where something interesting is going to happen and that might be a directory called main main wo that's a web objects component and it's got an HTML file in it it's also got a wide file a web objects declaration that defines the meanings of each of these tags the tag called string one is actually a string object they get this value by sending the message cost to the current product and then there's some other properties on there what number format should we use the object called link one is a hyperlink and it's going to cause the message place order to be sent back to this object and the third part of one of these components is typically some executable Java code here you need to create some of these things to build a web objects application in fact you'll probably create lots of them you usually have one for each page and it's a whole fractal kind of relationship you can have components that contain other components you could have a header bar component and the menu thing down the side and you could have a footer and you could have components that cause a loop to happen inside of which other components are firing you build a lot of these things to come up with a complex application and how do you make these well you can use stickies if you want you know you can use Emacs VI whatever your how many people make VI is much better editor than than Emacs any other VI people good good Emacs stickies but the point is that all these things are just text files we have some nice tools we don't have to use them if you don't like them you can use whatever tool you want or you could use some kind of a WYSIWYG HTML editor and there happen to be a couple out there that are smart about this extra web objects tag or you could use their own web objects builder and web objects builder presents you with something like this I should I've been waving at that screen too long come over here in this bottom window you're looking at some component okay and in the middle that section says HTML that's a rough view of what your HTML is going to look like there's a there's an image object that's the square there's a string that's the thing in between the curly things there's a hyperlink down here and you can dress this up with whatever HTML formatting you want web objects builder is a not bad HTML editor it does bold it'll make the text bigger you can drag in colors and pictures and make this thing look really ugly really rapidly and in the bottom hat so that represents main wo / main HTML let's say in the bottom half is kind of a visual representation of this wad file my current main object apparently has an object called product associated with it and there's a line and below that are methods it has a message called place order that you could send to it and I might conceivably want to arrange that when you click here where it says click here and by the way that's the terrible UI to have it actually say click here at a hyperlink that is so 20th century you need to make a relationship between that you need to indicate that you want that message called when this link is clicked how far can you go with this so you draw you draw a little line like that in web objects builder you draw a line from one of the other that says I want that place order message to be sent when this hyperlink is clicked and new and web objects builder for point five it pops up a little list of all the possible properties of a hyperlink object right there you pick the one you want called action in this case this is the action I want the hyperlink to trigger and then you're done and in the top window that's an inspector that shows you all the properties of the currently selected thing and I'm going to hopefully run web objects builder live in a moment here to show you how this all actually works but this is the sort of methodology you use you can work with a WYSIWYG view like that or if you like can also work in a raw mode you can type the HTML up yourself you can type the wad yourself you'll probably forget to put in semicolons you'll probably forget to close some of the tags it's probably not such a hot idea to work in the raw mode but you could also if you want farm out the HTML to a graphic artist in your department they wouldn't need to know anything about web objects builder so long as you begged and pleaded with my begging it don't touch those web object tags please leave them alone that's kind of important but at least at least you are not exposing all of your business logic it is no less ql in there there's no custom code that says how we compute whether a student can graduate it's just interface just interface definitions also once you've written a bunch of these objects web objects builder has palettes where you can put common things you might want to use in several different scenarios you can drag them up drag them off of here and drop them off of there four or five of these come with web objects we would love it if you would all put this one on your application little damage there ready to go powered by web objects drag that drop it on your application I think that's actually a hyperlink that takes you to apple.com slash web objects or something but there's a bunch of other useful pre-written objects in here that are ready and raring to go and then this last one is a palette that I personally been working on I keep reimplemented the same darn things on a lot of different projects but I can now put them on a palette like this and drag them off of there and drop them into different components as I create them or I could even mail that palette to you if you wanted to have a localizer bar or a cheesy bar graphing thing or a thing of a guy running like this with a PDF document in this hand those are just graphic representations of some interesting bit of functionality that I can drag and drop off and share effectively I want to show you that a little bit later we got a good session coming on designing reusable components that will talk more about how all this actually works and how to architect a component so that it really can be used effectively by people other than yourself personally I read a lot of non reusable components too not that proud of that but I put my good ones on these pallets so I can use them in different scenarios so that's the front end web objects builder the back end we have another tool EEO modeler enterprise objects modeler that lets you indicate what database you want Oracle and once I base I want db2 it lets you indicate what tables you on out of there and what you want to do with those tables I would like my cusp table and Oracle to correspond to customer objects so with this eel modeler tool you design relationships between some kind of database schema and some collection of objects that are going to form the middle tier of your application and what did I do with my water here it is I'm looking for the picture on here of the kids in the Toy Story logo but I guess it didn't make it to this one and with a camera pointing at a bottle wasn't it anyway so EO modeler is one of the prime tools you're really somebody in your organization needs to understand this enterprise objects modeling stuff doesn't need to be every single programmer some people might be better at the UI parts with web objects builder but this is pretty important because this establishes the connections between the kind of objects you want to make and how they're going to be stored in a database so for instance I've got an Oracle database running on my trusty old laptop here if it hasn't crashed which it did several times today Windows 2000 not ready for MoMA and I in that Oracle database is some car information I've got a manufacturer table I've got a model of car table I've got packages and features and so on but it has kind of a crummy schema the table names aren't very good they're very compact and cryptic there's more data in there that I actually need there's tables I don't even care about there's tables with spelling mistakes but that doesn't matter because with the modeler I can say I would like nice beautiful customer objects with easy to use API is to come out of that particular Oracle database so you do that with yo modeler in a very graphical way you can indicate for instance in this model I'm sorry for this this little Louisville should be down a little bit this is indicating vehicle objects are going to come out of the MDL table and the pr min column of that table the minimum price of the car is going to be available to these vehicle objects as a property called base price so once I fetched a vehicle object I can send the message like base price and the appropriate thing will come out of the database for me I can instead of the message like loaded price or vehicle name and I can also use this to define relationships I've got the vehicle objects and I've got maker objects so there's a Mustang object and a ford object that are going to come out of the database and down at the bottom half of the window there you have relationships between these objects vehicles need to know who their maker is and in SQL as a joint similarly makers need to know what their list of corresponding vehicles is to one-to-many join and all that stuff is defined graphically in one of these files and this is nothing more than a text file a big fancy text file that's your application loads later and at runtime by loading this file it learns how to do all this stuff how to fetch cars how to fetch manufacturers thus if the Sybase guy comes along and gives me a terrific deal throughout oracle bring in Sybase I could just tweak a couple of things in this model that say you know what now we're talking to Sybase making the same kind of object as before my other applications would need to care they're not concerned with SQL they're just concerned with the kind of objects of this model define so this gives you a level of database and schema independence is very valuable here it also lets you define complex relationships between different objects I've got a vehicle object in the upper left hand corner I've got a maker object kind of in the top middle there's an arrow going between them and we have this scheme called key value coding which is another wonderful thing you got to learn about where you can just send a sequence of messages as strings with dots in them so if I've got a vehicle I can send vehicle maker maker name that will automatically traverse this relationship find the maker name the string Ford and bring it back to me and you hook up paths like that in web objects builder because web objects builder is aware of all the definitions found in one of these object model files pretty interesting stuff project builder is the old project builder whoa is probably not worth spending any time talking about here although if you install web objects for point 5 you will get this tool I think you'll be very interested in the new project builder which is coming I personally cannot wait for that but project builder as it stands now is they both have the same rule the new one in the old one let's organize all of your dot wo components and your EO Model D files and your dot Java class code and anything else images and sounds that you want the application let's organize all that stuff and run the compiler and let you decide what thing should be localized and so on so you do spend quite a bit of time in this tool typing in hopefully not too much time debugging code something that's definitely worth learning a little bit about although I'm not going to dwell on that so I really got my fingers crossed here that this development demo is going to work can I have five on that one and four on this one please I say it here it comes out there it comes out there five on this one please say it in Japanese yeah there we go hey this machine is that screen this machine is this screen over here actually you know what can I change my mind can I have four on both screens how good are you guys hey that's good okay I hear some stuff that I started before that I going to come back to later I want to show you the the basics of building first uneo model and then an application with project builder then when I'm ready I'm going to what not now but I'm going to want five on that screen later I'm calling an audible here this is not what we discussed earlier I'm changing my mind very dynamic dynamic late binding well I've excelled up so we got a bunch of tools here I've got a Oh modeler going here and I want to build a new object model of a database running on my big hunk and Oracle server over here so let's start EAL modeler and arrange to build a new model here let's see this all right on Mac os10 server we have a vast collection of adapters available for your use it's great third party opportunity this is a browser this could scroll to indicate more adapters and frankly on on some of the other platforms like Windows NT you do have a little wider choice of adapters just because Mac OS 10 server is a little bit newer but here I'm going to indicate which of these many adapters do I want to use I want to use the LDAP adapter well it will ask me for some LDAP connection information do I want to use open based light which is a pretty good free database that comes with web objects well no I actually want to use Oracle and I want to connect to my Oracle database running this laptop over here and learn what its schema is and define a way that I can make my manufacturer objects and vehicle objects so the first part is to remember the Oracle connection information and care to guess what my password is here tiger that's right that's how you break into an Oracle database you try Scott and Tiger because nobody ever changes that and yo modeler is going to learn a bunch of things about that Oracle database it's going to for instance show me all the tables that are available it's reached over and contacted that database and learned about all these tables that are available I got a few with spelling mistakes like inventory I got bonus depth and amp for the standard Oracle demo with the world with departments and employees but the particular tables I'm interested in are Man U and MDL I've got manufacturers and models of cars and I'd like category as well but I wouldn't like these ones I guess I want the that's better I want those three tables to participate in my model all right yo modeler will now go out and contact that database and ask you a few referential integrity questions that I always just hit next here that's what I really ought to think about that sometime get open the documentation find out what that was about probably important I might go to a couple more sessions this week it would be good for me and you guys know you guys know you hit next when you see that panel too and then you come back later oh yeah referential integrity because I'd really should notify when this thing is deleted but it will also ask me if I want any stored procedures the correct answer is almost always no none and here we'll build a simple object model for me and this model says that all right you seem to have these tables in the database category man you in middle therefore I'm prepared to make cat green man you in middle objects for you assume and that's what you want well it's close to what I want I would like them to have better names though category the category a car like a pickup truck or minivan maker of car instead of MBL when we call it vehicle and let's fix these over here these are the actual classes they're going to be used maker vehicle and you can look at this vehicle object and this is the bare-bones definition of how enterprise objects is going to make vehicle objects for you it discovered that there were aha these columns in the database there's a column called add tag in the database it's a varchar' - there's a column called PR Max and the database it's a number therefore this model says I will make your vehicle objects have a decimal number property called PR max corresponding to the number property called PR max you'll have a string property called MDL name let's call that something that it's called that the V Holden a vehicle name let's call this loaded price this is the base price you might want to fix up some properties of these other objects then take my mat my maker object let's call that a maker name and maybe I don't even care about some of these other properties I could delete them I could pick some subset of the database schema but I'm in designing objects here I'm designing a recipe for creating objects out of a particular data source in addition there are down the bottom relationships that in the case of Oracle the modeler is able to automatically discover it can ask the database for some information about primary and foreign key constraints or something and then it decides that oh I guess makers have a one-to-many relationship to vehicles so I'm going to range oh you know we got a diagram view here whoo I was very excited to see this diagram view in the project builder demo today so I don't have to come over here to see it I've got vehicle objects I've got maker objects and I've got a one-to-many relationship between them every maker has a list of vehicle objects and if I send the message MDL array I can get a list of all the matching vehicles and if necessary SQL will be created things will be lazily fetched only on demand which is another great feature but that's kind of an ugly name let's call it vehicles now I can send the message vehicles to my for dobbs you can get a list of all the Ford cars we'll fix up these relationships go the other way to maker category and scoops category and so on and you're just defining a resource here a file that's going to be used later by many perhaps many different applications in your organization so that not all your developers need to know these icky details of how this actually works and believe me there are a number of icky details maybe that wasn't the best choice of words there are there are inspectors on all these things so you can look at something like this and determine exactly what SQL is going to be used whether it's read-only what to do if it's no what do you want to do with these relationships there's a lot of power in here and there's even there's also the ability this will tell me whether my database is actually still running to go and fetch all of them and show you the contest just so you can verify that what you think is happening really is happening so there's all the vehicle names in my database I asked it to fetch all those properties I could ask you to fetch all of the vehicles for me just to confirm that the data I think is in this database actually is in this database ok that is a complete and working eel model I'm tempted to use the one that I already wrote because I know it works rather than this one well we'll save this one we'll live dangerously this will be the big auto by Steve vo model here I want to use this in a future application I want to be able to load this model and then BAM create maker objects and manufacture objects and so on so we may come back to EO modeler later we may spend a lot of time in the o modeler if some of these other things don't work but let me make a new I want to make a new web objects application here there's different kinds of web objects application of applications you can make in project builder whoa here I want to make a new one and I was thinking about this earlier today I wanted my application my car browsing application to be one that everybody will want to use so I'm going to call this application I love you I was original going to call it something about cars then I had this a great idea so we're building an application called I love you and there are a variety of it says Wizards here but that's wrong these are assistants they're not wizards their assistants we had a meeting last week they're not Wizards anymore they're assistants there are a variety of different assistants that you could use here I've got 18 minutes do I need an assistant no I think I'll be fine my favorite assistant is the nun assistant I think that's the assistance that most developers actually use so okay thank you thank ya I wrote the note assistant thank you very much dick and and so project builder has created a basic web objects application for me here and there's a couple of simple basically empty do-nothing Java classes there's one called main you can see that it's really not doing anything there there's one called application that's printing to welcome to I love you there's really nothing else going on in here other than a blank an essentially blanket virtually blank main component called main w/o that if I double-click on it I can work on it in web objects builder so this is web objects builder editing the main page of my I love you application okay and come back back in a second here we have this idea of resources these are additional things that you want available to your application and a great resource to add here would probably be my what do they call that object model we remember how do I see there it is thank you thank you you guys are great assistants - so by adding that object model to my application I've now got the ability to work with these vehicle objects right in here so so one thing you might want to say is we're going to build a simple application where you can type in something about the car that you want to buy and it will find all the cars let's say you type in the maximum you can spend so remember we have a base price property on cars I want to find all the cars with a base price is less than library type here and have it fetch some cars for me there's a lot of great drag and drop awareness between these different tools of who does what so I can get web objects builder going here and I can say you know what I want to be able to manipulate vehicle objects from this EAL model in web objects builder I drag it there I drop it here and it adds a special object that knows how to go and fetch cars for me a thing back here at the bottom called a vehicle display group so here in in web objects builder starting to get a little bit more interesting I've start I've got some various things now here that I can connect to I've got this vehicle display group object that's got a whole bunch of funny properties that I can message and leverage here I don't have any UI yeah fool you I might be nice have a little UI creating music please we don't have any music all right this place why would you auto by Steve which I bet you is a domain name that's already taken on the web so we'll make it bigger we'll show you the vast array of complex formatting that's available in in web objects builder here whoo and the incredible powerful tags you can put in like a horizontal rule tag you can if you like you can make anyone this is just static HTML but you can make these things dynamic if you want as well if you want a horizontal rule tag whose width corresponds to the price of the car you can do that you can click on this thing and say make this a dynamic object and hook up its width property to the price of the currently selected car I'm not going to do that what I would like to do though is to have a simple form here where you're going to type in some information how much money have you got and we'll have a text field where you can type in your net worth and then it will find all the cars it with a submit button that are worth up to that amount of money okay now this is just basic UI stuff here these things are what we call dynamic elements they're objects that corresponds sorta to HTML input fields and if you get if you click on this button here you actually look at the raw HTML and see what's actually gone on here it's just it's added a web object called form that goes from there up to here by the way for those of you who haven't used web objects 4.5 you can now triple click on the beginning tag and it selects all the way down to the closing tag oh man that is this great you should upgrade to web objects 4.5 just for that feature let me tell you but that's basic HTML with some tags in it they're going to be studied during this request/response loop and down here are some bindings that I haven't filled in yet of what do I want to have happen when you click on that submit button it's not for instance this thing called the vehicle display group you can send all these messages to it I can send this message qualify datasource to it and you draw a line like that I want that button to send this message to this object on the server when it's clicked I want this text field here to be used to restrict the cars that I'm fetching I want to take the maximum I want the base price of the car to be no more than whatever you type in there so I've hooked up two objects now two objects back at this middle tier and web objects is going to do some screwy things with the URLs when it sends its HTML to you so that when you click on that button and fill in that field it can unwind all that stuff and decide what message should be sent to what object at the middle tier even if there's a thousand people simultaneously using this application now that would be a complete application who says we should run this now or is there something we should add look at the cars maybe that it fetches okay all right sure sure let's put in a table I want to for each car I want to display the name and the price something really simple a little table wizard here I want the second row wrapped in what we call a repetition and if you can see the second row of that table there has actually got a blue line around it that means this is this thing is inside a will repetition object which just means anything inside here is going to repeat over and over again once for everything on a list well I would like to have the name of the car and it's just basic HTML and its price and then down here for every car we want to use a string object to display its name and another string object to display its price and now we need to arrange to loop over this list of cars that my display group has just fetched and come up with a many many roads table so what I'm going to do when you work in a loop in computer science you've often got some kind of an AI variable that you know in the for loop or the wild loop that goes around the loop I'm going to create a little variable here called vehicle I'm going to add to my class a vehicle object on this particular page it's going to be used to iterate through some other collection of vehicle objects and the collection I'd like to iterate through is the list of all the objects that the display group just fetched so I'm going to draw a line to that repetition say use this list all the displayed objects use this item use this variable to go through the list and then this item is a vehicle so display its vehicle name here display its base price here you know that would be a completed application attempted to actually try running this but you know it's much more fun to actually talk about these things without running them usually safer let me put that thank you very much thank you let me put in one more thing well put in how many vehicles you matched we'll put in a string which is the count of the number of vehicles that you matched that many vehicles save now I'm going to go back to project builder and I was originally going to try to futz around and display it off of IE on this other machine rather than an omni web on project but I think would be simpler everybody will be able to see better if we have the same stuff on both screens I think it wouldn't be fair to people to have all the good stuff over here and all the lame web-browsing over there would that be fair what do you think over here yeah thanks all right so in this case I'm going to actually use omni web the browser that comes with with whatever this is here yeah it's my favorite browser too so I'm going to compile my big I love you project here and well that just compiled these various Java classes and this one you'll notice the main dot jab it added a couple of objects to it we've now got an object called a vehicle display group we've got another object called vehicle those were added by the process of manipulating things in web objects builder so let's try actually running this here please please please so you can launch an application here in project builder and it will ask your your web browser to rendezvous on the URL of this application let me see if I'm getting exactly the right combination of overlapping windows on the screen here you but not you and yes so here is a debugging window where all the SQL that's being generated is automatically going to appear here along with a vast array of helpful debugging messages at the start telling you of the state of all various things in the application but here's my browser how much money we got I've got twenty thousand dollars there are no vehicles for twenty thousand dollars when I click on submit they're over here you can see it connecting to Oracle you can see the SQL here that it automatically generated can you see that in the right hand side I didn't type any of that that was implied by these objects and their relationships to each other and the information in the model about how they're represented in Oracle and I can tell over here that there were ninety five rows ninety five rows of SQL came back ninety-five blank vehicle objects were automatically created they were each stuffed with these various properties from the columns of the database set your name of this and your minim price of this in your maximum price of this and then that repetition on the front end side the main component was not aware of how any of this happens so which is looped over some list of cars that you give it some list of objects and it displayed them all for me here so we got all these various different 95 rows in the table I have no idea who actually makes any of these cars so it might be useful to add that to the brow to the displayed information here in every row of my table I'll put that palette away for a moment in every row of my table I'm displaying the vehicle name in one table cell here but why not put in another string in a blank space and ask the vehicle for its maker object you're going through this object browser down at the bottom you're traversing the relationships to find an oreo model and I want the maker name to appear on that string drag drop this will now when I when I research here it will now do a whole bunch more fetching because it's going to go and get all the manufacturer objects that it did not need until now there's a whole lazy scheme in here called faulting where even though an object has a relationship to a manufacturer we're not actually going to fetch that manufacturer object until you indicate you actually need it so you ask for one of its properties so I set up a in web objects builder I set up another string that's ask the vehicle for its maker and ask him for its maker name list of cars see what else we can do let's go to my inspector here and there's an inspector paradigm in web objects ability you can see that I'm deep inside a table here I'm inside a string inside a table data which is inside a repetition inside a table and there's this new path thing in 4.5 at the bottom that makes it much easier to select and to tell exactly where you are and manipulate things selecting a string like suppose you selected a bold string did you mean to select the bold tags at the beginning in the end or just a string there's some great new stuff in this new four point five web objects builder to help you deal with that complex stuff but I want to pick this table and in my inspector window up here I want to add on the right-hand side another column let's call it picture where could he be going with this and on this cell right here let's put in instead of a string let's put in an image object this is another basic object in web objects just like the string knows how to send a message and take the result and interpolate it right into the page this one knows how to send a message to someone to get some JPEG or gif data gift jiff jiff gif how do we how you say it down here actually no I asked some of my Apple Canada colleagues how to pronounce and they say use y'all though so that's a anyway I'm going to these cars happen to have a property called image JPEG data which if I've been planning a little better I would have renamed that an eel modeler to be picture but let's drag that to this thing and say that's where your picture data is going to come from I happen to know that there whoops they're not pings they're JPEG images and now let's fetch not quite so many cars just to keep it useful let's fetch all the cars for $11,000 now we got pictures oh thank you there yeah okay I did not thank thank you but I did not actually take the pictures of the cars thank you all right is there anyone from Microsoft here I stole this from one of your websites I'm sorry so there's a bunch of cars and some trucks too and this isn't maybe as useful as it could be because we're getting everything mixed up here we're getting cars and pickup trucks and minivans all mixed together we might want to do a more complex qualification in some way perhaps instead of just letting you choose the base price that you want to spend we can hook up a range in there if you wanted you could say price more than this and less than this you could do all that very elaborate stuff in fact you can graphically define some sophisticated fetches right inside yo modeler itself alas no time look I'm looking at this great counter here I've got 6 minutes and 19 seconds okay all right right on that I want to have a pop-up list which is this one that shows all the different categories of cars you might remember there was a category object in the database that was just a list of things like pickup truck and minivan and so on I might like to display all of those on the pop-up list here so I can restrict my fetch a little bit better well do to do that I might go back to my object model and say let me bring in a category object drag drop add that this one I wanted to fetch all the objects when this page is loaded that's all the category objects don't wait for me fetch them all and I'd like to go through all the category objects and display them on that pop-up list here so we have another paradigm of lists and items that go through a list being applied to a pop-up same kind of design pattern happens on pop-ups and browsers and repetitions all throughout web objects I want to loop through it with this we got this convenient thing called selected object I want to know anything about that yeah okay that's no words no not there oh wait undo thank you another good feature in web objects builder I want to work through that thing and display all the category names so now I've got to pop up just with that little wiring there that's going to fetch all the objects from the database and display their names on a pop-up list one of them is going to be selected and you can arrange that the vehicle display group matches exactly the category that you selected there I'm at the selected category to be used to qualify and restrict the kinds of cars that I'm going to get these might seem kind of odd now but this sort of paradigm comes up quite a bit in in web objects now at this point I do need to stop and recompile because it did add one whole line of code to my application at this point which if oh there it is yeah I know it's alright don't worry about it it did add one line here category display group there was a helpful thank you actually that was very helpful there is someone did point out to me that I have a validation error on this page and you can have web objects builder offer bits of information to you item may not be a constant when display string or value is bound I don't think that's true so I'm going to ignore that but it doesn't it doesn't expect me that I'm cheating a little bit I'm not cheating but I'm using an object that you're not supposed to be writing to - so don't you do that okay oh it's actually it's worked so far so I don't know what the it's one less thing I have to type and that that always helps me in a demo unless I type the better all right we're almost done here and now when we run this thing you can see that it actually fetched a bunch of categories for me already it's gone through the category list we go back over to omni web here now we've got this handy pop-up of all the different kinds of cars show me only the d item of the pickup trucks for 20 grand here they come all the pickup truck so now I changed my mind I wanted a minivan so it's actually forming some more complex queries here on the fly and yet I still haven't actually written any SQL or any HTML now it wouldn't be a developer conference if I didn't try to write a line or two of Java code in here so I'm going to I want to show you one last powerful thing here in the enterprise objects model and that's the idea of extending these objects this vehicle object so that it can implement additional business rules on your own right now the vehicle object is happy to fetch things for you and display them and you can send it messages asking for its properties you can say you could write an editing application none of this is read-only you could write another application where you change prices of cars and you're sending a message to an object saying set your price to this and it tells the database and we could go through that host complex slide again but I might like to trigger some business logic in the slot in these up objects as well I might want to have yo modeler create a little vehicle dot Java object for me add it to my project so here's a vehicle jab this is a basic data container it's got messages that set the price and get the price to set the name and get the name and set this and get that and they're all in terms of this take stored value for key method which means they're really consulting a dictionary in the superclass which is no generic record and that's maybe more information that anyone really wants to hear at this point but the interesting thing is that I can add my own additional methods here I recently bought a car how many people recently purchased a car did you enjoy that experience is the internet not the greatest gift to the car buying process you could possibly imagine I mean thank you that's the best but I could not get a straight answer from the guy as to whether leasing or buying was a good idea how many people lease their car some people have purchased their car good I'm with you I didn't i didn't get leasing I don't understand a way to hard it part it was partly because I couldn't ask the guy well what does it cost to lease well it depends how long are you going to keep the car what's your trade-in what's the future value of this car how much money do we think you make as a manager like you all these complex rules go into coming up with the number which is the lease price of the car and in this sort of enterprise objects world we can implement algorithms like that as extensions to these objects in that you might have here in Anil muddler so for instance I might want to add a little bit of Java code here cubic public pardon me public yeah let's have a drink you're just ruling I'm better now thank you don't don't translate that part don't translate that book I was a mistake I swear we can fix this in the editing right we can fix this in the editing I want to write a method here called monthly lease cost that returns an integer and I'm going to extend this vehicle object with something that computes the leasing price of the car well we're going to return the base price of the car as if it was an integer divided by 43 I you know I I bet it's more complicated than that but as far as I know it isn't so so because I've actually extended this do you have a classroom now I do have to stop and recompile class maker not Zoey not yes you let me just you got to do this - it's got relationships these other objects I forgot to create them will compile everybody now what pretty well up until that point so we're compiling all these things we've added custom business logic to my car application right now and if I in fact if I go back to web objects builder here in this cell we might add a nice helpful string lease me for only some amount of money per month well let's ask the vehicle for its monthly lease cost you see how that new method I wrote has just shown up in the object browser down here all these tools are aware of what the other ones are doing so we're going to add we're going to connect that lease class to this string here because my mother might be watching will be neat we'll put dollar signs and commas on it we've got nice formatter objects that can be applied to these strings and let's try running this again go back to Omni web how much money of you guy well show me all the trucks make it snappy become a bunch of vehicles least this one for 279 a month least the next one for 336 a month so my custom rule is being triggered every time it comes to one of these tags in the repetition and web objects is sorting out the context and figuring what object you were talking about and locating the method and loading it and sending it to this string and the string is sending everything back okay things that got pretty well here I got time to do something that probably won't work I'm getting the big hook here but this is my last I saw the sign okay you can put this skull-and-crossbones sign down now let me do one last thing you know what I hate yeah yeah everything everything about buying a car I hate this kind of application showing all the cars for $9,000 one vehicles oh man you know people build these complex applications then they can't be bothered they got the plural izing logic right or or they try to be helpful they put parentheses around the S which shows I was kind of thinking about this man I hate that well I wanted to solve this once and for all so I've got my own little framework of objects here which I'm going to add to local library frameworks I got a little web doodads toolkit here I want to add to this application and I'm going to go into web objects builder and these memories palettes there's a string that's saying three and here's the word vehicles or one vehicles I got this object here called a plural Iser spend a lot of time writing this two line component take that word and delete it I'm going to bring in my plural Iser here and I'm going to hook it up to a number it needs to know a number how many vehicles are we displaying well that's the same numbers we just saw count right you bind it to count it needs to know a word what word do you want to use here vehicle and it's even got some logic in there to put S on certain words and put is on other certain words and so on and let's see if it's there any hope that that's going to work I had a lot of trouble with its framework earlier today so we'll know in a second Oh didn't work we got we got this far we got this far we gotta we gotta we got a cheat we got a cheat we got to go here two web doodads we got it the code in the in the framework isn't working we're going to find the web doodads framework here oh my goodness we're going to find that class which is which is which is here it's a plural Iser class and oh my god it's web script and that's not supported the next release well fortunately this demo is on the current release let's put that in there and put the PluralEyes we can book this is all supposed see how easy this is this is supposed to work on that the dragging and dropping from the oh yeah it doesn't go into classes suitcase there's no web component suitcase thank you you try doing a demo for all these people you try moving all your stuff from one machine to another to last minute you'll see a number little things that just don't quit loose that's talking smart guy let's just see it please baby baby please ah zero vehicles oh it needs a space needs a space between them what a great object actually glad you came all the way here to WC to see some great like this there okay see this is zero vehicles $9,000 one vehicle thank you thank you $12,000 14 vehicles oh man ok I don't I don't know why that little drag-and-drop thing didn't work but generally there are a collection of really useful objects like this that you can share you can create your own your own company kit and share them around the organization like this I got to come back here and do two more slides and then I'm done so can I have this machine back up on both sides I took longer than I thought it always takes longer than you think there's other you is you can do as well that was an HTML UI that I was building there but you've seen you saw a Java client this morning in Steve's keynote I was going to try to demo but because I'm over time it because you've already seen it probably twice today we'll skip that but that's that's a scheme by which the client the server can exchange an XML write-up of what the UI should look like and it means you don't have to think about the interface at all in a lot of cases or you can design your own fancier UI using interface builder and laying out swing widgets to build a much more complex thing and you really ought to go to that directed you have a client to hear more all about that we also have a partner called rapport know that I'm not another thing I'm not going to show you which can generate high-quality PDF documents on the fly you build a PDF template and you do this kind of dragging and dropping stuff and it makes a very rich thing that might look exactly like the invoice you might be sending them in the mail only its PDF and they can print it printing HTML is hard you can't HTML is not really a language designed for printing but PDF is and this report no product is a swell way for delivering somebody a rich and professional-looking printable user interface go to report milcom they've got live web objects demos are there their product running right there XML with one one XML is becoming who cares about XML anybody have you read about it you heard the XML yeah so we've got UML we've got XML we've got WMS your VMO vrml I work on Zed mo we go back to Canada to zml but XML becoming popular is a way of exchanging data and with a couple of lines of code you can create what we call a wo XML coder object and you can ask it take this vehicle and turn it into an XML string for me we'll come back with an XML string or well encode a whole graph of objects as XML that you could then deliver to somebody in some special way there's objects that can parse XML coming in as well whap we've got a partner that does a wireless application framework a little pallet of objects that know how to emit wack bits and pieces or wml I guess that is Wireless markup language so you can design a little UI to run on your if this was a phone on your phone and of course you can mix and match all these different pieces as well you can have an application that's aware of what different people are doing it sends W app this guy and HTML with somebody else in PDF to somebody else and in addition we've got these super duper assistants we've got direct to web which I would like to say that I don't think director web is a toy at all I think it's worthy of some serious study in that it's a terrific way to knock out a web objects application based on an EO model very rapidly it builds a very elaborate rules driven engine that you don't have to think about if you don't want to but I bet you I could build a much better-looking application with direct to web within some certain user interface constraints I could build a great-looking application in about 10 minutes that would take me you know a week of equivalent messing around with with web objects builder so check that 102 at the session 405 director Java client which we've seen a couple of times today for built the same kind of idea a rules engine based way of having the UI constructed on the fly and offering you an assistant where you can modify the UI that's going to use let's not look at them let's all go to that other session and check those up deployment time we've got this tool monitor and it's little sidekick buddy wo TAC D that actually launches all of your applications in the complex environment keeps them running launches them again if they crash send email gather statistics and so on and as a UI like this where you can indicate this is an actual web objects application but here I'm showing I've got five copies of some application and two of them don't seem to be running but I could click on those knife switches to start them up and down and it gathers statistics and monitors deaths and so on and this is a nice tool for managing a complex deployment we got a bunch of sessions coming up on big application development and all these various issues how many people here are going to many most of the other web object sessions I'm just curious oh it's fantastic it's so great to see so many people here for all this stuff we love it and we hope your you love it too and we love you and I hope you know lots of ways to learn more there's the wo info center application after you install your free copy of web objects the first thing you ought to run is this wo info Center which gives you an application where you can search all the documentation for keywords you can run the live examples you can study things online you can go through a whole hierarchy of books that are included and read them online and look at all the examples the best place to get started and also the quickest way to verify that your web objects installation is working properly is to run w/o info center and see if this comes up shouldn't that be C en TR e not in that meeting either and finally a couple of the best way to get up to speed with web objects to take our week-long training class this actually this is the best way coming to WWDC but to take the intensive class and go through the process of building an elaborate application with a qualified instructor is fantastic the second class is really an in-depth discussion of the enterprise objects framework that whole database layer and we've recently added the third class on web objects deployment where you get to manage your own little Empire of you everybody gets an empty machine and the Solaris machine and the Mac OS 10 machine and you get to build these complex things with the database here and the web server there and you get to make them break and try to put them back together it's really valuable for people who are going to be doing deployment if you're planning a web objects app you oughta sense somewhat of that deployment class and I think that's about all I could talk I could refer you to all the remaining web object sessions as they are all pretty good follow-ups to this one but you've all got the schedule you can also see where they are these ones that are on Tuesday I think are excellent and highly recommend it so if there if there are any questions oh we're almost out of time oh I've got I have to take questions there's five more minutes I'd be happy to take a few questions and perhaps not answer them properly or knee hello Ari I'm here to help you not empathy Ernie
