2. Topics
• Available Versions of WOLips
• What’s New in WOLips
• Linking to WebObjects Javadoc
• Decompiling
• ERProfiling
• SnapshotExplorer
3. Available Versions
• WOLips 3.4
• Update Site: http://webobjects.mdimension.com/hudson/job/
WOLips34Stable/lastSuccessfulBuild/artifact/site/
• Eclipse 3.4.2 Carbon Only
• Previously known as “WOLips Stable”
• Maclipse Compatible
http://webobjects.mdimension.com/wolips/support/preview/
• It has known Bugs
• NO fixes/updates!
4. Available Versions
• WOLips 3.5
• Update Site: http://webobjects.mdimension.com/hudson/job/
WOLips35Stable/lastSuccessfulBuild/artifact/site/
• Eclipse 3.5 Cocoa or Carbon
• Maclipse Compatible (Cocoa only)
http://webobjects.mdimension.com/maclipse/
• Eclipse Cocoa is slow
5. Available Versions
• WOLips 3.6
• Update Site: http://webobjects.mdimension.com/hudson/job/
WOLips36Current/lastSuccessfulBuild/artifact/site/
• Eclipse 3.6 (surprise!) Carbon/Cocoa
• Where all the new features are added and bugs fixed
• Fast(er) Cocoa
• What all the cool devs use (experimental)
• No Maclipse (yet?) :-(
6. What’s new in WOLips 3.6?
Plugins
• Removed Maven 1 and Apple Maven Support
• Reorganized Plugin Install Options
• Updated JRebel plugin to work with JRebel 3
8. What’s new in WOLips 3.6?
Plugins
• Removed Maven 1 and Apple Maven Support
• Reorganized Plugin Install Options
• Updated JRebel plugin to work with JRebel 3
9. What’s new in WOLips 3.6?
Preferences
• New UI for wolips.properties that allows you to edit the values
directly in the WOLips preference pane
• WOLips validation preference pane now uses popups for
severity levels
11. What’s new in WOLips 3.6?
Preferences
• New UI for wolips.properties that allows you to edit the values
directly in the WOLips preference pane
• WOLips validation preference pane now uses popups for
severity levels
13. What’s new in WOLips 3.6?
Building
• Bundle-less Builds - no more build directory that WOLips has to
keep in sync with project. Requires ERJars (r11001 or later)
• New Wonder EOGenerator templates
15. What’s new in WOLips 3.6?
Building
• Bundle-less Builds - no more build directory that WOLips has to
keep in sync with project. Requires ERJars (r11001 or later)
• New Wonder EOGenerator templates
16. What’s new in WOLips 3.6?
Modeling
• Entity Modeler now opens in a new window by default
• Cmd-Shift-V allows you to type an entity name and Entity
Modeler will open the right EOModel and select the requested
entity (entity name, not class name)
• Double-Clicking an EOModel in the finder can open it in
WOLips
18. What’s new in WOLips 3.6?
Modeling
• Entity Modeler now opens in a new window by default
• Cmd-Shift-V allows you to type an entity name and Entity
Modeler will open the right EOModel and select the requested
entity (entity name, not class name)
• Double-Clicking an EOModel in the finder can open it in
WOLips
19. What’s new in WOLips 3.6?
Summary
WOLips 3.6 is an evolution, not a revolution
• Many things are refined, work smother, made easier
20. Linking to WebObjects Javadoc
• Use Xcode 3.2 to install the Mac OS X Legacy Library docset
(847 MB) in the Preferences > Documentation tab
• In WOLips preference pane, set WebObjects Javadoc to:
/Library/Developer/Shared/Documentation/DocSets/
com.apple.adc.documentation.AppleLegacy.CoreReference.docset/Contents/Resources/
Documents/documentation/InternetWeb/Reference/WO542Reference/
(this directory is in a package, so you can’t just browse to it.)
• Restart Eclipse
22. Linking to WebObjects Javadoc
• Use Xcode 3.2 to install the Mac OS X Legacy Library docset
(847 MB) in the Preferences > Documentation tab
• In WOLips preference pane, set WebObjects Javadoc to:
/Library/Developer/Shared/Documentation/DocSets/
com.apple.adc.documentation.AppleLegacy.CoreReference.docset/Contents/Resources/
Documents/documentation/InternetWeb/Reference/WO542Reference/
(this directory is in a package, so you can’t just browse to it.)
• Restart Eclipse
24. Linking to WebObjects Javadoc
• Use Xcode 3.2 to install the Mac OS X Legacy Library docset
(847 MB) in the Preferences > Documentation tab
• In WOLips preference pane, set WebObjects Javadoc to:
/Library/Developer/Shared/Documentation/DocSets/
com.apple.adc.documentation.AppleLegacy.CoreReference.docset/Contents/Resources/
Documents/documentation/InternetWeb/Reference/WO542Reference/
(this directory is in a package, so you can’t just browse to it.)
• Restart Eclipse
26. Decompiling on-the-fly in Eclipse
• Sometimes Javadoc just isn’t enough.You want to know what’s
really going on behind the curtain...
• Java Decompiler (JD): http://java.decompiler.free.fr/
• JD-Eclipse is a plug-in for Eclipse. It allows you to display the
source code of “.class” files during development and debugging.
• Follow JD-Eclipse install instructions for Eclipse 3.2, 3.3 & 3.5
here: http://java.decompiler.free.fr/?q=jdeclipse
• Intel Only
28. Decompiling on-the-fly in Eclipse
• Sometimes Javadoc just isn’t enough.You want to know what’s
really going on behind the curtain...
• Java Decompiler (JD): http://java.decompiler.free.fr/
• JD-Eclipse is a plug-in for Eclipse. It allows you to display the
source code of “.class” files during development and debugging.
• Follow JD-Eclipse install instructions for Eclipse 3.2, 3.3 & 3.5
here: http://java.decompiler.free.fr/?q=jdeclipse
• Intel Only
30. In-Browser Tools
Extending development beyond Eclipse/WOLips UI
• DirectToWeb Panel - helps debug D2W apps by providing controls
for rules, logging, localization, CSS, etc.
• ERProfiling - helps you understand how your app is functioning, what
parts of a page are slow and why.
• SnapshotExplorer - allows you to browse the snapshots in your
application’s EODatabases
• ClickToOpen - helps you figure out what components render what
parts of a page and how they interact with each other
31. ERProfiling
What is it?
• Designed around WebObjects
• Page-based approach to profiling your app.
• Allows you to look at the statistics for individual pages and
actions
• Helps you understand why pages and actions perform the way
they do.
32. ERProfiling
Adding it to your project
• Add ERProfiling.framework to your app
• Add the javaagent setting to the VM args section of your launch
config:
• Wonder source: -javaagent:${workspace_loc:ERProfiling}/
Libraries/gluonj-1.5beta.jar=er.profiling.PFProfilerMixin
• Wonder binaries: -javaagent:/path/to/ERProfiling.framework/
Resources/Java/gluonj-1.5beta.jar=er.profiling.PFProfilerMixin
• Run/Debug your app
34. ERProfiling
• Add ERProfiling.framework to your app
• Add the javaagent setting to the VM args section of your launch
config:
• Wonder source: -javaagent:${workspace_loc:ERProfiling}/
Libraries/gluonj-1.5beta.jar=er.profiling.PFProfilerMixin
• Wonder binaries: -javaagent:/path/to/ERProfiling.framework/
Resources/Java/gluonj-1.5beta.jar=er.profiling.PFProfilerMixin
• Run/Debug your app
35. SnapshotExplorer
What is it?
• NOT the “FreshnessExplorer” demoed by Mark last year - no
matter how many times I’ve misspoken in the last 10 minutes
• Allows you to look over EOF’s shoulder and see what it sees
compared to what the UI or Database show
• Runs only in Development
36. SnapshotExplorer
Adding it to your project
• Add the following Wonder frameworks to your Build Path:
➡ SnapshotExplorer
➡ Ajax
➡ ERRest
➡ WOOgnl
• Add the following line to your Application() constructor:
SESnapshotExplorer.register();
or (if your project already uses ERRest):
SESnapshotExplorer.register(routeRequestHandler);
37. Adding SnapshotExplorer to your Application
package er.modern.movies.demo;
import er.extensions.appserver.ERXApplication;
import er.extensions.appserver.navigation.ERXNavigationManager;
import er.snapshotexplorer.SESnapshotExplorer;
public class Application extends ERXApplication {
public static void main(String[] argv) {
ERXApplication.main(argv, Application.class);
}
public Application() {
ERXApplication.log.info("Welcome to " + name() + " !");
setDefaultRequestHandler(requestHandlerForKey(directActionRequestHandlerKey()));
SESnapshotExplorer.register();
}
@Override
public void finishInitialization() {
super.finishInitialization();
// Setup main navigation
ERXNavigationManager.manager().configureNavigation();
}
}