SlideShare ist ein Scribd-Unternehmen logo
1 von 44
Downloaden Sie, um offline zu lesen
MONTREAL 1/3 JULY 2011




Beyond Fluffy Bunny
Paul D.Yu
FDL Solutions, Inc.
Objectives

•   Macro-level view of the layout of my application frameworks and
    application, beyond Fluffy Bunny

•   Hope to be helpful to the next New WebObjects project team

•   To encourage discussions of “simplifying” the building of
    WebObjects/WOnder applications

•   Improve adoption of WebObjects/WOnder
Agenda

•   Introduction

•   What is Fluffy Bunny? And Why it’s important

•   How do I structure my applications?

•   A few details

•   Q&A
Introduction
•   Been around WebObjects since the 1.0

•   At NeXT when Apple acquired NeXTSTEP/Cocoa/OS X

•   Was in the room when price dropped from $50K to $699

•   Programmed in JSP

•   Managed numerous .Net and other Java development efforts

•   But I keep coming back to WebObjects
MONTREAL 1/3 JULY 2011




What is Fluffy Bunny?
Why it is important...
Crossing the Chasm
Product Adoption Life Cycle




                  Geoffrey Moore
WebObjects in the Old Days
WebObjects Adoption
•   Technically

    •   Too complex

    •   Too many choices

    •   Too many ways of doing things

•   Business-wise?

    •   No marketing, no major corporate backing
Too Many Choices

•   WebObjects App

•   Wonder/WebObjects App

•   WebObjects D2W App

•   Wonder D2W App

•   Etc. Etc...
Where is WebObjects on the
          Curve?




                 Geoffrey Moore
Why Ask the Macro Question?


•   Does the iOS/Mobile and Software as a Service business models
    change the calculus for us?
Why WOnder?

"It's time to stop pretending that WebObjects is a solution by itself
anymore.
WebObjects is really just WonderFoundation at this point.
No new developer should ever be starting a plain-jane WO
project. Ever!! Not even a Hello World app." Dave Avendasora
Along came Fluffy Bunny

                •   Introduced with WOLips
                    3.3

                •   “All projects now use the
                    Wonder-style project
                    layout (aka Fluffy Bunny
                    Layout)” Mike Schrag
WebObjects and Eclipse
Fluffy Bunny Structure

•   Standardized the structured of all
    WOnder based projects

•   Lots of conversation and discussions
    about this change in the way that
    WOnder-based WebObjects
    application would be structured

•   Fighting by the OLD guards
Why Fluffy Bunny?

•   Mike’s way or the highway!

•   Moving the product forward so there are less choices for the
    early majority

•   But without knowing it, the current users may not be willing to
    help crossing the chasm
Where does a new person start?

•   WOCommunity.org

•   wiki.objectstyle.org/confluence

•   webobjects-dev@apple.com

•   wonder-disc@lists.sourceforge.net

•   Wonder Examples???
What’s wrong with WOnder
            Examples?

•   Too simplistic?

•   Too complex?

•   Too not tied to EOF?

•   Too sparse...
MONTREAL 1/3 JULY 2011




Beyond Fluffy Bunny
How I structured my apps
Design Patterns Overtime
      Thanks Travis and Kieran
Application Setup
•   MyAppCore.framework

•   MyAppModels.framework

•   MyExtensions.framework

•   MyAppJasperReports.framework

•   MyApp_1.woa

•   MyAppWebServices.woa

•   MyApp_2.woa
Application Core Framework

•   Your own Exception Handling

•   Your own Backtrack Handling

•   May be your own component extensions

•   Your private patches to WOnder
MyAppModel Framework
•   Includes your EOModelds

•   EOGenerator

    •   Templates: Entity, _Entity.java

    •   Sources com.mycompany.eo, GeneratedEOs

•   jdbc jar(s) in Libraries

•   Turn on Migration!!! Even after the fact...
MyExtensions Framework

•   String utilities

•   Date utilities

•   Mail utilities

•   Keiran’s Controllers and Concurrent handlers

•   Others
MyAppJasperReports

•   Keiran’s JasperReports Framework

•   Loose collection of the other stuff needed to support last year’s
    demonstrations

•   Your jasperReports.jasper and .jrxml files

•   Would be nice not to have JasperReports.jar inside of the
    JasperReport Framework, so you can pick your own version?
MyApp_1, _2


•   Based on the underlying frameworks, then it is easy to
    implement different application perspectives into the business
    model

•   Productivity much higher than normal
MyAppWebServices

•   ERRest really really cool thing

