Gerar PDF utilizando JasperReports + JSF

Já li em todos os tópicos que tem aqui e em todos os sites do google e não consigo fazer isso funcionar, cada um fala uma coisa, não sei mais o que fazer. Se alguém puder me ajudar agradeço. Segue meu código:

ReportUtils

package com.relatorios;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.util.Map;
import javax.faces.context.FacesContext;
import javax.servlet.Servlet;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRPdfExporter;

public class ReportUtils {

	/**
	 * Gera o relatório em PDF.
	 *
	 * @param inputStream InputStream que contém o relatório.
	 * @param parametros Parâmetros utilizados pelo relatório.
	 * @param conexao Conexão utilizada para a execução da query.
	 * @param response HttpServletResponse que será usado como base para
	 * gerar o relatório.
	 * @return O OutputStream do HttpServletResponse passado.
	 * @throws JRException Caso ocorra algum problema na geração do relatório.
	 * @throws IOException Caso ocorra algum problema na obtenção do
	 * OutputStream.
	 */
	public static void createPDFReport(InputStream inputStream, Map<String, Object> parametros, Connection conexao) throws JRException, IOException {

		FacesContext facesContext = FacesContext.getCurrentInstance();
		facesContext.responseComplete();

		JasperPrint jasperPrint = JasperFillManager.fillReport(inputStream, parametros, conexao);

		ByteArrayOutputStream baos = new ByteArrayOutputStream();

		// Exporta em PDF, escrevendo os dados no output stream do response.
		JRExporter exporter = new JRPdfExporter();

		exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

		exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);

		// gera o relatório
		exporter.exportReport();

		byte[] bytes = baos.toByteArray();

		if (bytes != null && bytes.length > 0) {
			HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
			response.setContentType("application/pdf");
			response.setHeader("Content-disposition", "filename=\"relatorio.pdf\"");
			response.setContentLength(bytes.length);
			ServletOutputStream outputStream = response.getOutputStream();
			outputStream.write(bytes, 0, bytes.length);
			outputStream.flush();
			outputStream.close();
			FacesContext.getCurrentInstance().renderResponse();
			FacesContext.getCurrentInstance().responseComplete();
		}
		// retorna o OutputStream

	}
}

RelatorioMB

package com.modelo.managedBean;

import com.relatorios.ConnectionFactory;
import com.relatorios.ReportUtils;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRException;

@ManagedBean
public class RelatorioMB {

	private HttpServletResponse response;

	public void gerarRelatorio() throws IOException {
		ServletOutputStream out = null;
		InputStream is = getClass().getResourceAsStream("RelatorioCategoriasPorNome.jasper");

		Map<String, Object> parametro = new HashMap<String, Object>();
		parametro.put("primeiroNome", "b");
		

		try {

			ReportUtils.createPDFReport(is, parametro, ConnectionFactory.getTurismoGuiadoConnection());

		} catch (SQLException exc) {
			exc.printStackTrace();
		} catch (JRException exc) {
			exc.printStackTrace();
		} finally {
			if (out != null) {
				out.close();
			}
		}
	}
}

Eu não consigo criar o Relatório e exibir na tela para o usuário fazer o download. Tentei debugar isso mas não consigo entender "/