integrating magnolia with spring framework using blossom

28
Integrating Magnolia with Spring Framework using Blossom using Blossom Magnolia is a registered trademark used by permission

Upload: boris-kraft

Post on 13-Jul-2015

2.654 views

Category:

Documents


7 download

TRANSCRIPT

Page 2: Integrating Magnolia with Spring Framework using Blossom

Speaker Qualifications

Magnolia is a registered trademark used by permission

Page 3: Integrating Magnolia with Spring Framework using Blossom

Why use Spring?Why use Spring?

Magnolia is a registered trademark used by permission

Page 4: Integrating Magnolia with Spring Framework using Blossom

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

Page 5: Integrating Magnolia with Spring Framework using Blossom

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

Page 6: Integrating Magnolia with Spring Framework using Blossom

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

Page 7: Integrating Magnolia with Spring Framework using Blossom

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

Page 8: Integrating Magnolia with Spring Framework using Blossom

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.

Page 9: Integrating Magnolia with Spring Framework using Blossom

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

Page 10: Integrating Magnolia with Spring Framework using Blossom

How can Spring Web MVC fit in Magnolia?

Magnolia is a registered trademark used by permission

Template Paragraph

Paragraph

Page 11: Integrating Magnolia with Spring Framework using Blossom

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

Page 12: Integrating Magnolia with Spring Framework using Blossom

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

Page 13: Integrating Magnolia with Spring Framework using Blossom

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>

Page 14: Integrating Magnolia with Spring Framework using Blossom

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

Page 15: Integrating Magnolia with Spring Framework using Blossom

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"); }}

Page 16: Integrating Magnolia with Spring Framework using Blossom

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"); }}

Page 17: Integrating Magnolia with Spring Framework using Blossom

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

Page 18: Integrating Magnolia with Spring Framework using Blossom

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"); }}

Page 19: Integrating Magnolia with Spring Framework using Blossom

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", ""); }}

Page 20: Integrating Magnolia with Spring Framework using Blossom

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"); }}

Page 21: Integrating Magnolia with Spring Framework using Blossom

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", ""); }}

Page 22: Integrating Magnolia with Spring Framework using Blossom

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"); }}

Page 23: Integrating Magnolia with Spring Framework using Blossom

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()); }}

Page 24: Integrating Magnolia with Spring Framework using Blossom

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

Page 25: Integrating Magnolia with Spring Framework using Blossom

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

Page 26: Integrating Magnolia with Spring Framework using Blossom

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

Page 27: Integrating Magnolia with Spring Framework using Blossom

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!

Page 28: Integrating Magnolia with Spring Framework using Blossom

Questions?

Magnolia is a registered trademark used by permission