•   Uses the same MyAppModelFramework

•   RestActions to deliver

    •   Binary plist, json, xml, etc.
Client App Experiments


•   iPod Read-only app to ERRest API

•   Cappuccino update app to ERRest API

•   Ipad app (in progress) to ERRest API
MONTREAL 1/3 JULY 2011




A Few Details
Some Specific Things
•   Classpath List at runtime

•   Nagios Support

•   Log4j notifications

•   Component Naming Convention

•   Properties.<myName>

•   Inline bindings
Kieran’s Classpath List
@Override
public void didFinishLaunching() {
	 super.didFinishLaunching();
	
     // Output classpath
     if (log.isInfoEnabled()) {
         // Classpath debugging
         // When launched by wotaskd in deployment, the classpath property is
         // com.webobjects.classpath
         String classpath = ERXProperties.stringForKey("com.webobjects.classpath");

        // When launched manually or from within IDE, the classpath is the
        // regular java.class.path
        if (classpath == null) {
            classpath = ERXProperties.stringForKey("java.class.path");
        } // ~ if (classpath == null)

        // Clean it up to a dir prints on each line of console or log file
        if (classpath != null) {
            classpath = classpath.replace(':', 'n');
        } // ~ if (classpath != null)

        log.info("classpath = n" + classpath);
    } // ~ if (logger.isInfoEnabled())
}
Nagios Support

•   DirectAction methods

    •   Ping

    •   PingEO

•   Contract with Pascal Roberts
Nagios DirectActions
    DirectAction.java
	
	   /**
	     * For Nagios test
	     * @return 1
	     */
	   public WOActionResults pingAction() {
	   	    WOResponse response = new WOResponse();
	   	    response.appendContentString("1");
	   	    return response;
	   }
	
	   /**
	     * For Nagios EO deadlock test
	     * @return "VoiceType.displayCode of Object with primaryKey = 1"
	     */
	   public WOActionResults pingEOAction() {
	   	    VoiceType voiceType = VoiceType.fetchVoiceType(ERXEC.newEditingContext(), VoiceType.DISPLAY_SEQUENCE.eq(new Integer(1)));
	   	
	   	    WOResponse response = new WOResponse();
	   	    response.appendContentString(voiceType.displayCode()); //
	   	    return response;
	   	
	   }
Log4J Email


•   Add log to Components, not just inside of EOs

•   Set Properties to send log4j emails to admin account

•   GmailSMTPAppender
Component Log4J setup
private static Logger log = Logger.getLogger(ComponentName.class);

public WOActionResults saveChanges() {
    try {
      log.info(" schoolSelection = " + schoolSelection.name());
      log.info("_person.currentSchool( " + _person.currentSchool().name());
      editingContext().saveChanges();
      	
      AjaxModalDialog.close(context());
    }
    catch (EOGeneralAdaptorException saveException) {
      log.error("Exception while saving in " + name() + ": " + saveException.getMessage());

        if (isOptimisticLockingFailure(saveException)) {
            handleOptimisticLockingFailureByRefaulting(saveException);
        }
        else {
            editingContext().revert();
        }
    }
}
Log4J Email Notification
Properties

log4j.rootCategory=INFO, A1, EMAIL

log4j.appender.EMAIL=fdl.utilities.log4j.appender.GmailSMTPAppender
log4j.appender.EMAIL.SMTPHost=smtp.gmail.com
log4j.appender.EMAIL.SMTPDebug=true
log4j.appender.EMAIL.From=admin@<yourDomain>.com
log4j.appender.EMAIL.To=support@<yourDomain>.com
log4j.appender.EMAIL.SMTPUsername=admin@<yourDomain>.com
log4j.appender.EMAIL.SMTPPassword=<yourPassword>
log4j.appender.EMAIL.Subject=Email Notification from Gmail SMTP Appender
log4j.appender.EMAIL.cc=admin@<yourDomain>.com
log4j.appender.EMAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.EMAIL.layout.ConversionPattern=%p %t %c - %m%n
log4j.appender.EMAIL.BufferSize=512
Base Components

•   BaseComponent

•   ListComponent

•   Query

•   Detail

•   BatchDisplayGroup
Component Naming Convention


•   NounVerb or <Entity><Task>

•   VerbNoun or <Task><Entity>

•   Pick one and try to stick with it
YUIText Component


•   Plugin replacement for WOText using the YUI 2.9+ editor

•   Does not work with iOS Safari
Properties

