Transcript
Page 1: Spring MVC - uzupełnienie

Projektowanie warstwy serwera

Spring MVC - uzupełnienie

Page 2: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

2Projektowanie warstwy serwera Plan wykładu

• TilesView• Automatyczne uruchamianie metod• Wysyłanie e-mail• Java Message Service

Page 3: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

3Projektowanie warstwy serwera TilesView - konfiguracja (I)

<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">

<property name="order" value="0"/>

<property name="viewClass" value="commons.TilesView" />

</bean>

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">

<property name="definitions">

<list>

<value>/WEB-INF/proces-tiles.xml</value>

</list>

</property> </bean>

Page 4: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

4Projektowanie warstwy serwera TilesView - konfiguracja (II)

<definition name="default-layout"

template="/WEB-INF/jsp/common/default-layout.jsp">

<put-attribute name="header" type="template"

value="/WEB-INF/jsp/common/header.jsp"/>

<put-attribute name="footer" type="template"

value="/WEB-INF/jsp/common/footer.jsp"/>

<put-attribute name="menu" type="template"

value="/WEB-INF/jsp/common/menu.jsp"/>

<put-attribute name="logon" type="template"

value="/WEB-INF/jsp/common/logon.jsp"/>

<put-attribute name="content” type="template"value=""/>

</definition>

Page 5: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

5Projektowanie warstwy serwera TilesView (I)

