Avançar para a área de conteúdo

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Todas as informações enviadas são seguras.

  • Fechar [x]

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Todas as informações enviadas são seguras.

  • Fechar [x]

Produza e Utilize Feeds de Mashup Usando o Mashups4JSF

Agora é fácil exportar dados de aplicativo como feeds

Hazem Saleh, Staff Software Engineer, IBM  
Photo of Hazem Saleh
Hazem Saleh tem seis anos de experiência em tecnologias JEE e de código aberto. Ele é comprometido com o Apache MyFaces e o iniciador de muitos componentes nos projetos do MyFaces, como o Tomahawk CAPTCHA, Commons ExportActionListener, Media, PasswordStrength e outros. Ele é o fundador do GMaps4JSF (um projeto de integração do Google Maps com o JavaServer Faces) e Mashups4JSF (um projeto de integração de serviços de mashup com o JavaServer Faces). Ele é o autor do livro "The Definitive Guide to Apache MyFaces and Facelets (Apress)" e muitos artigos sobre JSF, um autor contribuidor do developerworks e um palestrante público sobre JSF. Ele agora trabalha para a IBM Egito como engenheiro contratado. Hazem é reconhecido como Especialista no assunto em tecnologias web 2.0.

Resumo: 

Um dos casos de uso mais comuns dos aplicativos de mashup é a capacidade de exportar os dados internos do aplicativo como feeds (RSS ou Atom). Antes do Mashups4JSF, os desenvolvedores tinham que produzir manualmente os feeds a partir dos DTOs (data transfer objects) do aplicativo. Agora, graças ao Mashups4JSF, a exportação de dados do aplicativo na forma de feeds ficou muito mais fácil.

Data:  09/Ago/2011
Nível:  Intermediário Também disponível em :   Inglês
Atividade:  958 visualizações
Comentários:  


Em um artigo anterior sobre o Mashups4JSF (consulte Recursos), aprendemos o que é o Mashups4JSF, como configurá-lo e como usá-lo para criar um aplicativo de mashup útil. Aprendemos também a usar a biblioteca com o Apache MyFaces 2.0 e o IBM JWL (JavaServer Faces Widget Library) no WebSphere Application Server V7.0.

Um dos casos de uso mais comuns dos aplicativos de mashup é a capacidade de exportar os dados internos do aplicativo como feeds (RSS ou Atom). Antes do Mashups4JSF, os desenvolvedores tinham que produzir manualmente os feeds a partir dos DTOs (data transfer objects) do aplicativo. Agora, graças ao Mashups4JSF, a exportação de dados do aplicativo na forma de feeds ficou muito mais fácil.

Neste artigo, explicarei como exportar os dados de aplicativos da Web na forma de feeds RSS usando o serviço de produtor de feeds do Mashups4JSF e como consumi-los usando o componente leitor de feeds.

Explore o aplicativo de notícias

O aplicativo de notícias é um aplicativo JavaServer Faces (JSF) 2.0 que exibe uma amostra de conjunto de notícias em uma tabela de dados, como mostra a Figura 1, e nós queremos exportar essa amostra de conjunto de notícias na forma de feeds RSS.


Figura 1. A amostra de notícias

O código por trás da página de notícias é muito simples. A Listagem 1 mostra o código XHTML da dataTable de notícias na página.


Listagem 1. A dataTable de notícias na página news.xhtml

