Recent Posts
RSS FeedsSoftware Summit 2007
The time is almost upon us to get into the Keystone mode. The Software Summit starts in just a few weeks. I'm really stoked about the content this year and I hope I get to see you there.
One of my favorite things about the conference (besids the content) is the location. Keystone is absolutely beautiful and some years there is early season skiing. Its been really wet this year all summer. Wet summer does not necessarlly point to snow winter but it can't hurt. Its going to be fun!
Colordo Software Summit
Software Summit is a little less than 6 months away, if you don't already have approval to go, get it now. You will learn a lot from the content and the venue is fantastic!
Software Summit Wrap-up
Well its over, what a bummer. I had a great time this year from meeting lots of cool people (speakers and attendees) to stuffing my face with great food. Another cool thing this year is a friend of my from the east coast came and we got to hang out a bit. I highly recommend this conference to anyone involved in software development.
CSS - Dave Landers on Annotations
Cool talk. Dave is a great presenter and has a great demeanor with the crowd.
my notes;
What are annotations?
1) new java modifier – not really a modifier but a lot like them (public, private etc)
2) Gives us a way to extend the list of modifiers
3) Don?t affect semantics of the class they are on but can extend the way the code is used
Annotations defined –
@interface FixMe {String value(); }
- Defines a ?Fix Me? annotation
- Has One String attribute (value)
- Its kind of like a java class
Code annotated
@FixMe(?Missing the method body?)
public void theMethod() {}
to be used at build or run time
Any program element can be annotated, class, interface, package, annotation, methods, constructors etc.
Why do annotations?
Probably the j2ee space, things like web services and ejb are trying to simplify the annotations allow you to do the whole thing in one place (like using xdoclet). Web services etc.
You can write your own annotations.
XDoclet is cool but is not part of the code. Annotations are modifiers not docs, strongly typed, can persist in the class file, can persist at runtime.
Only three in J2SE 5.0 - @Deprecated, @SuppressWarnings not part of javac though,
@Override useful and is a signal to the compiler that its overriding a method, gives the compiler a warning that it should make sure the method is found in a super class, will cause a compiler warning if you are not over-ridding.
Kinds of annotations
Marker annotation – either their or not, kind of a Boolean marker that means something by being present (@Deprecated, @Override)
Single Value annotations - @SuppressWarnings({?unchecked?, ?deprecation?}) etc
Multi-valued annotations
@Review(reviewer=?Landers?, date=?4/1/2004?, comment=?Close stream in finally block?) a more complex annotation that has more information.
Defined with @interface and can have attributes, automatically extends from java.lang.annotation.Annotation (don?t put that into your class)
@interface Foo {
String reviewer() default ?[unknown]?;
String date() default ?0/0/00?;
String comment();
}
date and review have default values that get put into the annotation if they are not specified. If something is marked having a default its optional, other wise its required to have a value in the use.
@Foo(comment=?gak?) would be valid but leaving off comment would be invalid.
Also discussed some of the stuff around defaults and being able to use the ?value? named attribute.
Some examples on all the stuff you can annotate with the FixMe annotations.
Meta-annotations, four come with J2SE 5 - @Docmented, @Inherited, @Target, @Retention
@Documented says that the annotation shows up in java doc
@Inherited – missed this bit
You can specify where your annotation can show up with the @Target thing
@Retention tells the compiler where to put the annotation, SOURCE says only in the source code, CLASS says put it in the class but not at runtime, RUNTIME says the annotation is carried all the way through.
Accessing annotations – lots of places to use them, development etc. For example if you have an @Singleton annotation a checker could look for this annotation and warn you if your class does not look like a singleton.
EJB deployment could build the deployment descriptor at deployment time
BeanInfo generator from an annotated java bean
TestNG – an annotation to mark a test method
Annotation needs @Retention(RUNTIME) to do reflection, Class, Consgtructor, Field, Method, Package have new methods
boolean isAnnotationPresent(Class<? Extends Annotation> a)
<T extends Annotation> T getAnnotation(Class<T> a)
for example
FixMe fm = class.getAnnotatioin(FixMe.class);
System.err.println(?fix me: ? + fm.getValue());
Now doing a cool example using annotations – reporting the FixMe annotations. Also wrote a class loader that refused to load classes that need fixing (i.e. have FixMe annotations).
Here is the cool part – apt the Annotation Processing Tool
JDK tool for processing source annotatioins
Cleanear model fo source and types that doclet
Supports recursive processing of generated files
Multiple processors (vs. single doclet)
Docs @ http://java.sun.com/j2se/1.5.0/docs/guide/apt/index.html
APT can be recursive, the process can build code that is annotated, and then run its self on the generated code.
To use APT - write an AnnotationProcessFactory that creates AnnotationProcessors then run the apt tool.
Factory
Collection<String> supportAnnotationTypes() return annotations supported by this factory
Collection<String> supportedOptions();
AnnotationProcessor getProcessorFor(Set<AnnotationTypeDecloaration> atds, AnnotationProcessEnvironement env); - return the annotation process for the types and env describe by the args.
The processor has one method public void process();
Usually iterates through the classes and does some stuff using the Visitor patern
You specify which processing factories in the
META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory file (just like the XML stuff)
Going into more examples. I have to bail for my next talk thoug. Good stuff.
CSS - Phipps Keynote
Still trying to get all my notes into my blog.
Very interesting talk, basically that the world is changing and open source is part of the change (making it happen and a result of the change). The basic change is the fact that we are massively connected. The video was hillarious.
Great movie with 3 guys sharing an apt not talking to each other but over iChat, and cell phones.
Massively connected world – many companies still see open source as a way to save a few dollars. Talking about philosophy, some random crazy idea in a philosophers head (say post-modernism) eventually makes it into accedemia then makes it into govt & business then into the underlying motive of the actions of common people.
In 1994 – painful to travel, cash & travelers cheques, airline tickeds, telphone kiosks & bureaux, poste restante – painful, painful
In 2004 – not quite as painful, ATMs & global credit, paperless air travel, GSM mobiles & calling cards, email & internet. Around the world everything is infested with internet café?s. Prague, Southern New Zealand.
Assertion is that there is an assumption of being massively connected. Everything and everywhere people assume connections.
Massively Connected Effects
- Travelers Tales (earlier)
- Web logs
- Web services concept
- Open Source Development
- Globalisation of politics
- Online activism in USA
Massively Connected Era
- Rapid Evolution
- In just one decade the world have become massively connected
- Tech Promotes Connection
- Device proliferation, growing bandwidth, service oriented architecture -> man dimensions/layers of relationship
- Fractal Architectures
- We are moving to networks of networks
Waves Of Change – scrolling stuff along the bottom
If you are massively connected;
- There would be no boundaries to defend
- Becomes a matter of digital identity
- Software becomes network-resident services
- Web services – not specific WS* but the concept of web services, spontaneously forming groups of independent services
- Software could not be priced on implementation details
- Subscription
- System stakeholders would be enfranchised in development
- The old system, put smart people in a room tell them to build something cool and then charge people to come into the room. That way does not work anymore. Open-source is the way to go not, then all the smart people are available or are able to work on it.
Historical Break – History repeats its self, it has to, no one listens
Yochai Benkler – has this idea for general production
In the old way – pre-industrial revolution
- Individual artisans
- Craft guilds
- Community Standards
- Shared methods
The artisans would build apprentices. This was a major shift in the economy of Europe. Created a cycle where artisans could add to the wealth of the commons, the commons would spend money they had on arts.
This was the demise of guilds.
Open source is a return to the ?commons-based peer production?
- Community
- reputation-based
- shared materials
- Open Source communities – the new Guilds.
And the new industrial revolution?
Will exploit blind spots
Open source is about liberty not about economy.
People think of open source means free, the $ is not the important thing, the liberity is the important thing.
http://www.benkler.org/CoasesPenguin.html
Open Source Methodology
- Commons-Based Peer Production
- Commons Based
- Facility by Commons-creating licenses
- Peer community
- Neglected
- Facilities by community governance
- Production
- Focus on code not specification
Open Source Communities
- Open Source: Agile Development Done By a Community
- If there is no community, there?s no open source; it takes more than just applying an OSD license to build this community
Retaining Freedom?
- Licenses license copyright. Who owns it and why?
- Who are the committers and who decided?
Why Open Source
- Research suggests the #1 factory is?
- Choice and Freedom
- Software features, support provider, platform
- The freedom to choose again
- Worth $10M to City of Munich?
- Quality – supposed quality, definitely no worse
- Open source development at its best is like XP on steroids, flamed by 100?s of people for each line of code you write
- More statble & reliable code
Freedom In Common
- Objective of OSI (open standards initiative)
- Freedom through standards
- Objective of FSF
- Freedom through source access
- Objective of Java & JCP
- Freedom through compatibility
- Object of OSI (open standards initiative)
- Freedom through licensing
- Each solving a different part of the same problems: freedom is the goal
Software freedom is the goal
- Freedom to use
- Freedom to choose
- Freedom to develop
- Freedom to profit
- I want you to have it for free and for it to be easy to use and there to be no lock in and for us to get it all
Are Standards Enough for us to keep our freedom?
Is Free/Open Source Enough?
No guarantee of freedom alone
Open source is about freedom to develop software. The goal is freedom (liberty) not about $
OpenOffice.org Protects Both Freedom Groups
- Open Source protects developers
- Open formats protect deplorers
- Interoperability protects investments
Apache Geronimo protects both groups
- Open source community protects developers
- Compatibility (JSR?s) protects deployers
Assertion based on the fact that Sun is using the community (commons) to generate wealth, then Sun contributes back to the community enriching the whole community. In the vein of the ?means of production paper?. His assertion is that this is a great thing. It?s a cycle that increases everyone?s wealth.
Microsoft Settlement – has sun sold out?
- The answer is of course no, ridiculous.
- HP has multiple businesses devoted to success of windows,
- IBM has 3650+ employees devoted to windows success,
- red hat recommend windows for the desk top,
- Sun has just made peace and is now work to protect interoperability, no employees dedicated to Windows stuff.
Michael - evolution of EJB to 3.0
Cool talk on the EJB 3.0 stuff. Sounds like its going to be good.
Mike Keith – oracle guy on the expert group
EG is trying to solve the problem that lots of people are using EJB but not a lot are happy about it.
Life before EJB?
1) solving the problem over and over again, there was no way to capture business logic on the server
2) Community started to get behind the idea of component model for the server side
EJB started in April 1997 (yikes has it really been that long) first release in March of 1998. (I can?t believe it has been this long, I was at InLine at the time and we were playing with the spec before it was real).
Lots of hype of the original spec.
Original goals
- Allow components developed separately to be deployed together an interoperate in the server
- Define development and deploy contracts
- Lessen the knowledge required to develop components
- Provide access to the lower level stuff for advanced developers
- ?write once, run on any EJB container?
- Interoperable with CORBA
Time line – not getting all it but June 1999 is where the J2SE and J2EE names happened
Discussion of the roles – cool graphic
Discussion of the contract between the component and the container
Discussion of the client and the container
1) Each entity has an identity
2) Container makes the home available under jndi
EJB allowed declarative transactions, very cool stuff because it makes us not have to worry about it any more, even distributed (from EJB1.0)
Bad news – everything was remote even in the same VM the RMI machinery was invoked. Some containers over rode this and provided ?local? entities for the same VM.
EJB 1.1 is where the xml deployment descriptor was first released.
Bean references – bit of code and a discussion of the
reference stuff. Basically crufty.
Transactions – removed tx_bean_managed because of transaction isolation problems
Now on to EJB 2.0
1) Finally got EJB QL and finders – portability not possible before
2) Internal ejbSelects
3) Relationships – finally!
4) Local homes/interfaces
5) Entities now abstract (3.0 will go back, yikes)
Discussion of EJB QL
Home methods – like a static method on a bean, without regard for identity, typically uses an ejbSelect
EJB 2.1 – timers, coarse-grained business process/workflow events, not real-time
EJB 3.0
1) extensive use of annotations
2) remove xml deployment descriptor requirements
3) configuration by exception use defaults to avoid unnecessary declarations
4) eliminate requirement for home interfaces use and EntityManager
5) inversion of control techniques (dependency injection)
6) eliminate requirement for component interfaces
7) optionally allow entity to implement interfaces
8) entity is pojo-like concrete class – now you can make your objects persistent
9) callback (life cycle) methods no longer required
10) detached execution model, side-step the DTO pattern
11) support for entity inheritance and polymorphism – groovy!
12) many ejb ql enhancements
13) support for native sql queries – of course don?t use this if you want to be portable
14) dynamic query api
15) scrapped remote entity model
16) standard for object-relational mapping metadata
Entities are required to
1) define a no arg constructor
2) attributes should be protected or private (access internally but not externally)
@Entity says is an entity, @Id says that attribute is the identifier
EJB QL enhancements – bulk update, projection lists, added outer join, return different object types (even not persistent)
SELECT new OrderInfo(o.id, item.product.name, item.cost) FROM Order o JOIN o.lineItems item WHERE o.totalCost > :amount
Named parameters!
GROUP BY and HAVING added as well
Subselects – select employees that have spouses:
SELECT DISTINCT emp from Employee emp WHERE EXISTS(SELECT spouseEmp from EMP?)
O-R Metadata
- Direct and relationship mapping types
- multi-table mappings
- support for id generation tables
- schema definition/generation
- cascading operations across relationships
- egger/lazy loading
- optimistic locking fields
- inheritance
- dependent or aggregated
Defaults are reasonable, if you want to over ride simply do so
@Column(name=?SHIP_ADDR?) overrides the default
getShippingAddress, the default would be SHIPPINGADDRESS
Stelting - Testing
A good talk on the nature of testing an the options we have to test J2EE stuff. A great explanation of mock objects and using easymock. Good stuff.
Testing in the container vs testing outside the component.
Outside the container has the following downsides
1) requires test emulators
2) doesent provide container specfic service
3) know how it works mostly but not how it works in context
test code outside and components inside
1) relies on communication channel to container
2) cant use unit test j2ee components because they are not front facing
3) can be difficult to control test granularity because the ?front facing? components tend to be bigger
Test code, components inside the container
1) requires a trigger
2) test code depends on container services (some times we want this)
J2EE testing tech – vendors have lots of stuff
Open Source
a) jUnit
b) mock objects
c) cactus
JUnit is cool because its tightly integrated, not oriented towards testing J2EE components. JUnit is also the typical foundation of choice for more specialized testing frameworks (i.e. cactus, etc).
Doing example of testing a dao with a junit test showing the integration with NetBeans. Talked about setting up a connection via a factory so that you can return a connection outside a container.
Now talking about mock objects. Key concepts
1) create component,
2) create mock objects
3) call desired test behavior on component
4) set expectations/check output
Examples of doing mocks, good code bits.
Bruce Snyder - Geronimo Intro @ CSS
I was too busy listening to take really good notes in this talk. Over all very good though, a very high level overview of what is there and what has yet to mature. I really like Bruce's presentation style too, he did a great job of fielding questions (too many from me, thanks Bruce!). I highly recommend that you see his talks at Apache Con. Here are my somewhat sparse notes.
Snyder - why Geronimo - wire together the stuff to make a J2EE container instead of building from scratch (OpenEJB, Jetty, MX for J etc etc).
Installing Geronimo - use a maven goal and you can easily get it from the maven repo
Start Geronimo - use maven again (there are command line ways to do all this stuff)
Deploy to Geronimo - JSR 88 deployment tool again using maven, first distribute the doo-dad then start it up with deploy:distribue and deploy:start.
Stopping Geronimo - maven again
Geronimo Deployment Tool - JSR-88 deployment tool, deployment looks a bit like a POM file on the top, the gbean is where the real stuff happens. It uses inversion of control to define the deployment. The gbean has a bunch of attributes (get/set) and the deployment plan is where the attributes are set. You can specify references as well.
There is no command line thing to shutdown you app. To start java -jar bin/server.jar to deploy java -jar -deploy foo more but did not get it.
You can define everything to run your app in the code for you app (connection pools, jms queues etc) in the deployment plan which can then be version controlled with your app.
Logging is again controlled by a gbean and the innards of the gbean are just Log4j xml file stuff.
Spring Applications - no deployer yet that recognized spring.xml you can fire up an arbitrary collection of spring enabled services, register Spring enabled services, no GBean wrapper yet.
John Soyring - Keynote
Overall I enjoyed the talk. It was very similar to last year. A very long list of all the skills that IBM needs in global services that they don't have as well as lots of interesting examples of cool stuff that is going on. The Grid stuff looked coolest, something I really would like to get into.
Market Dynamics driving software & services
a) 75% of CEOs place a high priority on rapid response
b) only 10% believe they can
Market Dynamics also had a huge impact over the last 2 years
a) .com bomb into the toilet
b) starting to come back
c) 2004 market uptick
d) IBM has 8 or 9% growth
e) Russia, China, India, Brazil
Consolidation across industries
a) paper company bought OfficeMax
b) change is happening rapidly
c) these things allow the companies to change how they do business – requires IT changes
d) App silos in legacy systems
e) 5 trillion dollars invested in legacy code – PL1 & Cobal
Inflection point of our industry
a) we are at the point of standardization
b) electricity was standardized so we can use a gizmo bought at target anywhere that has electricity, prior to standardization you could not
c) train – before standards NY to St. Louis required several changes of train cars to get that distance, after standardization we got iron from Midwest could go to Pittsburg – the whole economy boomed because stuff could get from one place to another
Web services will be $11 billion worldwide in 2008 IDC
?Linux will overtake windows as the number one operating system based on new server shipments? – Stacey Quandt, analyst – I don?t buy this at all
ATM – is going to Linux
Point of Sale systems are going to Linux, its taking over the world J
IBM – Workplace 2.0
Standards are important – ?standards contribute more to economic growth than patents and licenses?
Open Source is driving open standards
Workplace 2.0 is built on Eclipse – have to dig into this!
Open source is a huge contributor to innovation
Builds great communities
A great way to build open industry standards
Enterprise customers are asking
Linux is growing almost as fast as Windows or even faster
Eclipse – 39million downloads – 12% linux, 86% windows
CapGemini – using Eclipse to speed up software delivery
Tools - ETTK on alpha works some cool looking stuff
Grid computing stuff – starting to mature its at the point now where mission critical apps can be deployed (www.gridforum.org)
Grid computing – used by Charles Swab does your net worth calculations now in seconds, took 3 minutes before
Pugh and Associates – cost of computations was 10% of what it used to be.
US Tennis Association uses grid computing to ?rent? out computing to allow protein folding calculations. When it is raining no one is using the servers because there is no tennis going on. With the switch to grid computing they went to 85% utilization of the servers 24X7X365
Autonomic Computing – electricity black out in 2003 – cool graphic showing the various piece parts of autonomic computing,
a) self configuring
b) self healing
c) self optimizing
d) self protecting
Also put standards around this – put event logs together to find root causes quickly so we don?t end up with what happened to the power grid
Privacy is a huge thing – P3P
J2EE 1.4 is big and getting bigger – IBM is moving everyone to Portlets – JSF is supposed to make building web apps easier esp portlets Also Service Data Objects are big.
Pervasive and wireless computing – autos, phones etc. OSGi
RFID – walmart etc
Web services – not nearly enough people to make all the work happen, a big part of what drives outsourcing is because we just can?t find the people to do the work.
Business are at the point where they are functionally optimized for tasks but not across an entire business process. As an example is IBM looking at their supply chain and linking the existing systems together were able to drive down the cost by 5 billion dollars, enabling them to reduce the cost of their servers but sell more servers.
MDA is big and getting bigger
Skills – we have a surplus of the wrong skills and a shortage of the skills we need
IBM spends 250K per new employee for training the first year. Northface University will deliver graduates that are employable right out of school.
Skills that are in great demand, if you know this stuff you are more than employable.
1) System or Solution Architects
2) Business Process Integration
3) Portal Design and Legacy Integration
4) Performance analysis & Tuning
5) Security and Privacy
6) Orchestration 7 Provisioning
7) Linux Servers
8) Virtualization (grids, SANs, etc.)
9) zSeries
Software Summit Kick-off
The Summit is starting today. Very cool stuff!
Software Summit Wrap-up
Well the Colorado Software Summit is over, how dissapointing.
I've posted a summary of everything I did on my java.net blog.
Enjoy.
Globus Kit - Grid Computing on the Cheap
Cool talk on the Globus OS tools for doing grid computing. Very cool stuff.
my notes
Advanced talk on Globus tool kit 3.
(http://www.softwaresummit.com/2003/speakers/brown.htm)
GT3 Notification
1) notification source fires events
2) notifiction sink receives
3) associate with some dummy service data
4) add “ogsi:NotificationSorurce/Sink” to GWSDL
5) sink calls addListerns on sources Service DataSource calls notifyChange to fire notifcation
6) sink implements deliverNotification to catch
There is no tool support for the java files to declare what the GWSDL tools should do to get source and sink. However with JSR 175 you could imagine a way that this declaration could end up in java file.
The idea behind this is to do coarse grained notification.
The Service Data:
1) structured data associated with a grid service – zero or more Service Data Elements (SDE) per instance
2) SDEs are described by an XML grammar – java bean is generated for each SDE type (defined in an XML schema? He said .xsd file)
3) Client calls findServiceData(“SDE1”) – careful of misspelling
4) Helper methods extract populated Bean instance
5) Use conjunction with notification – add payload to event.
When the interesting ‘data thing’ gets pushed along with the event. The client gets the data with the event. The other side is a pull notification where the client gets dummy data and then has to call back to the poster to get the data.
The SDE’s are associated with the service its self and the instances of the services
SDEs in every grid service
1) GridServiceHandle
2) FactoryLocator
3) TerminationTime
4) ServiceDataNames
5) Interfaces – names of all interfaces that a service implements
Quick of write a grid service
1) define all aspects of the service interface –java or gwsdl
2) generate grid support code
3) four mor steps
Grid project – example
1) Distributed SBG Rendering
2) RenderSourceService
a. Farms out the svg file and a rendering area to each worker
3) RenderWorkerService
a. Builds a jpeg from the specified area of the svg file
4) GUI Java Application
a. Creates RenderSourceService via factory
b. Triggers worker service to get work from source service
c. Watches for status notification and finished jpegs
d. Displays all status and tiles the sub-mages as completed
If I want to make my machine available I have to download Globus which takes 30 minutes or more. And there is a bug that he could not make work so he made it all local on his machine (wouldn’t it be cool if we could do that during the demo?)
GT3 Features
1) factories
2) notification
3) service data
4) standalone clinet
5) could it do more, sure! This is all we need for the demo.
Next was code. Cool Stuff.
Eclipse integration is coming but not there yet.
Services are defined by interfaces, duh…
Used batik from apache to do the actual rendering. Batik gets the URL and can render from that.
The RenderWorker takes a renderSourceHandle which referres to the RenderSource via the handle (i.e. this is the uri to the RenderSource service) to get at its work.
Must have a ‘schema’ directory conisident with the code directory (foo.bar.objects, foo.bar.schema).
The xsd describes the methods and their arguments and their return types.
anyType represents ‘Object’ if you will. It’s the generic type. Used to represent the returned image from the worker service.
Basic steps, get a factory, use the factory to create the manager service, use the location stuff to find the created service, set the initial parameters.
Start some worker thereads (passing the handle to the manager) that will go back to the manager service and ask about the work to do.
The locator is used to find several workers and then tells them to start. They will in turn go back to the manager and ask for some work.
When notification happens we get the any data stuff (defined in schema) then we have to do some Corba like narrowing. To get the any type downcasted to the type we want.
GUI – creates a render factory instance and 16 renderers (which could be running on our machines). Distributed rendering of an image across 16 threads (which could have been on our machines). Very cool demo, can’t wait to play with the code from the CD.
J2EE Metadata Talk
Just finished Simon's talk on JSR 175.
here are my notes
Simon Nash – member of JSR 175 team
(http://www.softwaresummit.com/2003/speakers/nash.htm)
Back ground and motivation
JSR 175 specification
1) Source syntax
2) Processing model
3) Runtime api
4) Class file format
5) Standard annotations
Background – java is imperative not declarative, java has declarations but only for core language constructs. The declaration of ‘the what’ limits the scope for tools to help the developer be more productive.
The annotations are beyond the bounds of the language, instead it fits into the language. Its not about making Java huge to handle every thing, its about making a way for you to extend stuff so that you can declare what in your java classes (i.e. this class is a web-service). The annotation are not part of the program logic but can affect the meaning of the program (i.e. the declaration that the class is a web service might causes WSDL to be generated at deployment time). An annotation will not change the way assignment works or the way that try/catch works.
Semantics of the annotations can be standard or user defined. (I’m assuming that at some point we will see how to use user defined annotations. Just said we’d be getting to that…)
Benefits – productivity, clarity, flexibility, correctness – all the same stuff you get from something like MDA or other model based code generation. I like this but its just not new. Now that its becoming part of the language though it seems that we might be at the cusp of general acceptance of meta-data based programming (i.e. MDA). If you build bad stuff with this it will be bad. Clearly you can build bad stuff with anything, this is no difference.
Q: will AOP make use of this, A: probably, seems a natural fit (the join points should be able to be specified with these annotations).
175 – simple meta-data in source code, attached to program syntactic elements, limited range of type, stored in the class file (available at runtime), can be read at runtime.
Cool example of declaring a web service for a class. Interesting thing to note is that the types of the attributes for annotations is only a limited set (most noteably not Object or any arbitrary subclass, only the types defined in the JSR to be able to be used).
Attributes can be defaulted.
An example of @WebService annotation for a class then adding an @Operation on one of the operations. The @Operation is not explicitly contained in the @WebService.
There are 4 meta-annotations @Target – what can the annotation end up on, @Retention – how far to carry the annotation forward, @Inherited – declares if the annotation should be inherited, @Documented – should this stuff show up in the java doc.
@Retention – runtime, class or source – class is default, runtime makes them available for reflection
Since source is the default retention it seems that the expectation is that post processing on class files will be the norm.
Annotations can be used anywhere that ‘public’ can be used. They are seen as modifiers.
You will be able to annotate your package with a package-info.java file.
Processing Model:
1) Source based
2) Class based
You can integrate your annotation processors with the java compiler? There was a slide about that but it appears that its not ready yet. The way they are thinking is making a plug-in architecture for the compiler. Today what you have to do is post process the class file or process the java code (i.e. you have to parse the java…)
JSR 175 extends the reflection API’s to get at annotations. There is a new thing called AnnotatedElement.
More annotations are changed or defined in JSR’s (181, 207, 224 others as well).
Portal Talk
Just finished Paul's talk on Portals. Very interesting. I can't wait to get back to normal life so that I can spend some time playing with all the cool stuff that I've learned here...
my notes
Paul Giangarra – Portals
Third or forth generation portals are about collaboration? Missed the detail on that comment.
What is a portal?
1) a place to start for your users
2) a place to aggregate the stuff that people want to do
Value of Portals
1) simplify access to resources
2) eliminate information overload
3) personalize for the one-to-one marketing appeal
4) collaboration meets applications
5) the enterprise now ‘owns’ the desktop
The Portal helps to aggregate the information that we want to see, personalized etc. Allows us to avoid info-overload.
Why Portals – employee productive, increase efficiency through automation, quicker response to customer
Gen0/Gen1 (-1998 to 2000) portals simple hyperlinks and search, homepages on sterids
Gen2 (2000 to 2001) robust app framework, collaboration, Mobile and wirelss, management framework, being deployed today
Gen3 (2002+) context personalization, cascading portals, web services, process integration, abstraction layers, federated search, federated portals, p2p offline support, proactive notification, mainframe support, knowledge management
Why are biz portals so important?
1) eventually all web apps will be portal apps
2) portals will be the most visible software infrastructure in a company’s e-business strategy
3) the need for integration drives the growth and importance of portals
4) application vendors are using portals as UI and Integration
5) Portal frameworks…
Portal Planning Process – or how to get a portal into your company
1) obtain sponsorship
2) analyze drivers and expected benefits
3) inventory the features desired
4) conduct an infrastructure impact assessment
5) select products
6) sell internally
Basically laid out how to decide if you want to build a portal, decide what you want/need, a portal for portal sake is stupid.
Don’t confuse a Portal with a web site. The are not the same, the portal is window into web applications/web sites.
Portal Infrastructure
1) knowledge arch
2) community arch
3) security arch
4) tech arch
5) dev and dep
6) operational arch
Important for B2C portals to truly aggregate the info instead of sending you off (i.e. looking at CD players and linked off to Sony, you just lots a customer, Sony.com has a link to ‘find someone to sell this to you’).
Knowledge management is important in building a portal. Unstructured info is just info, if you can organize it its knowledge. We need knowledge.
(Paul spawned a thought: Interesting thing to think about: A development portal for open source communities. Why don’t we have something like a portal for developers. Aggregate information into knowledge, connect people in great ways that makes the community more effective.)
Lots of detail about objectives that you’d want to build a portal for. This was a lot like a marketing pitch of why portals are important, i.e. why do a portal.
Technical arch of the portal
1) Portlet container services
a. Content access
b. Web clipper
c. Search
d. Document manager
e. Po9rtlet data
f. Admin
g. Collaboration
h. Credential vault
i. Portlet proxy
j. Single sign-on
2) J2EE
3) Page aggregation
a. Themes and skins
b. Transcoding
c. JSP tag library
d. translation
Base portal design – think about it, users, admin, roles etc.
Think through your page layout as well. Title bars, menu’s, hierarchies of portlets etc.
JetSpeed is a great spot to play with portlets.
Themes do most of the hard work for cross-browser support and accessibility.
Delta from JSP/Servlet to Portlets,
1) portlets are very dynamic
2) portlets can know personalization info, locale, devices etc.
Building a poral –tasks
1) creating page definitions
2) create themes ad skins
3) developing portlets
Cool thing is that all this can happen independently.
JSR 168 gives us – interoperability between local portlets and portals, i.e. we can put a portlet written WLS can be deployed into WebSphere
WSRP – goals
1) enable the sharing of portles (markup fragments) over the internet with a common interface
2) enable cross vendor publishing and consuming of content
WSRP allows us to build a portlet and let it be vended into another portal?
A proxy portlet receives info from a web-services interface and then render that portlet in the local Portal.
On the portal server the generic proxy (only one, we don’t need to implement it) and it goes off via SOAP and asks for some rendering to be done. The proxy then takes the rendering from the back end and displays it. Very interesting.

