integrating magnolia with spring framework using blossom
TRANSCRIPT
Integrating Magnolia with Spring Framework using Blossomusing Blossom
Magnolia is a registered trademark used by permission
Speaker Qualifications
Magnolia is a registered trademark used by permission
Why use Spring?Why use Spring?
Magnolia is a registered trademark used by permission
Spring is the enabler
Magnolia is a registered trademark used by permission
• Spring is a java based application framework• Focus on web applications and enterprise applications• One of the most popular frameworks in the java space
• Pioneered a broad feature set• Lightweight container• Dependency Injection (DI)• Aspect Oriented Programming (AOP)• Enterprise Service Abstraction
Spring is everywhere
Magnolia is a registered trademark used by permission
• 2.5 million developers use Spring (two thirds!)• More than half of the Fortune 500 power their Java
applications with Spring• More than 70 percent of enterprises cite improved
productivity, faster project completion, improved portability and application quality as reasons for using Spring
Spring is comprehensive
Magnolia is a registered trademark used by permission
• Spring Framework consists of 20 optional modules• Spring Web MVC• Spring WebFlow• Spring Security• Spring WebServices• ...
• Most new technology come with Spring integrations• Estimated 70% of Java based platforms and middleware
provides embedded support for Spring
How does Blossom integrate Spring?
Magnolia is a registered trademark used by permission
• Integrates Spring into the module mechanism• Module Lifecycle• Integrates with Spring Web MVC
• And additional bridging
Magnolia is a registered trademark used by permission
Model View Controller Pattern
Controller
Model
View
The controller receives input, performs requested operations and provides the resulting model. The view is responsible for providing the UI representation of the model.
Keeps business logic separated from presentation.
Spring Web MVC
Annotation Based ControllerAnnotation Based Controller
Magnolia is a registered trademark used by permission
@Controllerpublic class BookController {
@Autowired private BookStoreWebService webService;
@RequestMapping("/book") public ModelAndView handleRequest(@RequestParam("id") int bookId) { ModelAndView mav = new ModelAndView("book.jsp"); mav.addAttribute("book", webService.getBook(bookId)); return mav; }}
http://acmebookstore.com/book?id=1327
How can Spring Web MVC fit in Magnolia?
Magnolia is a registered trademark used by permission
Template Paragraph
Paragraph
Blossom managed templates and paragraphs
Magnolia is a registered trademark used by permission
TemplateC
M
V
ParagraphC
M
V
ParagraphC
M
V
Templates and paragraphs are decoupled from view rendering
Pre-executing a controller (paragraph)
Magnolia is a registered trademark used by permission
TemplateC
M
V
ParagraphC
M
V
ParagraphC
M
V
C
The pre-executed controller can choose to skip page rendering by sending a redirect or directly render something on its own
Pre-executing a controller (paragraph)
Magnolia is a registered trademark used by permission
TemplateC
M
V
ParagraphC
M
V
ParagraphC
M
V
C
<form><blossom:pecid-input /><input type=”text” name=”email” />...</form>
Outputs:
<form><input type=”hidden” name=”_pecid”
value=”ff6cefa6-d958-47b1-af70-c82a414f17e1”/><input type=”text” name=”email” />...</form>
The Blossom Programming Model
Magnolia is a registered trademark used by permission
• Based on annotations• Non-intrusive• Spring centric approach• The controller is the template• The controller is the paragraph• and they’re automatically available in Magnolia• Dialogs are created programmatically
Templates
Magnolia is a registered trademark used by permission
@Controller@Template("Two Columns")public class TwoColumnsTemplate {
@RequestMapping("/twoColumns") public ModelAndView handleRequest() { return new ModelAndView("twoColumnsTemplate.jsp"); }}
Paragraphs
Magnolia is a registered trademark used by permission
@Controller@Paragraph(value = "Simple paragraph", dialog=”simple-dialog”)@ParagraphDescription("Simple paragraph that renders a JSP")public class SimpleParagraph {
@RequestMapping("/simple") public ModelAndView render() { return new ModelAndView("simpleParagraph.jsp"); }}
Blossom managed dialogs
Magnolia is a registered trademark used by permission
• Dialogs are created using code, not configuration• Based on annotations• Detected and automatically available in Magnolia• Validation of dialog input
Blossom managed dialogs
Magnolia is a registered trademark used by permission
@DialogFactory("page-dialog")public class PageDialog {
@TabFactory("Content") public void contentTab(TabBuilder tab) { tab.addEdit("title", "Title", "Title of this page"); tab.addCheckbox("navigation", "Navigation", "Include page in menu"); }
@TabFactory("Meta") public void metaTab(TabBuilder tab) { tab.addEdit("author", "Author", ""); tab.addEdit("keywords", "Keywords", "Keywords for this page"); tab.addEdit("description", "Description", "Concise page explanation"); }}
Dialog inheritance
Magnolia is a registered trademark used by permission
public abstract class BaseDialog { @TabFactory("Meta") public void metaTab(TabBuilder tab) { tab.addEdit("keywords", "Keywords", "Keywords for this page"); tab.addEdit("description", "Description", "Concise page explanation"); }}
@DialogFactory("news-properties")@TabOrder("Content", “Meta”)public class NewsPageDialog extends BaseDialog { @TabFactory("Content") public void contentTab(TabBuilder tab) { tab.addEdit("subject", "Subject", "News subject"); tab.addDate("date", "Publication Date", "Date of publication"); tab.addFckEditor("text", "Text", ""); tab.addFile("image", "Image", ""); }}
Dialog validation
Magnolia is a registered trademark used by permission
@DialogFactory("page-properties")public class PagePropertiesDialog {
@TabFactory("Meta") public void metaTab(TabBuilder tab) { tab.addEdit("description", "Description", "A concise page explanation"); }
@TabValidator("Meta") public void validateMetaTab(DialogTab tab) { if (tab.getSub("description").getValue().length() < 20) AlertUtil.setMessage("Meta description needs to be longer"); }}
Paragraphs can create their own dialogs
Magnolia is a registered trademark used by permission
@Controller@Paragraph("Text and Image")public class TextAndImageParagraph {
@RequestMapping("/textAndImage") public ModelAndView render() { return new ModelAndView("textAndImage.jsp"); }
@TabFactory("Content") public void contentTab(TabBuilder tab) throws RepositoryException { tab.addFckEditor("text", "Text", ""); tab.addFile("image", "Image", ""); }}
Templates can contain dialog factories
Magnolia is a registered trademark used by permission
@Controller@Template("Section")public class SectionTemplate {
@RequestMapping("/section") public ModelAndView handleRequest() { return new ModelAndView("sectionTemplate.jsp"); }
@DialogFactory("section-properties") public void propertiesDialog(DialogBuilder dialog) { TabBuilder contentTab = dialog.addTab("Content"); contentTab.addEdit("title", "Title", "Title of this page"); TabBuilder metaTab = dialog.addTab("Meta"); metaTab.addEdit("description", "Description", "Page explanation"); }}
Dialogs be dynamically populated
Magnolia is a registered trademark used by permission
@Controller@Paragraph(“Book”)public class BookParagraph {
@Autowired private BookStoreWebService webService;
@RequestMapping("/book") public ModelAndView handleRequest() { Content content = MgnlContext.getAggregationState().getCurrentContent(); String bookId = content.getNodeData("id").getString(); ModelAndView mav = new ModelAndView("book.jsp"); mav.addAttribute("book", webService.getBook(bookId)); return mav; }
@TabFactory("Content") public void contentTab(TabBuilder tab) { tab.addSelect("id", "Book", "Select the book", webService.getBooks()); }}
View Technologies
Magnolia is a registered trademark used by permission
• Best of both worlds approach• Magnolia and Spring constructs work side by side• Built-in support for Freemarker and JSP• Everything Spring supports work out-of-the-box, such as
JSON, PDF, XML and RSS
Ticket Privatresor AB (www.ticket.se)
Magnolia is a registered trademark used by permission
One of the largest online travel agencies in Scandinavia
•Numerous integrations via web services•Booking and reservation of plane tickets, hotel rooms, rental cars etc.•Mid office sales applications•Online payment integrations•Uses Spring Remoting to communicate with dedicated backends•Spring WebFlow conversations running embedded in paragraphs
Summary
Magnolia is a registered trademark used by permission
• Spring centric approach based on annotations• Novel features like pre-execution and dialog validation• Code over configuration• Versioning• Collaboration
• Enables access to Spring features and technologies• Directly in templates, paragraphs and dialogs
Project Goal
Magnolia is a registered trademark used by permission
• Make Magnolia the CMS of choice for Spring developers• Make it easier to take advantage of everything that Spring
has to offer
• What comes next?• Tell us about your Spring integration needs!• Your feedback matters!
Questions?
Magnolia is a registered trademark used by permission