Projektowanie warstwy serwera
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
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>
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>
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 );
}
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 );
}
}}
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>
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>
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>
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>
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>
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
.....
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)
{ ... }
}
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");
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);
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);
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>
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>
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}
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;
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);
}
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
{
...
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;
....
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 ....
}