Your SlideShare is downloading. ×
0
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
L06 process design
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

L06 process design

288

Published on

Processes are programs that run in data centers and have the role of executing specific tasks. They can be scheduled, triggered by an event or run manually. These programs handle task such as …

Processes are programs that run in data centers and have the role of executing specific tasks. They can be scheduled, triggered by an event or run manually. These programs handle task such as importing and exporting, reconciliation, daily updates and calculations and thing like that. Processes usually have no user interface except they log their progress to a log file.

In this lecture we create a process framework based on some of the design patterns we have covered. The idea is that this framework can be used to build processes, and as an example we create process call Import Content Process that reads RSS entries form a new site.

We also look briefly at XML.

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
288
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
14
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Lecture 06 Process Design
  • 2. Agenda  Why Processes? – Design Issues – Architecture Issues  RU Process Framework
  • 3. Reading  RuFramework source code  XML  Processing XML (video)  Build Scripts (video)  Java Technology and XML-Part One – http://java.sun.com/developer/technicalArticles/xml/Ja vaTechandXML/
  • 4. Why Processes?
  • 5. What is a Processes anyway?  Enterprise system need to run processes for several reasons – Manual or automatic  Things in the “background” – Nightly update of customers – Reconciliation of systems  Lengthy operations – Recalculate of all accounts  Processes have no user interface – Traditionally know as “Jobs”
  • 6. Our Task  We need to build a framework from running processes.  What patterns can we use?
  • 7. Design Issues  Each process has simple task  Each process can be re-run at any time  Locations are always the same  Logging is always the same  Customer specific functionality can be added to generic processes  Other considerations – Must handle large amount of data – Must support multiple threads for performance Process Framework Generic Process Customer Specific Plugin
  • 8. RU Process Framework
  • 9. RU Framework  Simple Framework developed during the course – Illustrates design ideas – Application Framework – Reduce dependence on other frameworks by wrapping them in interfaces and classes – Builds on Spring  Package – is.ruframework • domain • process – All classes are prefixed with “Ru”
  • 10. Process Framework  The idea is that the Process Framework starts the process  Process Developers must implement some interface  Information will be in a context XML file
  • 11. Process Design  Let’s create an interface, RuProcess – This is what all processes have to implement package is.ruframework.process; public interface RuProcess { public void startProcess (); public void beforeProcess (); public void afterProcess (); }
  • 12. Process Design  Let’s implement this with RuAbstractProcess – Processes can extend this classes package is.ruframework.process; import is.ruframework.domain.RuObject; abstract public class RuAbstractProcess extends RuObject implements RuProcess { abstract public void startProcess (); public void beforeProcess () { } public void afterProcess () { } }
  • 13. Process Design  We needs some context, RuProcessContext – Processes can get information about their process from this context public class RuProcessContext { private String processName; private String processClass; private String importFile; private String importURL; private String dataSourceFile; private Map params; ... }
  • 14. Process Design  Let’s change the interface, RuProcess – Dependency Injection package is.ruframework.process; public interface RuProcess { public void setProcessContext (RuProcessContext processContext); public void setParameters(String[] params); abstract public void startProcess (); public void beforeProcess (); public void afterProcess (); }
  • 15. Process Design  Change the RuAbstractProcess – Let this class implement the injection abstract public class RuAbstractProcess extends RuObject implements RuProcess { private RuProcessContext processContext; private String contextFile; private String parameters[]; ... public void setProcessContext(RuProcessContext processContext) { this.processContext = processContext; } ...
  • 16. Process Design  Let’s use a factory to create the process, RuProcessFactory – This class can load the context file public class RuProcessFactory { private String contextFile; private RuProcessContext processContext; public RuProcess loadProcess(RuProcessContext ctx) throws RuProcessException public void loadProcessContext(String contextFile) throws RuProcessException ... }
  • 17. Process Design  Create a class to run the process – This class puts everything together public class RuProcessRunner extends RuObject implements Runnable { private RuProcess process = null; public static void main(String[] args) { } public RuProcessRunner(String contextFile) throws RuProcessException public void run() { } }
  • 18. RU Process Framework Implementation
  • 19. Process Framework  To create process, we must – Create the process class that implements RuProcess – Create the Process Context XML file
  • 20. Process Context XML file  The framework will create the object RuProcessContext <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" http://www.springframework.org/dtd/spring-beans.dtd> <beans> <bean id="processContext” class="is.ruframework.process.RuProcessContext"> <property name="processName"> <value>RSSProcess</value> </property> <property name="importURL"> <value>http://rss.news.yahoo.com/rss/tech</value> </property> <property name="processClass"> <value>is.ru.honn.blog.process.RssReaderProcess</value> </property> </bean> </beans>
  • 21. RuProcessContext  Class for storing the Process Context – The environment the process runs in – Attributes line process name, class, importURL, data source
  • 22. The RuProcess Interface  RuProcess is the interface for all processes  The framework will load the process context and set with setProcessContext – Dependency Injection  The Framework will call the process methods – beforeProcess, startProcess, afterProcess
  • 23. RuProcess  RuProcess is the interface for all processes – The Process Factory will call setProcessContext public interface RuProcess { public void setProcessContext(RuProcessContextprocessContext); public void setParameters(String[] params); public void startProcess (); public void beforeProcess (); public void afterProcess (); }
  • 24. RuAbstractProcess  Abstract class that implements RuProcess – Takes care of handling Process Context – Overrides beforeProcess and afterProcess with empty methods, allowing them to become optional – Declares startProcess as abstract
  • 25. Layered Supertype  Interface defines the methods needed – Some are generic for all derived classes  Use abstract super classes to implement some but not all of the interface methods
  • 26. RuAbstractProcess abstract public class RuAbstractProcess extends RuObject implements RuProcess { private RuProcessContextprocessContext; private String contextFile; private String parameters[]; public void setProcessContext(RuProcessContextprocessContext) { this.processContext = processContext; } public RuProcessContextgetProcessContext() { return processContext; } ... abstract public void startProcess (); public void beforeProcess () {} public void afterProcess () {} } Eat these
  • 27. RuProcessFactory  Factory that loads processes – Factroy and Plugin Patterns – loadProcess method returns RuProcess – Extends the generic RuFactory
  • 28. RuProcessFactory public class RuProcessFactory extends RuFactory { private static final String PROCESS_CONTEXT = "process.xml"; private RuProcessContextprocessContext; public RuProcessloadProcess(RuProcessContextctx) throws RuProcessException { RuProcess process = null; // Load the process specified in the context file try { Class cls = Class.forName(ctx.getProcessClass()); process = (RuProcess)cls.newInstance(); process.setProcessContext(ctx); } catch (Exception e) { ... } return process; }
  • 29. RuProcessFactory public void loadProcessContext(String contextFile) throws RuProcessException { try { processContext = (RuProcessContext)getObject("processContext"); } catch (BeansException e) { String tmp = "File '" + contextFile + "' not found. Exception: " + e.getMessage(); log.severe(tmp); throw new RuProcessException(tmp, e); } }
  • 30. RuProcessRunner  Class that calls the factory and runs the process – Name of Process Context file is parameter
  • 31. RuProcessRunner public static void main(String[] args) { RuProcessRunner runner; if (args.length> 0) { runner = new RuProcessRunner(args[0]); } else { runner = new RuProcessRunner(); } try { runner.run(); } catch (RuProcessExceptionfwpe) { System.out.println(fwpe.getMessage()); } }
  • 32. RuProcessRunner public RuProcessRunner(String contextFile) throws RuProcessException { if (contextFile == null) { String tmp = "Parameter contextFile must not be null"; log.severe(tmp); throw new RuProcessException(tmp); } RuProcessFactory factory = new RuProcessFactory(contextFile); process = factory.loadProcess(); } public void run() { if (process != null) { process.beforeProcess(); process.startProcess(); process.afterProcess(); } } }
  • 33. Process Framework
  • 34. Process Framework Data Transfer Object Factory Template Method Plug-in Layered Supertype Dependency injection Layered Supertype
  • 35. Import Content Process
  • 36. Import Content Process  Problem – We need to import RSS feeds into our database – Example URL: • http://rss.news.yahoo.com/rss/tech  Solution – Use the RU Framework • ImportContentPrcess – Use the FeedReader
  • 37. Import Content Process  Process that reads contents from an URL  Tasks – Creates a FeedReader to read entries – The process implements the processContent callback – Uses ContentService from our Domain Layer to store each content – Must log out the progress using a message source
  • 38. Import Content Process  Process that reads contents from an URL  Tasks – The Process must “wire” all components together
  • 39. Import Content Process  Process that reads contents from an URL  Solution – Create class ImportContentProcess that extends RuAbstractProcess • beforeProcess • startProcess • afterProcess – Define the Process Context in process.xml – Use Spring ApplicationContext to load all the components • Specified in app.xml
  • 40. Import Content Process public class ImportContentProcess extends RuAbstractProcess implements FeedHandler { protected ContentServicecontentService; FeedReader reader; MessageSourcemsg; public void beforeProcess() { ApplicationContextctx = new FileSystemXmlApplicationContext("app.xml"); contentService = (ContentService)ctx.getBean("contentService"); reader = (FeedReader)ctx.getBean("feedReader"); reader.setFeedHandler(this); msg = (MessageSource)ctx.getBean("messageSource"); log.info(msg.getMessage("processbefore", new Object[] { getProcessContext().getProcessName() } , Locale.getDefault())); }
  • 41. Import Content Process ApplicationContextctx = new FileSystemXmlApplicationContext("app.xml"); contentService = (ContentService)ctx.getBean("contentService"); reader = (FeedReader)ctx.getBean("feedReader"); reader.setFeedHandler(this); msg = (MessageSource)ctx.getBean("messageSource"); <beans> <bean id="messageSource“ class= "org.springframework.context.support.ResourceBundleMessageSource"> <property name="basename“><value>messages</value></property> </bean> <bean id="contentService" class="is.ru.honn.tube.service.content.ContentServiceStub"> </bean> <bean id="feedReader" class="is.ru.honn.tube.feeds.RssReader"> </bean> </beans> app.xml
  • 42. Import Content Process public void startProcess() { log.info(msg.getMessage("processstart", new Object[] { getProcessContext().getProcessName() }, Locale.getDefault())); try { reader.read(getProcessContext().getImportURL()); } catch (FeedException e) { log.info(msg.getMessage("processreaderror", new Object[] { getProcessContext().getImportFile() }, Locale.getDefault())); log.info(e.getMessage()); } log.info(msg.getMessage("processstartdone", new Object[] {contentService.getContents().size()}, Locale.getDefault())); }
  • 43. Collecting the Entries public void processContent(Object content) { contentService.addContent((Content)content); }
  • 44. Running the Process public void afterProcess() { Collection<Content>col = contentService.getContents(); for (Content cnt: col) { System.out.println(cnt); } }
  • 45. Message Source log.info(msg.getMessage("processstart", new Object[] { getProcessContext().getProcessName() }, Locale.getDefault())); processbefore=The process {0} is starting (beforeProcess). processstart=Starting process {0} processstartdone=Reading done. Read {0} contents processreaderror=Unable to read file ''{0}''. messages.properties msg = (MessageSource)ctx.getBean("messageSource"); <bean id="messageSource“ class= "org.springframework.context.support.ResourceBundleMessageSource"> <property name="basename“><value>messages</value></property> </bean> app.xml startProcess in ImportContentProcess.java beforeProcess in ImportContentProcess.java
  • 46. Using the ContentService public void processContent(Content content) { contentService.addContent(content); } public interface ContentService { public void addContent(Content content); public Collection<Content>getContents(); } while (i.hasNext()) { ent = (SyndEntry)i.next(); content = new Content(); content.setTitle(ent.getTitle()); ... handler.processContent(content); } read in RssReader.java ImportContentProcess.java ContentService.java
  • 47. Printing out values public void afterProcess() { Collection<Content>col = contentService.getContents(); for (Content cnt: col) { System.out.println(cnt); } }INFO: The process ImportContentProcess is starting (beforeProcess). Sep 28, 2008 3:09:31 PM is.ru.honn.tube.process.ImportContentProcessstar INFO: Starting process ImportContentProcess Sep 28, 2008 3:09:32 PM is.ru.honn.tube.process.ImportContentProcessstar INFO: Reading done. Read 12 contents Japan's online social scene isn't so social (AP) Unlocked iPhone 3G on sale in Hong Kong
  • 48. Run with IntelliJ
  • 49. Running the Process INFO: Starting process ImportContentProcess Sep 24, 2012 8:43:50 AM is.ru.honn.tube.process.ImportContentProcess startProcess INFO: Reading done. Read 40 contents Many US stores report being sold out of iPhone 5s Apple supplier halts China factory after violence Apple, Samsung demand changes to $1B verdict This is Scary: Scientists find a way to erase frightening memories Verizon’s iPhone 5 being sold unlocked, allowing it to be used internationally Why Burberry Wants to Bring the Online Experience to Stores, and Not Vice Versa Apple, Samsung demand changes to $1B verdict iPhone 5 launch draws Apple fans worldwide Verizon iPhone 5's secret feature: It's 'unlocked' Review: iPhone evolves into jewel-like '5'
  • 50. Processing XML
  • 51. Overview
  • 52. XML Example <?xml version="1.0" encoding=”UTF-8"?> <teams> <team> <id>ENG001</id> <name>Arsenal</name> <league>ENG001</league> <sport>FOOTBALL</sport> <country>England</country> </team> ... </teams>
  • 53. XML RSS Example <?xml version="1.0" encoding="utf-8"?> <rss version="2.0" xmlns:media="http://search.yahoo.com/mrss"> <channel> <title>YouTube :: Recently Added Videos</title> <link>http://youtube.com/rss/global/recently_added.rss</link> <description>Recently Added Videos</description> <item> <author>rss@youtube.com (lokipsa)</author> <title>Profile pic test</title> <link>http://youtube.com/?v=1mpDAAMwoQo</link> <description> <![CDATA[ <img src="http://sjl-static2.sjl.youtube.com/vi/1mpDAAMwoQo/2.jpg" align="right" ... </p> ]]> </description>
  • 54. Valid and well-formed docments  XML document is well-formed if it is according to the XML standard – Correct according to the rules  XML document is valid if it is according to some specific Document Definition (DTD) or Schema – Correct according to DTD or Schema  XML document that is not well-formed is not usable – Unlike HTML
  • 55. XML Properties  XML documents are tree  Each node is also a tree or a leaf  Benfits – Easy to traverse the document – Easy to build new documents – Allows for XSLT transformation – Easy to work with parts of the document  XML parser can use these properties
  • 56. Parsing  To use XML document it must be parsed  XML Parser – Reads in the XML document – Provides data to tree form to work with  Two basic methods – DOM – Document Object Model – SAX – Simple API of XML  JDom is a library that simplifies both
  • 57. The DOM Concept  Tree is built – DOM
  • 58. The SAX Concept  SAX will send a message – Calls methods in Handler
  • 59. JDom  DOM and SAX are low-level APIs – Cumbersome to use  JDom is a simple class library for XML parsing – Supports both DOM and SAX – Goal is to simplify using XML  Packages – org.jdom
  • 60. XML  XML is universal, simple to understand  Good when exchanging data  There is time and space complexity
  • 61. Summary  Process Framework  Import Content Process  XML

×