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