•   Application.woa

    •   Properties (checked in with the Project)

    •   Properties.<developerName> (ignored and NOT checked in)

    •   /etc/WebObjects/<JavaMonitorInstanceName>/Properties

•   Don’t store the production password in the EOModeld!!!
Lessons Learned
•   Hire experts from the group to help you

•   Their expertise can save you many many hours of labor

•   WebObjects & WOnder is great for a small startup if you know
    the technology already

•   We, as a community, need to create more opportunities to make
    money with WO

•   The future business model is not based on labor hours
Objectives

•   Macro-level view of the layout of my application frameworks and
    application

•   Hope to be helpful to the next New WebObjects project team

•   To encourage discussions of “simplifying” the building of
    WebObjects/WOnder applications

•   Improve adoption of WebObjects/WOnder
MONTREAL 1/3 JULY 2011




Credits
Travis Britt, Kieran Kelleher, Mike Schrag, and all the other WO “gods”
MONTREAL 1/3 JULY 2011




Q&A

Weitere ähnliche Inhalte

Was ist angesagt?

CDI Best Practices with Real-Life Examples - TUT3287
CDI Best Practices with Real-Life Examples - TUT3287CDI Best Practices with Real-Life Examples - TUT3287
CDI Best Practices with Real-Life Examples - TUT3287Ahmad Gohar
 
OpenNTF Domino API (ODA): Super-Charging Domino Development
OpenNTF Domino API (ODA): Super-Charging Domino DevelopmentOpenNTF Domino API (ODA): Super-Charging Domino Development
OpenNTF Domino API (ODA): Super-Charging Domino DevelopmentPaul Withers
 
The Modern Java Web Developer - Denver JUG 2013
The Modern Java Web Developer - Denver JUG 2013The Modern Java Web Developer - Denver JUG 2013
The Modern Java Web Developer - Denver JUG 2013Matt Raible
 
iPhone Coding For Web Developers
iPhone Coding For Web DevelopersiPhone Coding For Web Developers
iPhone Coding For Web DevelopersMatt Biddulph
 
Open Social In The Enterprise
Open Social In The EnterpriseOpen Social In The Enterprise
Open Social In The EnterpriseTim Moore
 
AtlasCamp 2012 - Testing JIRA plugins smarter with TestKit
AtlasCamp 2012 - Testing JIRA plugins smarter with TestKitAtlasCamp 2012 - Testing JIRA plugins smarter with TestKit
AtlasCamp 2012 - Testing JIRA plugins smarter with TestKitWojciech Seliga
 
Java EE revisits design patterns
Java EE revisits design patterns Java EE revisits design patterns
Java EE revisits design patterns Alex Theedom
 
Unbreaking Your Django Application
Unbreaking Your Django ApplicationUnbreaking Your Django Application
Unbreaking Your Django ApplicationOSCON Byrum
 
Getting started with rails active storage wae
Getting started with rails active storage waeGetting started with rails active storage wae
Getting started with rails active storage waeBishal Khanal
 
Java EE revisits design patterns
Java EE revisits design patternsJava EE revisits design patterns
Java EE revisits design patternsAlex Theedom
 
The Many Ways to Test Your React App
The Many Ways to Test Your React AppThe Many Ways to Test Your React App
The Many Ways to Test Your React AppAll Things Open
 
Out of box page object design pattern, java
Out of box page object design pattern, javaOut of box page object design pattern, java
Out of box page object design pattern, javaCOMAQA.BY
 
Devoxx UK 2015: How Java EE has changed pattern implementation
Devoxx UK 2015: How Java EE has changed pattern implementationDevoxx UK 2015: How Java EE has changed pattern implementation
Devoxx UK 2015: How Java EE has changed pattern implementationAlex Theedom
 
From YUI3 to K2
From YUI3 to K2From YUI3 to K2
From YUI3 to K2kaven yan
 
Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...
Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...
Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...Alan Richardson
 
Java EE Revisits Design Patterns
Java EE Revisits Design PatternsJava EE Revisits Design Patterns
Java EE Revisits Design PatternsAlex Theedom
 
EJB 3.2 - Java EE 7 - Java One Hyderabad 2012
EJB 3.2 - Java EE 7 - Java One Hyderabad 2012EJB 3.2 - Java EE 7 - Java One Hyderabad 2012
EJB 3.2 - Java EE 7 - Java One Hyderabad 2012Jagadish Prasath
 
JavaScript Library Overview
JavaScript Library OverviewJavaScript Library Overview
JavaScript Library Overviewjeresig
 

Was ist angesagt? (20)

Whats New In Roller5
Whats New In Roller5Whats New In Roller5
Whats New In Roller5
 