<h:dataTable id="newsTable" value="#{newsList.news}" var="varnews"
	styleClass="standardTable" headerClass="standardTable_Header"
	footerClass="standardTable_Footer" 
	rowClasses="standardTable_Row1, standardTable_Row2"
	columnClasses="standardTable_Column">
				
	<h:column id="titleColumn">
		<f:facet name="header">
			<h:outputText value="#{messages.application_label_title}" 
				id="titleText">
			</h:outputText>
		</f:facet>
		<h:outputLink value="#{varnews.link}">
			<h:outputText id="title" value="#{varnews.title}">
			</h:outputText>
		</h:outputLink>
	</h:column>
			
	<h:column id="authorColumn">
		<f:facet name="header">
			<h:outputText value="#{messages.application_label_author}" 
				id="authorText">
			</h:outputText>
		</f:facet>
		<h:outputText id="author" value="#{varnews.author}">
		</h:outputText>
	</h:column>
			
	<h:column id="categoryColumn">
		<f:facet name="header">
			<h:outputText value="#{messages.application_label_category}"	
				id="categoryText">
			</h:outputText>
		</f:facet>
		<h:outputText id="category" value="#{varnews.category}">
		</h:outputText>
	</h:column>
			
	<h:column id="descColumn">
		<f:facet name="header">
			<h:outputText value="#{messages.application_label_description}" 
				id="descText">
			</h:outputText>
		</f:facet>
		<h:outputText id="desc" value="#{varnews.desc}">
		</h:outputText>
	</h:column>
</h:dataTable>

O newsTable está ligado ao DTO NewsList por meio da expressão #{newsList.news}. A listagem 2 mostra o código do DTO NewsList . Tem uma lista estática de objetos de notícias. Pode conter dados reais de um banco de dados, mas por uma questão de simplicidade, usa-se uma lista estática.


Listagem 2. O DTO NewsList

@ManagedBean
public class NewsList {
    static List <News> news = new ArrayList<News>();

    // Sample news list
    static {
	for (int i = 0; i < 10; ++i) {
      news.add(new News(
		         "Title" + i, 
		         "Description" + i, 
		         "http://www.google.com/search?q=" + i, 
		         "Category" + i, 
		         "Author" + i));
	}
     }

     public List<News> getNews() {
             return news;
     }
}

A classe News é um bean muito simples. Contém apenas os seguintes atributos:

  1. Title
  2. Description
  3. Link
  4. Category
  5. Author

Consulte a Listagem 3.


Listagem 3. O DTO News

public class News {
    private String title;
    private String desc;
    private String link;
    private String category;
    private String author;
    
    ...
    public String getTitle() {
		return title;
    }
    public void setTitle(String title) {
		this.title = title;
    }
	
    public String getDesc() {
		return desc;
    }
    public void setDesc(String desc) {
		this.desc = desc;
    }
	
    public String getLink() {
		return link;
    }
    public void setLink(String link) {
		this.link = link;
    }
	
    public String getCategory() {
		return category;
    }
    public void setCategory(String category) {
		this.category = category;
    }
	
    public String getAuthor() {
		return author;
    }
	
    public void setAuthor(String author) {
		this.author = author;
    }
}

Agora, vamos observar como exportar os dados de NewsList como um feed RSS.


Exporte os dados do aplicativo como um feed RSS

Antes de especificar os detalhes da exportação da lista de notícias como um feed RSS, talvez seja necessário lembrar como configurar a biblioteca Mashups4JSF com os aplicativos JSF 2.0, conforme descrito no artigo anterior sobre o Mashups4JSF (consulte Recursos). Ao usar o servlet de feeds do Mashups4JSF, certifique-se de fazer o download da captura instantânea estável mais recente do Mashups4JSF 0.0.3 (consulte Recursos).

Para exportar os dados da NewsList como um feed RSS usando o Mashups4JSF, realizaremos as seguintes etapas em nosso aplicativo JSF.

Registrar o servlet de feeds do Mashups4JSF

Registrar o MashupFeedServlet do Mashups4JSF no web.xml do seu aplicativo, como mostra a listagem 4.


Listagem 4. Registrando o servlet de feeds do Mashups4JSF

<servlet>
	<servlet-name>mashupFeedServlet</servlet-name>
	<servlet-class>com.googlecode.mashups.servlets.MashupFeedServlet</servlet-class> 
</servlet>

<servlet-mapping>
	<servlet-name>mashupFeedServlet</servlet-name>
	<url-pattern>/mashupFeedServlet</url-pattern>
</servlet-mapping>

Anote a classe de feed

