For WebObjects developers
engifer is built on WO's ideas, not a clone of it.
The same
- Components: template plus Java class,
.wofolders and.wodfiles included. See Templating. - Bindings and KeyValueCoding.
- Component actions: the three phases,
pageWithName(). - Direct actions, sessions, wrappers with
<wo:content />, and Wonder's inline<wo:…>tags. .woabundles, run by wotaskd and JavaMonitor.
Different
- Java collections and
java.time, not Foundation (NSArray,NSTimestamp, …). - No EOF. Move to Cayenne or another ORM first.
- Java 25+, a standard Maven project, the classpath instead of
NSBundle. - Few annotations. APIs are plain typed Java.
NGRequestandNGResponseare interfaces. Make responses withNGResponses.- Sessions come from the context:
session()in a component,context.session()elsewhere.
Names
| WebObjects | engifer |
|---|---|
WOApplication | NGApplication |
WOComponent | NGComponent |
WOContext | NGContext |
WOSession | NGSession |
WORequest, WOResponse | NGRequest, NGResponse |
WODynamicElement | NGDynamicElement |
WOAssociation | NGAssociation |
WODirectAction | NGDirectAction |
WOResourceManager | NGResourceManager |
WOString, WOConditional, … | NGString (str), NGConditional (if), … See Dynamic elements |
NSKeyValueCoding | NGKeyValueCoding |
URLs
| WebObjects | engifer | |
|---|---|---|
| Component actions | /wo/ | /no/ |
| Direct actions | /wa/ | /na/ |
| Resources | /wr/ | /nr/ |
WO adaptor URLs (/cgi-bin/WebObjects/MyApp.woa/…, /Apps/WebObjects/MyApp.woa/…) work: the prefix is stripped.
Deployment
Built into a .woa by vermilingua. Under wotaskd and JavaMonitor:
- ✅ Lifebeats (
WOLifebeatEnabled,WOHost,WOPort,WOApplicationName,WOLifebeatDestinationPort,WOLifebeatInterval) - ✅ Stop from JavaMonitor
- ✅ Requests through the WO Apache adaptor
- ❌ Refuse new sessions (TODO, #55)
- ❌ Statistics (TODO, #55)
See Deployment.
Porting
(TODO: step-by-step guide.) The path:
- Java collections instead of Foundation; Cayenne instead of EOF.
- Project Wonder → wonder-slim.
- wonder-slim → engifer. A compatibility layer for common WO APIs is being designed.
API differences
(TODO)