CDI Best Practices with Real-Life Examples - TUT3287
CDI Best Practices with Real-Life Examples - TUT3287CDI Best Practices with Real-Life Examples - TUT3287
CDI Best Practices with Real-Life Examples - TUT3287
 
OpenNTF Domino API (ODA): Super-Charging Domino Development
OpenNTF Domino API (ODA): Super-Charging Domino DevelopmentOpenNTF Domino API (ODA): Super-Charging Domino Development
OpenNTF Domino API (ODA): Super-Charging Domino Development
 
The Modern Java Web Developer - Denver JUG 2013
The Modern Java Web Developer - Denver JUG 2013The Modern Java Web Developer - Denver JUG 2013
The Modern Java Web Developer - Denver JUG 2013
 
iPhone Coding For Web Developers
iPhone Coding For Web DevelopersiPhone Coding For Web Developers
iPhone Coding For Web Developers
 
Open Social In The Enterprise
Open Social In The EnterpriseOpen Social In The Enterprise
Open Social In The Enterprise
 
AtlasCamp 2012 - Testing JIRA plugins smarter with TestKit
AtlasCamp 2012 - Testing JIRA plugins smarter with TestKitAtlasCamp 2012 - Testing JIRA plugins smarter with TestKit
AtlasCamp 2012 - Testing JIRA plugins smarter with TestKit
 
XPages Mobile, #dd13
XPages Mobile, #dd13XPages Mobile, #dd13
XPages Mobile, #dd13
 
Java EE revisits design patterns
Java EE revisits design patterns Java EE revisits design patterns
Java EE revisits design patterns
 
Unbreaking Your Django Application
Unbreaking Your Django ApplicationUnbreaking Your Django Application
Unbreaking Your Django Application
 
Getting started with rails active storage wae
Getting started with rails active storage waeGetting started with rails active storage wae
Getting started with rails active storage wae
 
Java EE revisits design patterns
Java EE revisits design patternsJava EE revisits design patterns
Java EE revisits design patterns
 
The Many Ways to Test Your React App
The Many Ways to Test Your React AppThe Many Ways to Test Your React App
The Many Ways to Test Your React App
 
Out of box page object design pattern, java
Out of box page object design pattern, javaOut of box page object design pattern, java
Out of box page object design pattern, java
 
Devoxx UK 2015: How Java EE has changed pattern implementation
Devoxx UK 2015: How Java EE has changed pattern implementationDevoxx UK 2015: How Java EE has changed pattern implementation
Devoxx UK 2015: How Java EE has changed pattern implementation
 
From YUI3 to K2
From YUI3 to K2From YUI3 to K2
From YUI3 to K2
 
Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...
Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...
Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...
 
Java EE Revisits Design Patterns
Java EE Revisits Design PatternsJava EE Revisits Design Patterns
Java EE Revisits Design Patterns
 
EJB 3.2 - Java EE 7 - Java One Hyderabad 2012
EJB 3.2 - Java EE 7 - Java One Hyderabad 2012EJB 3.2 - Java EE 7 - Java One Hyderabad 2012
EJB 3.2 - Java EE 7 - Java One Hyderabad 2012
 
JavaScript Library Overview
JavaScript Library OverviewJavaScript Library Overview
JavaScript Library Overview
 

Ähnlich wie Beyond Fluffy Bunny. How I leveraged WebObjects in my lean startup.

WebObjects Developer Tools
WebObjects Developer ToolsWebObjects Developer Tools
WebObjects Developer ToolsWO Community
 
OpenNTF Webinar 2022-08 - XPages Jakarta EE Support in Practice
OpenNTF Webinar 2022-08 - XPages Jakarta EE Support in PracticeOpenNTF Webinar 2022-08 - XPages Jakarta EE Support in Practice
OpenNTF Webinar 2022-08 - XPages Jakarta EE Support in PracticeJesse Gallagher
 
John Resig Beijing 2010 (English Version)
John Resig Beijing 2010 (English Version)John Resig Beijing 2010 (English Version)
John Resig Beijing 2010 (English Version)Jia Mi
 
MicroProfile for MicroServices
MicroProfile for MicroServicesMicroProfile for MicroServices
MicroProfile for MicroServicesMert Çalışkan
 
The State of Java under Oracle at JCertif 2011
The State of Java under Oracle at JCertif 2011The State of Java under Oracle at JCertif 2011
The State of Java under Oracle at JCertif 2011Arun Gupta
 
