j2ee antipatterns - software summit · bill dudney — j2ee antipatterns page 26 build technical...
TRANSCRIPT
![Page 1: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/1.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 1
J2EE AntiPatternsBill DudneyObject Systems [email protected]
![Page 2: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/2.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 2
AgendaWhat is an AntiPattern?What is a Refactoring?AntiPatterns & Refactorings
PersistenceService Based ArchitectureJSP & ServletEJB EntityEJB SessionMessage Driven BeansWeb Service
![Page 3: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/3.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 3
What Is an AntiPattern?Recurring Solution with negative outcome
i.e. "I’ve done the wrong thing lots of times, don’t repeat my mistakes"
Consists of:NameCatalog Items
• Also Known As• Refactorings• Anecdotal Evidence
BackgroundGeneral Form
![Page 4: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/4.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 4
What Is an AntiPattern? (Continued)
Symptoms & ConsequencesTypical CausesKnown ExceptionsRefactoringsVariationsExampleRelated Solutions
![Page 5: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/5.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 5
AntiPattern – Covered ItemsNameGeneral FormSymptoms & ConsequencesRefactoringsExample
![Page 6: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/6.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 6
What Is Refactoring?A means to improve the design of existing software without breaking (i.e. rewriting) every piece of code that uses the refactored code.Consists Of:
Before and After Avatar• Sometimes UML• Sometimes Code
Motivation• To get out of the AntiPatterns
MechanicsExample
![Page 7: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/7.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 7
Persistence AntiPatternsDredge – Don’t fetch the whole databaseStifle – Don’t ignore JDBC performance techniques
![Page 8: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/8.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 8
AntiPattern: DredgeGeneral Form
Long Lists of EJB EntitiesDeep Graphs of EJB Entities
Symptoms & ConsequencesHuge Memory FootprintPoor Performance
RefactoringsLight Query
![Page 9: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/9.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 9
Dredge – Example
![Page 10: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/10.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 10
Refactoring: Light QueryBefore
![Page 11: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/11.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 11
Refactoring: Light QueryAfter
![Page 12: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/12.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 12
Light Query – MechanicsIdentify the lists your application must display
Its usually best to start with a simple one, a list that displays a single entityIt might make sense to start with a more complex list if it is causing serious performance problems
Locate the existing logic that generates the list
![Page 13: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/13.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 13
Light Query – MechanicsIntroduce a light DTO to represent the custom row.Introduce or modify DTO and/or Session Façade
Make sure to use a light weight mechanism to get the data such as JDBC or your R/O mapping tools mechanism for light weight queries to populate the light DTOs
![Page 14: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/14.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 14
AntiPattern: StifleGeneral Form
Lack of JDBC batch processing
Symptoms & ConsequencesPoor Database PerformanceUnhappy Users – loss of confidence
RefactoringsPack
![Page 15: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/15.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 15
Stifle – Example// Extract and loop through account datawhile(accountIter.hasNext()){...Statement statement = conn.createStatement();int rowsAffected = statement.executeUpdate("UPDATE ACCOUNT SET ...");
...}
![Page 16: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/16.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 16
Refactoring: PackBefore
After
![Page 17: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/17.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 17
Pack – MechanicsChange your looped statement execution to addBatch calls
Remember to set a batch size and execute the batch ever size steps
Call executeBatch on the statementMake sure to execute the batch on a regular basis so that it does not get too big
Deploy & Test
![Page 18: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/18.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 18
Service-Based Architecture AntiPatterns
Stove Pipe – Don’t rebuild the technical details for every serviceClient Completes Service – Don’t build services that are incomplete
![Page 19: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/19.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 19
AntiPattern: Stove PipeGeneral Form
Lots of private technical services oriented methodsDuplicated implementation effort across services
Symptoms & ConsequencesService is large with many methods not directly related to the interfaceInconsistent implementations across various services of the technical servicesDevelopment time is negatively impacted
![Page 20: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/20.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 20
AntiPattern: Stove PipeRefactorings
Build Technical Services Layer
![Page 21: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/21.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 21
Stove Pipe – Example
![Page 22: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/22.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 22
Refactoring: Build Technical Services Layer
Before
![Page 23: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/23.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 23
Refactoring: Build Technical Services Layer
After
![Page 24: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/24.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 24
Build Technical Services Layer – Mechanics (1 of 3)
Review current services for duplicate private methods.
This can be very difficult especially if the services were implemented by different groupsLook for similar namesLook for similar functionality
Start with the simplest functionality that is duplicatedApply Fowler’s Extract Interface refactoring
Instead of making your service implement the interface, use it, you should use the new interface as a replacement for the duplicate code.
![Page 25: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/25.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 25
Build Technical Services Layer – Mechanics (2 of 3)
Implement the newly defined service interface
Start with moving the method from the business service’s implementation to the technical service’s implementationYou can use Fowler’s Move Method hereMany any necessary changes to get the business service to use the new technical service
Deploy and Test
![Page 26: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/26.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 26
Build Technical Services Layer – Mechanics (3 of 3)
After all tests pass, review the other business services with implementations of the technical service and refactor them to use the new technical service
This is a modified version of Move Method. Instead of physically moving the code, you will comment it out, then use the technical service.Some adjustment may need to be made to the technical service to accommodate the various implementations –remember that you are striving for a uniform implementation that all services share.
![Page 27: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/27.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 27
AntiPattern: Client Completes Service
General FormClient Code includes service functionality
• This can include items such as data validation, security checking or things related to technical services covered in the last AntiPattern
Symptoms & ConsequencesSome client side artifacts (JSPs, front controllers etc.) contain server-side codePotentially different behavior when invoking a service viaa Web-service interface and a user interface
RefactoringsMove Method Cross Tier
![Page 28: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/28.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 28
Client Completes Service –Example
<%!List errors = null;if(value.intValue() > 5) {errors = (List)
session.getAttribute(“errors”);errors.add(“Invalid value”);
}%>
![Page 29: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/29.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 29
Refactoring: Move Method Cross Tier
Before
After
![Page 30: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/30.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 30
Move Method Cross Tier –Mechanics
Locate server side code in client artifactsThe artifacts can range from simple Java Beans to JavaScript in a JSP or HTML page
Move code to Service ImplementationThis can be difficult because of the widely varying client side artifacts that the implementation can be in.For JavaBeans and Servlets you can use Fowler’s Move MethodFor JSPs you can use a modified Move Method
• The code in the JSP has to be consolidated into a method first.
Deploy & Test
![Page 31: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/31.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 31
JSP AntiPatternToo Much Data in Session – Not sure? Stick it in the session.
![Page 32: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/32.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 32
AntiPattern: Too Much Data in Session
General FormLots of calls to getAttribute and setAttributeTreatment of the Session as a global data space
Symptoms & ConsequencesBugs related to different types being under the same keyMaintenance Headaches
RefactoringsBeanify
![Page 33: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/33.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 33
Too Much Data in Session –Example
<% session.getAttribute(“firstName”); %>...<% session.getAttribute(“lastName”); %>...<% session.getAttribute(“middleInitial”); %>
![Page 34: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/34.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 34
Refactoring: BeanifyBefore
<%Boolean validUser = (Boolean)session.getAttribute("validUser");String buttonTitle = "Login";String url = "Login.jsp";if(null != validUser && validUser.booleanValue()) {
buttonTitle = "Logout";url = "Logout.jsp";
}%>
![Page 35: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/35.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 35
Refactoring: BeanifyAfter
<jsp:useBean id="userCtx" class="ibank.web.UserContext"/>
...<a class="BorderButton" href="${userCtx.nextNav}">${userCtx.loginTitle}
</a>
![Page 36: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/36.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 36
Beanify – Mechanics (1 of 2)Create a JavaBean to hold the dataAdd an attribute to the bean for every unique key used in setAttribute or getAttributeAdd a jsp:useBean to the JSPRemove all calls to getAttribute and replace them with expression language statements
![Page 37: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/37.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 37
Beanify – Mechanics (2 of 2)Remove all calls to setAttribute
If you are using the Delegate Controller pattern place the state change logic into your controllerIf you are not using Delegate Controller consider refactoring to include this pattern and in the mean time use the jsp:setProperty tag
Deploy and Test
![Page 38: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/38.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 38
Servlet AntiPatternTemplate Text In Servlet – looked like a good idea at the time…
![Page 39: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/39.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 39
AntiPattern: Template Text in Servlet
General FormLarge Servlet classes with lots of static HTML in the form of strings
Symptoms & ConsequencesLow ratio of business logic to HTMLMaintenance Headaches
RefactoringsUse JSPs
![Page 40: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/40.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 40
Refactoring: Use JSPsBefore
![Page 41: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/41.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 41
Refactoring: Use JSPsAfter
![Page 42: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/42.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 42
Use JSPs – Mechanics (1 of 3)Save a copy of the HTML output from your Servlet
You can skip this step if you have a good set of tests
Create a new JSP and copy all the obviously static HTML out of the Servlet and paste it into the JSP
Make note of dynamic content creation as you proceed. This dynamic behavior will have to be melded with the JSP via a JavaBean.
![Page 43: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/43.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 43
Use JSPs – Mechanics (2 of 3)Define a JavaBean to be populated by the Servlet and used by the JSP.
This bean will hold the data and possibly some of the behavior from the ServletYou might have to apply Fowler’s Move Method to get some of the functionality in the Servlet into the bean
Add a jsp:useBean action to the new JSP to use the freshly created bean.Change the Servlet to create and populate the bean and place it under request scope in the session.
![Page 44: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/44.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 44
Use JSPs – Mechanics (3 of 3)Comment out the static generation code from the ServletChange the Servlet to forward to the JSPDeploy and Test
You can use the copy of the HTML output you saved earlier as a visual guide to the validity of your refactoring
![Page 45: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/45.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 45
EJB Entity AntiPatternsDTO Explosion – A DTO for every occasion Coarse Behavior – Too many abstractions in one place
![Page 46: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/46.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 46
AntiPattern: DTO ExplosionGeneral Form
EJB Entities providing more than one DTO• Usually one for each view or use case the Entity is involved in
Many many DTOs
Symptoms & ConsequencesHuge maintenance overhead in synchronizing the various DTOs with Entity changes.Reduced usability of Entities because they are tied to a particular view types
RefactoringsLocalize Access
![Page 47: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/47.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 47
Refactoring: Localize AccessBefore
![Page 48: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/48.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 48
Refactoring: Localize AccessAfter
![Page 49: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/49.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 49
Localize Access – MechanicsIdentify EJB Entities making view oriented DTOChange the Entities to localUse Move Method to move the DTO creation code to your session façade
This method will have to be updated to work with an instance of the EntityYou might also consider creating a DTO factory
Deploy and Test
![Page 50: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/50.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 50
AntiPattern: Coarse BehaviorGeneral Form
Huge bloated EJB Entities following old style (EJB 1.x) patterns like Composite Entity
Symptoms & ConsequencesIncreased Complexity• Difficult Maintenance• Increased Development Time
RefactoringsExtract Entity
![Page 51: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/51.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 51
Refactoring: Extract EntityBefore
![Page 52: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/52.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 52
Refactoring: Extract EntityAfter
![Page 53: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/53.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 53
Extract Entity – Mechanics (1 of 2)
Apply Extract Interface for each POJO your composite Entity aggregates
These interfaces become your new EJBs interfacesUpdate each POJO to become a local EJB Entity
Use CMP where ever possibleIf you can’t use CMP, you will have to move the JDBC code from the existing composite to each of the newly created EntitiesIf you were using a relational object mapping tool (R/O) and you can’t go to CMP, then you have to integrate the R/O persistence with your containers CMP, or roll your own with BMP
![Page 54: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/54.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 54
Extract Entity – Mechanics(2 of 2)
Modify or create a session façade to provide clients with the existing functionality
If you have to create a session façade, then you should look at the Façade refactoring in Chapter 6 of the J2EE AntiPatterns book & the Session Façade pattern in the Core J2EE patterns book.
Deploy and Test
![Page 55: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/55.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 55
EJB Session AntiPatternsBloated Session – The kitchen sinkTransparent Façade – Straight to the entity source
![Page 56: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/56.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 56
AntiPattern: Bloated SessionGeneral Form
Large API with many methodsSymptoms & Consequences
Methods acting on different abstractions• i.e. part of the API works on orders, another works on
accountsHard to understand and use API• Increased maintenance
RefactoringsInterface Partitioning
![Page 57: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/57.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 57
Refactoring: Interface Partitioning
Before
![Page 58: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/58.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 58
Refactoring: Interface Partitioning
After
![Page 59: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/59.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 59
Interface Partitioning –Mechanics (1 of 2)
Identify each abstraction the service is acting on
Group the methods related to these other services togetherYou can start with the method names as a possible grouping mechanism, i.e. placeOrder, getOrderStatus, etc.
Apply Extract Interface for each group
![Page 60: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/60.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 60
Interface Partitioning –Mechanics (2 of 2)
Build a service around each new interfaceStart with the simplest interface
Refactor the original service to delegate the new serviceRefactor Clients to use the new service
This step should be done but is not required.
Deploy and Test
![Page 61: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/61.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 61
AntiPattern: Transparent Façade
General FormSession directly delegates to underlying entity
Symptoms & ConsequencesTight Coupling between Session and EntityPoor performanceIncreased Maintenance
RefactoringRight-size Session Façade
![Page 62: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/62.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 62
Refactoring: Right-size Session Façade
Before
After
![Page 63: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/63.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 63
Right-size Session Façade –Mechanics
Determine what coarse grained behavior belongs on the Session Façade
You can start with clients of the existing façade: What methods do they use, and what do the clients do with the data they get back?
Move the functionality from the clients to the façadeYou might be able to apply Move Method here
Refactor all clients to use the coarse grained behaviorSome of the functionality might have been implemented more than once
Deploy and Test
![Page 64: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/64.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 64
Message Driven EJB AntiPattern
Overloading Destinations – Why go through the trouble of another destination?
![Page 65: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/65.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 65
AntiPattern: Overloading Destinations
General FormMessage Driven Bean that processes more than one type of message in its onMessage method
Symptoms & ConsequencesPoor performanceDifficult MaintenanceBloat over time
RefactoringsOne Message One Bean
![Page 66: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/66.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 66
Refactoring: One Message One Bean
Before
After
![Page 67: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/67.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 67
One Message One Bean –Mechanics (1 of 2)
For each message type your bean is processing, introduce a new beanMove each block of code that is dealing with each message type into the various beans
You can use Move Method here, with the change that you are not moving a whole method, just the content of an ifblock
Modify deployment descriptor to deploy the new beans
In this step you will have to introduce all the new topics and/or queues requires as well
![Page 68: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/68.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 68
One Message One Bean –Mechanics (2 of 2)
Refactor clients to use the new beansThis step will involve changing the topic/queue posted to
Deploy and TestAny unit tests for the old message driven bean can likely have Move Method applied to them to move the test to a different test class
![Page 69: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/69.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 69
Web Service AntiPatternsOmniscient Object – Everything to everyoneSingle Schema Dream – We’ll make all the clients conform to this one schema
![Page 70: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/70.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 70
AntiPattern: Omniscient Object
General FormLarge service implementation that spans business abstractionsVery similar to the Bloated Session AntiPattern
Symptoms & ConsequencesMultiple Document Types Exchanged• Increased complexity and thus maintenance
Reuse more difficultRefactorings
Interface Partitioning
![Page 71: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/71.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 71
Refactoring from Omniscient Object
Slightly modified, since the WSDL in addition to the interfaces and implementation will have to be modifiedThe idea is the same, but the details will differ because of the additional artifacts associated with the Web service
![Page 72: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/72.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 72
AntiPattern: Single Schema Dream
General FormSchema changes often to accommodate new clientsLarge if...else if blocks
Symptoms & ConsequencesIncreased complexity in the serviceFrequent client breakage
RefactoringsIntroduce Schema Adaptor
![Page 73: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/73.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 73
Refactoring: Introduce Schema Adaptor
Before
![Page 74: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/74.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 74
Refactoring: Introduce Schema Adaptor
After
![Page 75: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/75.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 75
Introduce Schema Adaptor –Mechanics (1 of 2)
Implement the Schema AdaptorAll this really has to do is find the client specific XSL file and invoke the JAXP API
Define and organize client specific transformations
The organization needs to be such that you can retrieve the client specific transformations from the adaptor
![Page 76: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/76.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 76
Introduce Schema Adaptor –Mechanics (1 of 2)
Define client specific schemasThe schema adaptor will need access to the schemas as well, in order to validate the documents
Update the Web service to use the schema adaptor.
![Page 77: J2EE AntiPatterns - Software Summit · Bill Dudney — J2EE AntiPatterns Page 26 Build Technical Services Layer – Mechanics (3 of 3) After all tests pass, review the other business](https://reader031.vdocuments.net/reader031/viewer/2022011803/5b9675f009d3f2c05f8bb275/html5/thumbnails/77.jpg)
Colorado Software Summit: October 26 – 31, 2003 © Copyright 2003, Object Systems Group
Bill Dudney — J2EE AntiPatterns Page 77
ReferencesJ2EE AntiPatternsBill Dudney, Stephen Asbury, Joseph Krozak, Kevin WittkopfJohn Wiley & Sons; First edition (August 11, 2003)ISBN: 0-47114-615-3
Jakarta Pitfalls: Time-Saving Solutions for Struts, Ant, JUnit, and Cactus (Java Open Source Library)Bill Dudney, Jonathan LehrJohn Wiley & Sons; (July 2003)ISBN: 0-47144-915-6