Anote a classe de feed (classe NewsList ) com @Feed e especifique o título, a descrição, o link e os itens do feed usando @FeedTitle, @FeedDescription, @FeedLink e @FeedItems. A Listagem 5 mostra a classe NewsList depois que as anotações foram aplicadas.


Listagem 5. A classe NewsList depois da aplicação das anotações

@ManagedBean
@Feed
public class NewsList {
     static List <News> news = new ArrayList<News>();
     
    // Sample news list
    static {
		for (int i = 0; i < 10; ++i) {
				news.add(new News(
				"Title" + i, 
				"Description" + i, 
				"http://www.google.com/search?q=" + i, 
				"Category" + i, 
				"Author" + i));
		}
    }

    @FeedItems
    public List<News> getNews() {
		return news;
    }
    
    @FeedTitle
    public String getTitle() {
		return TITLE;
    }

    @FeedDescription
    public String getDescription() {
		return DESCRIPTION;
    }

    @FeedLink
    public String getLink() {
		return LINK;
    }

    private final String TITLE = "News List";
    private final String DESCRIPTION = "News List Description";
    private final String LINK = "http://somenewschannel.com";        
}

Anote a classe de item de feed (classe News ) com @ItemFeed e especifique o título, a descrição, o link, a categoria e o autor do item de feed usando @ItemTitle, @ItemDescription, @ItemLink, @ItemCategorye @ItemAuthor. A Listagem 6 mostra a classe News depois que as anotações foram aplicadas.


Listagem 6. A classe News depois da aplicação das anotações

@FeedItem
public class News {
    private String title;
    private String desc;
    private String link;
    private String category;
    private String author;
    
    ...
    
    @ItemTitle
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    
    @ItemDescription
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
    
    @ItemLink
    public String getLink() {
        return link;
    }
    public void setLink(String link) {
        this.link = link;
    }
    
    @ItemCategory
    public String getCategory() {
        return category;
    }
    public void setCategory(String category) {
        this.category = category;
    }
    
    @ItemAuthor
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
}

Renderize o feed

Depois de anotar o feed e as classes de item de feed, o processo está quase concluído. Só falta renderizar o feed passando a classe como um parâmetro para o servlet de feeds e especificar rss como saída, como mostra a Listagem 7.


Listagem 7. Renderizando o feed RSS ao passar a classe como um parâmetro para o servlet de feeds

#{request.contextPath}/mashupFeedServlet?feedClass=dto.NewsList&output=rss

A Figura 2 mostra o feed NewsList depois da exportação como um feed RSS.


Figura 2. O feed RSS NewsList

Se deseja exportar NewsList como um feed Atom, é possível fazer isso especificando history como uma saída para o servlet de feeds.


Utilize o feed RSS usando o leitor de feed

Quando acrescentado às exportações de feeds RSS e ATOM, o Mashups4JSF também permite utilizar qualquer tipo de feed RSS, ATOM ou JSON dentro do aplicativo JSF. Portanto, vamos ver como consumir o feed RSS que acabamos de produzir para os dados de NewsList usando o componente rssFeedReader .

A Listagem 8 mostra como utilizar o feed RSS usando o componente rssFeedReader na página consumer.xhtml.


Listagem 8. O componente rssFeedReader na página consumer.xhtml

<mashup:rssFeedReader    
	feedURL="http://#{facesContext.externalContext.request.remoteHost}:
		#{facesContext.externalContext.request.localPort}      
		#{facesContext.externalContext.request.contextPath}
		/mashupFeedServlet?feedClass=dto.NewsList&output=rss"

	maximumCount="5"
	channelVar="channel"
	itemVar="item"
	itemIndex="itemIndex">
	
	<f:facet name="channel">
		<h4>#{messages.application_channel_desc}#{channel.description}</h4>
	</f:facet>

	<f:facet name="item">
		<b>#{messages.application_item_index} </b>#{itemIndex}<br />
		<b>#{messages.application_item_title} </b>#{item.title}<br />
		<b>#{messages.application_item_link} </b>
				
		<h:outputLink value="#{item.link}">
			#{item.link}
		</h:outputLink><br />
			 
		<b>#{messages.application_item_author} </b>#{item.author}<br />
				
		<b>#{messages.application_item_category} </b>
		#{item.categories[0].name}<br /><br />
	</f:facet>                