jQuery Comes to XPages
jQuery Comes to XPagesjQuery Comes to XPages
jQuery Comes to XPagesTeamstudio
 
Google App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGoogle App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGuillaume Laforge
 
Enterprise Strength Mobile JavaScript
Enterprise Strength Mobile JavaScriptEnterprise Strength Mobile JavaScript
Enterprise Strength Mobile JavaScriptTroy Miles
 
Oracle Fusion Middleware on Exalogic Best Practises
Oracle Fusion Middleware on Exalogic Best PractisesOracle Fusion Middleware on Exalogic Best Practises
Oracle Fusion Middleware on Exalogic Best PractisesMichel Schildmeijer
 
Lean Startup with WebObjects
Lean Startup with WebObjectsLean Startup with WebObjects
Lean Startup with WebObjectsWO Community
 
Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...
Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...
Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...HostedbyConfluent
 
SharePoint Framework, Angular and Azure Functions
SharePoint Framework, Angular and Azure FunctionsSharePoint Framework, Angular and Azure Functions
SharePoint Framework, Angular and Azure FunctionsSébastien Levert
 

Ähnlich wie Beyond Fluffy Bunny. How I leveraged WebObjects in my lean startup. (20)

WebObjects Developer Tools
WebObjects Developer ToolsWebObjects Developer Tools
WebObjects Developer Tools
 
Hybernat and structs, spring classes in mumbai
Hybernat and structs, spring classes in mumbaiHybernat and structs, spring classes in mumbai
Hybernat and structs, spring classes in mumbai
 
OpenNTF Webinar 2022-08 - XPages Jakarta EE Support in Practice
OpenNTF Webinar 2022-08 - XPages Jakarta EE Support in PracticeOpenNTF Webinar 2022-08 - XPages Jakarta EE Support in Practice
OpenNTF Webinar 2022-08 - XPages Jakarta EE Support in Practice
 
John Resig Beijing 2010 (English Version)
John Resig Beijing 2010 (English Version)John Resig Beijing 2010 (English Version)
John Resig Beijing 2010 (English Version)
 
Stackato v6
Stackato v6Stackato v6
Stackato v6
 
Eclipse e4
Eclipse e4Eclipse e4
Eclipse e4
 
JS Essence
JS EssenceJS Essence
JS Essence
 
MicroProfile for MicroServices
MicroProfile for MicroServicesMicroProfile for MicroServices
MicroProfile for MicroServices
 
The State of Java under Oracle at JCertif 2011
The State of Java under Oracle at JCertif 2011The State of Java under Oracle at JCertif 2011
The State of Java under Oracle at JCertif 2011
 
jQuery Comes to XPages
jQuery Comes to XPagesjQuery Comes to XPages
jQuery Comes to XPages
 
Protractor survival guide
Protractor survival guideProtractor survival guide
Protractor survival guide
 
Stackato
StackatoStackato
Stackato
 
Stackato v4
Stackato v4Stackato v4
Stackato v4
 
Google App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGoogle App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and Gaelyk
 
Enterprise Strength Mobile JavaScript
Enterprise Strength Mobile JavaScriptEnterprise Strength Mobile JavaScript
Enterprise Strength Mobile JavaScript
 
Oracle Fusion Middleware on Exalogic Best Practises
Oracle Fusion Middleware on Exalogic Best PractisesOracle Fusion Middleware on Exalogic Best Practises
Oracle Fusion Middleware on Exalogic Best Practises
 
Stackato v5
Stackato v5Stackato v5
Stackato v5
 
Lean Startup with WebObjects
Lean Startup with WebObjectsLean Startup with WebObjects
Lean Startup with WebObjects
 
Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...
Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...
Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...
 
SharePoint Framework, Angular and Azure Functions
SharePoint Framework, Angular and Azure FunctionsSharePoint Framework, Angular and Azure Functions
SharePoint Framework, Angular and Azure Functions
 

Mehr von WO Community

In memory OLAP engine
In memory OLAP engineIn memory OLAP engine
In memory OLAP engineWO Community
 
Using Nagios to monitor your WO systems
Using Nagios to monitor your WO systemsUsing Nagios to monitor your WO systems
Using Nagios to monitor your WO systemsWO Community
 
Build and deployment
Build and deploymentBuild and deployment
Build and deploymentWO Community
 
Reenabling SOAP using ERJaxWS
Reenabling SOAP using ERJaxWSReenabling SOAP using ERJaxWS
Reenabling SOAP using ERJaxWSWO Community
 