public class TilesView extends AbstractUrlBasedView {

protected void renderMergedOutputModel(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception

{

TilesContainer container = TilesAccess.getContainer(getServletContext());

String url = getUrl();

if ( container.isValidDefinition( url, request, response ) )

{

container.render( url, request, response );

}

Page 6: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

6Projektowanie warstwy serwera TilesView (II)

else

{

AttributeContext ctx = container.getAttributeContext( request, response );

Attribute content = new Attribute();

content.setName( "content" );

content.setType( Attribute.AttributeType.TEMPLATE );

content.setValue( "/WEB-INF/jsp/" + url + ".jsp" );

ctx.putAttribute( "content", content );

container.render( "default-layout", request, response );

}

}}

Page 7: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

7Projektowanie warstwy serwera TilesView - strona jsp

<html>

<head>

wszystkie css, scripty, inne

</head>

<body>

<tiles:insertAttribute name="header"/>

<tiles:insertAttribute name="menu"/>

<tiles:insertAttribute name="logon"/>

<div class="content"><tiles:insertAttribute name="content"/></div>

<tiles:insertAttribute name="footer"/>

</body>

</html>

Page 8: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

8Projektowanie warstwy serwera Automatyczne wykonywanie metod (I)

<bean name=”nocnePorzadki"

class="org.springframework.scheduling.quartz.

MethodInvokingJobDetailFactoryBean">

<property name="targetObject" ref=”uzytkownikService" />

<property name="targetMethod" value=”metodaPorzadkujaca" />

</bean>

Page 9: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

9Projektowanie warstwy serwera Automatyczne wykonywanie metod (II)

<bean id=”pierwszyTrigger" class="org.springframework.scheduling.quartz.

CronTriggerBean">

<property name="jobDetail" ref=" nocnePorzadki " />

<!-- run every morning at 2 AM -->

<property name="cronExpression"

value="0 0 2 * * ?" />

</bean>

Page 10: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

10Projektowanie warstwy serwera Automatyczne wykonywanie metod (III)

<bean id=”drugiTrigger" class="org.springframework.scheduling.

quartz.SimpleTriggerBean">

<property name="jobDetail" ref=" nocnePorzadki" />

<property name="startDelay" value="10000" />

<property name="repeatInterval" value="50000" />

</bean>

Page 11: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

11Projektowanie warstwy serwera Automatyczne wykonywanie metod (IV)

<bean class="org.springframework.scheduling.quartz.

SchedulerFactoryBean">

<property name="triggers">

<list>

<ref bean="pierwszyTrigger" />

<ref bean="drugiTrigger" />

</list>

</property>

</bean>

Page 12: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

12Projektowanie warstwy serwera Wysyłanie email (I)

public class MailServiceImpl implements MailService, ApplicationContextAware {

private JavaMailSender mailSender;

private ApplicationContext applicationContext;

private VelocityEngine velocityEngine;

//metody servisowe np.: UzytkownikService

.....

Page 13: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

13Projektowanie warstwy serwera Wysyłanie email (II)

public void noweKonto(final String login)

{

//przygotowanie obiektu preparator

try {

mailSender.send(preparator);

}

catch(MailException me)

{ ... }

}

Page 14: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

14Projektowanie warstwy serwera Wysyłanie email (III)

MimeMessagePreparator preparator = new MimeMessagePreparator()

{

@Override

public void prepare(MimeMessage mimeMessage) {

Uzytkownikuzytkownik = uzytkownikService.getByLogin(login);

MimeMessageHelper message = new MimeMessageHelper(mimeMessage, "UTF-8");

Page 15: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

15Projektowanie warstwy serwera Wysyłanie email (IV)

message.setTo(uzytkownik.getEmail());

message.setFrom(”adresOdKogo”);

message.setText(”tekst maila”, false);

message.setSubject(”tytuł maila”);

}

String from = applicationContext.getMessage("email.from", null, new Locale("pl")));

message.setFrom(from);

Page 16: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

16Projektowanie warstwy serwera Wysyłanie email (V)

Map<String, Object> model = new HashMap<String, Object>();

model.put("uzytkownik", uzytkownik);

model.put("link",”http://www.biblioteka.pl/aktywacja.html?id=”);

String text = VelocityEngineUtils.mergeTemplateIntoString( velocityEngine, ”szablony/noweKonto.html”, "UTF-8", model);

message.setText(text, false);

Page 17: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

17Projektowanie warstwy serwera Wysyłanie email - konfiguracja (I)

<bean id="velocityEngine"

class="org.springframework.ui.velocity.

VelocityEngineFactoryBean">

<property name="velocityProperties">

<value>

resource.loader=class

class.resource.loader.class=org.apache.velocity.

runtime.resource.loader.ClasspathResourceLoader

</value>

</property>

</bean>

Page 18: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

18Projektowanie warstwy serwera Wysyłanie email - konfiguracja (II)

<bean id="mailSender"

class="org.springframework.mail.javamail.JavaMailSenderImpl">

<property name="host" value=”???" />

<property name="port" value=”???" />

<property name="username" value=”???" />

<property name="password" value=”???" />

<property name="protocol" value="smtp" />

<property name="javaMailProperties">

<props>

<prop key="mail.smtp.auth">true</prop>

</props>

</property>

</bean>

Page 19: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

19Projektowanie warstwy serwera Szablon email

Witaj ${uzytkownik.imie} ${uzytkownik.nazwisko},

Twoje konto zostało założone.

Automatycznie wygenerowano hasło:

${uzytkownik.pierwszeHaslo}

Kliknij poniższy link:

${link}${uzytkownik.hash}

Page 20: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

20Projektowanie warstwy serwera Java Message Service - sender (I)

@Transactional

@Service("messageSender")

public class BibliotekaMessageSenderImpl implements BibliotekaMessageSender {

@Autowired

@Qualifier("jmsTemplate")

private JmsTemplate jmsTemplate;

Page 21: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

21Projektowanie warstwy serwera Java Message Service - sender (II)

@Override

public void sendNoweKontoMessage(String login)

{

NoweKontoMessage nkm = new NoweKontoMessage();

nkm.setLogin(login);

jmsTemplate.convertAndSend(nkm);

}

Page 22: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

22Projektowanie warstwy serwera Java Message Service - listener (I)

@Service(”bibliotekaMessageListener")

@Transactional

public class BibliotekaMessageListener implements MessageListener

{

...

Page 23: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

23Projektowanie warstwy serwera Java Message Service - listener (II)

@Override

public void onMessage(Message message) {

if (message instanceof ObjectMessage) {

ObjectMessage ob = (ObjectMessage) message;

....

Page 24: Spring MVC - uzupełnienie

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

24Projektowanie warstwy serwera Java Message Service - listener (III)

if (ob.getObject() instanceof NoweKontoMessage)

{

NoweKontoMessage nkm = (NoweKontoMessage) ob.getObject();

bibliotekaMailService.noweKonto(nkm.getLogin());

}

else if ....

}