</mashup:rssFeedReader>

Como mostra a Listagem 8, foi especificado:

  • a URL do feed RSS,
  • a variável de canal usada para acessar as informações do canal de RSS (description , por exemplo),
  • a variável de item que acessará todos os itens de feed RSS (title, link e author , por exemplo) e
  • o índice do item.

Em relação ao canal, é possível especificar os atributos que desejamos exibir no canal de RSS e, quanto ao item, os atributos que desejamos exibir em cada item de feed.

A Figura 3 mostra a saída do rssFeedReader para o feed RSS NewsList.


Figura 3. A saída do rssFeedReader para o feed RSS NewsList

Conclusão

Como complemento para os diversos componentes e serviços de mashup, o Mashups4JSF abstraiu as formas de exportar e importar feeds de mashup para aplicativos JSF. Antes do Mashups4JSF, os desenvolvedores tinham que criar feeds a partir dos DTOs (data transfer objects) de um aplicativo. Agora, graças ao Mashups4JSF, a exportação de dados de aplicativo na forma de feeds ficou mais fácil. Neste artigo, aprendemos a representar os dados do aplicativo JSF como feeds RSS usando o servlet de feeds Mashups4JSF. Também aprendemos a utilizar o feed produzido usando o componente rssFeedReader.


Recursos

Aprender

Obter produtos e tecnologias

Discutir

Sobre o autor

Photo of Hazem Saleh

Hazem Saleh tem seis anos de experiência em tecnologias JEE e de código aberto. Ele é comprometido com o Apache MyFaces e o iniciador de muitos componentes nos projetos do MyFaces, como o Tomahawk CAPTCHA, Commons ExportActionListener, Media, PasswordStrength e outros. Ele é o fundador do GMaps4JSF (um projeto de integração do Google Maps com o JavaServer Faces) e Mashups4JSF (um projeto de integração de serviços de mashup com o JavaServer Faces). Ele é o autor do livro "The Definitive Guide to Apache MyFaces and Facelets (Apress)" e muitos artigos sobre JSF, um autor contribuidor do developerworks e um palestrante público sobre JSF. Ele agora trabalha para a IBM Egito como engenheiro contratado. Hazem é reconhecido como Especialista no assunto em tecnologias web 2.0.

Ajuda para Relatar Abuso

Relatar abuso

Obrigado. Esta entrada foi sinalizada para atenção do moderador.


Ajuda para Relatar Abuso

Relatar abuso

Falha no envio do Relatório de abuso. Tente novamente mais tarde.


developerWorks: Registre-se


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Selecione seu nome de exibição

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

(Deve possuir de 3 a 31 caracteres.)


Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Classificar este artigo

Comentários

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Software livre, Tecnologia Java
ArticleID=751408
ArticleTitle=Produza e Utilize Feeds de Mashup Usando o Mashups4JSF
publish-date=08092011
author1-email=Hazems@eg.ibm.com
author1-email-cc=

Conheça a IBM da sua cidade

Virtual Branch Office Brasil

A IBM está mais perto do que você imagina!


Tags

Help
Use o campo de pesquisa para encontrar todos os tipos de conteúdo no My developerWorks com essa tag.

Use a barra de rolagem para ver mais ou menos tags.

Tags populares mostra as principais tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Minhas tags mostra suas tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Use o campo de pesquisa para localizar todos os tipos de conteúdo no Meu developerWorks com essa tag. Tags populares mostra as tags principais para essa zona de conteúdo particular (por exemplo, tecnologia Java, Linux, WebSphere). My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere). Minhas tags mostra as suas tags para essa zona de conteúdo em particular (por exemplo, tecnologia Java, Linux, WebSphere).