Chaining the Beast - Testing Wonder Applications in the Real World
Chaining the Beast - Testing Wonder Applications in the Real WorldChaining the Beast - Testing Wonder Applications in the Real World
Chaining the Beast - Testing Wonder Applications in the Real WorldWO Community
 
D2W Stateful Controllers
D2W Stateful ControllersD2W Stateful Controllers
D2W Stateful ControllersWO Community
 
Deploying WO on Windows
Deploying WO on WindowsDeploying WO on Windows
Deploying WO on WindowsWO Community
 
Unit Testing with WOUnit
Unit Testing with WOUnitUnit Testing with WOUnit
Unit Testing with WOUnitWO Community
 
Apache Cayenne for WO Devs
Apache Cayenne for WO DevsApache Cayenne for WO Devs
Apache Cayenne for WO DevsWO Community
 
Advanced Apache Cayenne
Advanced Apache CayenneAdvanced Apache Cayenne
Advanced Apache CayenneWO Community
 
Migrating existing Projects to Wonder
Migrating existing Projects to WonderMigrating existing Projects to Wonder
Migrating existing Projects to WonderWO Community
 
iOS for ERREST - alternative version
iOS for ERREST - alternative versioniOS for ERREST - alternative version
iOS for ERREST - alternative versionWO Community
 
"Framework Principal" pattern
"Framework Principal" pattern"Framework Principal" pattern
"Framework Principal" patternWO Community
 
Filtering data with D2W
Filtering data with D2W Filtering data with D2W
Filtering data with D2W WO Community
 
Localizing your apps for multibyte languages
Localizing your apps for multibyte languagesLocalizing your apps for multibyte languages
Localizing your apps for multibyte languagesWO Community
 

Mehr von WO Community (20)

KAAccessControl
KAAccessControlKAAccessControl
KAAccessControl
 
In memory OLAP engine
In memory OLAP engineIn memory OLAP engine
In memory OLAP engine
 
Using Nagios to monitor your WO systems
Using Nagios to monitor your WO systemsUsing Nagios to monitor your WO systems
Using Nagios to monitor your WO systems
 
Build and deployment
Build and deploymentBuild and deployment
Build and deployment
 
High availability
High availabilityHigh availability
High availability
 
Reenabling SOAP using ERJaxWS
Reenabling SOAP using ERJaxWSReenabling SOAP using ERJaxWS
Reenabling SOAP using ERJaxWS
 
Chaining the Beast - Testing Wonder Applications in the Real World
Chaining the Beast - Testing Wonder Applications in the Real WorldChaining the Beast - Testing Wonder Applications in the Real World
Chaining the Beast - Testing Wonder Applications in the Real World
 
D2W Stateful Controllers
D2W Stateful ControllersD2W Stateful Controllers
D2W Stateful Controllers
 
Deploying WO on Windows
Deploying WO on WindowsDeploying WO on Windows
Deploying WO on Windows
 
Unit Testing with WOUnit
Unit Testing with WOUnitUnit Testing with WOUnit
Unit Testing with WOUnit
 
Life outside WO
Life outside WOLife outside WO
Life outside WO
 
Apache Cayenne for WO Devs
Apache Cayenne for WO DevsApache Cayenne for WO Devs
Apache Cayenne for WO Devs
 
Advanced Apache Cayenne
Advanced Apache CayenneAdvanced Apache Cayenne
Advanced Apache Cayenne
 
Migrating existing Projects to Wonder
Migrating existing Projects to WonderMigrating existing Projects to Wonder
Migrating existing Projects to Wonder
 
iOS for ERREST - alternative version
iOS for ERREST - alternative versioniOS for ERREST - alternative version
iOS for ERREST - alternative version
 
iOS for ERREST
iOS for ERRESTiOS for ERREST
iOS for ERREST
 
"Framework Principal" pattern
"Framework Principal" pattern"Framework Principal" pattern
"Framework Principal" pattern
 
Filtering data with D2W
Filtering data with D2W Filtering data with D2W
Filtering data with D2W
 
WOver
WOverWOver
WOver
 
Localizing your apps for multibyte languages
Localizing your apps for multibyte languagesLocalizing your apps for multibyte languages
Localizing your apps for multibyte languages
 

Kürzlich hochgeladen

EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontologyjohnbeverley2021
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 

Kürzlich hochgeladen (20)

EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 

Beyond Fluffy Bunny. How I leveraged WebObjects in my lean startup.

  • 1. MONTREAL 1/3 JULY 2011 Beyond Fluffy Bunny Paul D.Yu FDL Solutions, Inc.
  • 2. Objectives • Macro-level view of the layout of my application frameworks and application, beyond Fluffy Bunny • Hope to be helpful to the next New WebObjects project team • To encourage discussions of “simplifying” the building of WebObjects/WOnder applications • Improve adoption of WebObjects/WOnder
  • 3. Agenda • Introduction • What is Fluffy Bunny? And Why it’s important • How do I structure my applications? • A few details • Q&A
  • 4. Introduction • Been around WebObjects since the 1.0 • At NeXT when Apple acquired NeXTSTEP/Cocoa/OS X • Was in the room when price dropped from $50K to $699 • Programmed in JSP • Managed numerous .Net and other Java development efforts • But I keep coming back to WebObjects
  • 5. MONTREAL 1/3 JULY 2011 What is Fluffy Bunny? Why it is important...
  • 6. Crossing the Chasm Product Adoption Life Cycle Geoffrey Moore
  • 7. WebObjects in the Old Days
  • 8. WebObjects Adoption • Technically • Too complex • Too many choices • Too many ways of doing things • Business-wise? • No marketing, no major corporate backing
  • 9. Too Many Choices • WebObjects App • Wonder/WebObjects App • WebObjects D2W App • Wonder D2W App • Etc. Etc...
  • 10. Where is WebObjects on the Curve? Geoffrey Moore
  • 11. Why Ask the Macro Question? • Does the iOS/Mobile and Software as a Service business models change the calculus for us?
  • 12. Why WOnder? "It's time to stop pretending that WebObjects is a solution by itself anymore. WebObjects is really just WonderFoundation at this point. No new developer should ever be starting a plain-jane WO project. Ever!! Not even a Hello World app." Dave Avendasora
  • 13. Along came Fluffy Bunny • Introduced with WOLips 3.3 • “All projects now use the Wonder-style project layout (aka Fluffy Bunny Layout)” Mike Schrag
  • 15. Fluffy Bunny Structure • Standardized the structured of all WOnder based projects • Lots of conversation and discussions about this change in the way that WOnder-based WebObjects application would be structured • Fighting by the OLD guards
  • 16. Why Fluffy Bunny? • Mike’s way or the highway! • Moving the product forward so there are less choices for the early majority • But without knowing it, the current users may not be willing to help crossing the chasm
  • 17. Where does a new person start? • WOCommunity.org • wiki.objectstyle.org/confluence • webobjects-dev@apple.com • wonder-disc@lists.sourceforge.net • Wonder Examples???
  • 18. What’s wrong with WOnder Examples? • Too simplistic? • Too complex? • Too not tied to EOF? • Too sparse...
  • 19. MONTREAL 1/3 JULY 2011 Beyond Fluffy Bunny How I structured my apps
  • 20. Design Patterns Overtime Thanks Travis and Kieran
  • 21. Application Setup • MyAppCore.framework • MyAppModels.framework • MyExtensions.framework • MyAppJasperReports.framework • MyApp_1.woa • MyAppWebServices.woa • MyApp_2.woa
  • 22. Application Core Framework • Your own Exception Handling • Your own Backtrack Handling • May be your own component extensions • Your private patches to WOnder
  • 23. MyAppModel Framework • Includes your EOModelds • EOGenerator • Templates: Entity, _Entity.java • Sources com.mycompany.eo, GeneratedEOs • jdbc jar(s) in Libraries • Turn on Migration!!! Even after the fact...
  • 24. MyExtensions Framework • String utilities • Date utilities • Mail utilities • Keiran’s Controllers and Concurrent handlers • Others
  • 25. MyAppJasperReports • Keiran’s JasperReports Framework • Loose collection of the other stuff needed to support last year’s demonstrations • Your jasperReports.jasper and .jrxml files • Would be nice not to have JasperReports.jar inside of the JasperReport Framework, so you can pick your own version?
  • 26. MyApp_1, _2 • Based on the underlying frameworks, then it is easy to implement different application perspectives into the business model • Productivity much higher than normal
  • 27. MyAppWebServices • ERRest really really cool thing • Uses the same MyAppModelFramework • RestActions to deliver • Binary plist, json, xml, etc.
  • 28. Client App Experiments • iPod Read-only app to ERRest API • Cappuccino update app to ERRest API • Ipad app (in progress) to ERRest API
  • 29. MONTREAL 1/3 JULY 2011 A Few Details
  • 30. Some Specific Things • Classpath List at runtime • Nagios Support • Log4j notifications • Component Naming Convention • Properties.<myName> • Inline bindings
  • 31. Kieran’s Classpath List @Override public void didFinishLaunching() { super.didFinishLaunching(); // Output classpath if (log.isInfoEnabled()) { // Classpath debugging // When launched by wotaskd in deployment, the classpath property is // com.webobjects.classpath String classpath = ERXProperties.stringForKey("com.webobjects.classpath"); // When launched manually or from within IDE, the classpath is the // regular java.class.path if (classpath == null) { classpath = ERXProperties.stringForKey("java.class.path"); } // ~ if (classpath == null) // Clean it up to a dir prints on each line of console or log file if (classpath != null) { classpath = classpath.replace(':', 'n'); } // ~ if (classpath != null) log.info("classpath = n" + classpath); } // ~ if (logger.isInfoEnabled()) }
  • 32. Nagios Support • DirectAction methods • Ping • PingEO • Contract with Pascal Roberts
  • 33. Nagios DirectActions DirectAction.java /** * For Nagios test * @return 1 */ public WOActionResults pingAction() { WOResponse response = new WOResponse(); response.appendContentString("1"); return response; } /** * For Nagios EO deadlock test * @return "VoiceType.displayCode of Object with primaryKey = 1" */ public WOActionResults pingEOAction() { VoiceType voiceType = VoiceType.fetchVoiceType(ERXEC.newEditingContext(), VoiceType.DISPLAY_SEQUENCE.eq(new Integer(1))); WOResponse response = new WOResponse(); response.appendContentString(voiceType.displayCode()); // return response; }
  • 34. Log4J Email • Add log to Components, not just inside of EOs • Set Properties to send log4j emails to admin account • GmailSMTPAppender
  • 35. Component Log4J setup private static Logger log = Logger.getLogger(ComponentName.class); public WOActionResults saveChanges() { try { log.info(" schoolSelection = " + schoolSelection.name()); log.info("_person.currentSchool( " + _person.currentSchool().name()); editingContext().saveChanges(); AjaxModalDialog.close(context()); } catch (EOGeneralAdaptorException saveException) { log.error("Exception while saving in " + name() + ": " + saveException.getMessage()); if (isOptimisticLockingFailure(saveException)) { handleOptimisticLockingFailureByRefaulting(saveException); } else { editingContext().revert(); } } }
  • 36. Log4J Email Notification Properties log4j.rootCategory=INFO, A1, EMAIL log4j.appender.EMAIL=fdl.utilities.log4j.appender.GmailSMTPAppender log4j.appender.EMAIL.SMTPHost=smtp.gmail.com log4j.appender.EMAIL.SMTPDebug=true log4j.appender.EMAIL.From=admin@<yourDomain>.com log4j.appender.EMAIL.To=support@<yourDomain>.com log4j.appender.EMAIL.SMTPUsername=admin@<yourDomain>.com log4j.appender.EMAIL.SMTPPassword=<yourPassword> log4j.appender.EMAIL.Subject=Email Notification from Gmail SMTP Appender log4j.appender.EMAIL.cc=admin@<yourDomain>.com log4j.appender.EMAIL.layout=org.apache.log4j.PatternLayout log4j.appender.EMAIL.layout.ConversionPattern=%p %t %c - %m%n log4j.appender.EMAIL.BufferSize=512
  • 37. Base Components • BaseComponent • ListComponent • Query • Detail • BatchDisplayGroup
  • 38. Component Naming Convention • NounVerb or <Entity><Task> • VerbNoun or <Task><Entity> • Pick one and try to stick with it
  • 39. YUIText Component • Plugin replacement for WOText using the YUI 2.9+ editor • Does not work with iOS Safari
  • 40. Properties • Application.woa • Properties (checked in with the Project) • Properties.<developerName> (ignored and NOT checked in) • /etc/WebObjects/<JavaMonitorInstanceName>/Properties • Don’t store the production password in the EOModeld!!!
  • 41. Lessons Learned • Hire experts from the group to help you • Their expertise can save you many many hours of labor • WebObjects & WOnder is great for a small startup if you know the technology already • We, as a community, need to create more opportunities to make money with WO • The future business model is not based on labor hours
  • 42. Objectives • Macro-level view of the layout of my application frameworks and application • Hope to be helpful to the next New WebObjects project team • To encourage discussions of “simplifying” the building of WebObjects/WOnder applications • Improve adoption of WebObjects/WOnder
  • 43. MONTREAL 1/3 JULY 2011 Credits Travis Britt, Kieran Kelleher, Mike Schrag, and all the other WO “gods”
  • 44. MONTREAL 1/3 JULY 2011 Q&A