Nao Salva no Banco de Dados

Ola fiz o codigo como vi nas video aulas porem nao salva no banco de dados pq?

a conexao esta funcionando normalmente enao apresenta nenhum erro mas nao salva.

segue codigo

FabricanteDAO

package br.com.drogaria.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import br.com.drogaria.factory.ConexaoFactory;

import br.com.drogaria.domain.Fabricante;

public class FabricanteDAO{
	public void salvar(Fabricante f) throws SQLException{
		StringBuilder sql = new StringBuilder();
		sql.append("INSERT INTO fabricante ");
		sql.append("(descricao) ");
		sql.append("VALUES (?) ");
		
		Connection conexao = ConexaoFactory.conectar();
		
		PreparedStatement comando = conexao.prepareStatement(sql.toString());
		comando.setString(1, f.getDescricao());
		
		comando.executeUpdate();
	}
	
	public void excluir(Fabricante f)throws SQLException{
		StringBuilder sql = new StringBuilder();
		sql.append("DELETE FROM fabricante ");
		sql.append("WHERE codigo = ? ");
		
		Connection conexao = ConexaoFactory.conectar();
		
		PreparedStatement comando = conexao.prepareStatement(sql.toString());
		comando.setLong(1,f.getCodigo());
		
		comando.executeUpdate();
	}
	
	public void editar(Fabricante f)throws SQLException{
		StringBuilder sql = new StringBuilder();
		sql.append("UPDATE fabricante ");
		sql.append("SET descricao = ? ");
		sql.append("WHERE codigo = ? ");
		
		Connection conexao = ConexaoFactory.conectar();
		PreparedStatement comando = conexao.prepareStatement(sql.toString());
		comando.setString(1, f.getDescricao());
		comando.setLong(2, f.getCodigo());
		
		comando.executeUpdate();
	}
	public Fabricante BuscarPorCodigo(Fabricante f) throws SQLException{
		StringBuilder sql = new StringBuilder();
		sql.append("SELECT codigo,descricao ");
		sql.append("FROM fabricante ");
		sql.append("WHERE codigo = ? ");
		
		Connection conexao = ConexaoFactory.conectar();
		PreparedStatement comando = conexao.prepareStatement(sql.toString());
		comando.setLong(1, f.getCodigo());
		
		ResultSet resultado = comando.executeQuery();
		
		Fabricante retorno = null;
		
		if(resultado.next()){
			retorno = new Fabricante();
			retorno.setCodigo(resultado.getLong("codigo"));
			retorno.setDescricao(resultado.getString("descricao"));
		}
		return retorno;
	}
	
	public ArrayList<Fabricante> listar() throws SQLException{
		StringBuilder sql = new StringBuilder();
		sql.append("SELECT codigo, descricao ");
		sql.append("FROM fabricante ");
		sql.append("ORDER BY descricao ASC ");
		
		Connection conexao = ConexaoFactory.conectar();
		
		PreparedStatement comando = conexao.prepareStatement(sql.toString());
		ResultSet resultado = comando.executeQuery();
		
		ArrayList<Fabricante> lista = new ArrayList<Fabricante>();
		
		while(resultado.next()){
			Fabricante f = new Fabricante();
			f.setCodigo(resultado.getLong("codigo"));
			f.setDescricao(resultado.getString("descricao"));
			
			lista.add(f);
		}
		
		return lista;
		
	}
	
	public ArrayList<Fabricante> buscarPorDescricao(Fabricante f) throws SQLException{
		StringBuilder sql = new StringBuilder();
		sql.append("SELECT codigo, descricao ");
		sql.append("FROM fabricante ");
		sql.append("WHERE descricao LIKE ? ");
		sql.append("ORDER BY descricao ASC ");
		
          Connection conexao = ConexaoFactory.conectar();
		
		PreparedStatement comando = conexao.prepareStatement(sql.toString());
		comando.setString(1, "%" + f.getDescricao() + "%");
		
         ResultSet resultado = comando.executeQuery();
		
		ArrayList<Fabricante> lista = new ArrayList<Fabricante>();
		
		while(resultado.next()){
			Fabricante item = new Fabricante();
			item.setCodigo(resultado.getLong("codigo"));
			item.setDescricao(resultado.getString("descricao"));
			
			lista.add(item);
		}
		
		return lista;
		
	}

FabricanteBean

package br.com.drogaria.bean;

import java.sql.SQLException;
import java.util.ArrayList;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.ListDataModel;

import br.com.drogaria.dao.FabricanteDAO;
import br.com.drogaria.domain.Fabricante;

@ManagedBean(name="MBFabricante")
@ViewScoped
public class FabricanteBean {
	private Fabricante fabricante;
	private ListDataModel<Fabricante> itens;
	
	public Fabricante getFabricante() {
		return fabricante;
	}

	public void setFabricante(Fabricante fabricante) {
		this.fabricante = fabricante;
	}

	public ListDataModel<Fabricante> getItens() {
		return itens;
	}

	public void setItens(ListDataModel<Fabricante> itens) {
		this.itens = itens;
	}
	@PostConstruct
	public void prepararPesquisa(){
		try{
		FabricanteDAO dao = new FabricanteDAO();
		ArrayList<Fabricante> lista = dao.listar();
		itens = new ListDataModel<Fabricante>(lista);
		}catch(SQLException ex){
			ex.printStackTrace();
		}
	}
	
	public void prepararNovo(){
	fabricante = new Fabricante();
	
	}
	public void novo(){ 
		try{
		FabricanteDAO dao = new FabricanteDAO();
		dao.salvar(fabricante);
		ArrayList<Fabricante> lista = dao.listar(); 
		itens = new ListDataModel<Fabricante>(lista);
		}catch(SQLException ex){
			ex.printStackTrace();
		}
	}
}

Fabricante

package br.com.drogaria.domain;

public class Fabricante {
	private Long codigo;
	private String descricao;

	public Long getCodigo() {
		return codigo;
	}

	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	@Override
	public String toString() {
		String saida = codigo + "----" +descricao;
		return saida;
	}

}

Fabricante.xhtml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	template="/templates/modeloSistema.xhtml">

	<ui:define name="menu">
		<ui:include src="/includes/menuPrincipal.xhtml" />
	</ui:define>

	<ui:define name="conteudo">
		<h:form>
			<p:dataTable emptyMessage="Nenhum Registro Encontrado"
				value="#{MBFabricante.itens}" var="item" paginator="true" rows="10">
				<f:facet name="header">
				   Fabricante - Listagem
				</f:facet>
				<p:column headerText="Código: " sortBy="#{item.codigo}"
					filterBy="#{item.codigo}">
					<h:outputText value="#{item.codigo}" />
				</p:column>
				<p:column headerText="Descrição: " sortBy="#{item.descricao}"
					filterBy="#{item.descricao}">
					<h:outputText value="#{item.descricao}" />
				</p:column>
				<f:facet name="footer">
				   <p:commandButton value="Novo" actionListener="#{MBFabricante.prepararNovo}" oncomplete="PF('dlgFabNovo').show();"
				   />
				</f:facet>
			</p:dataTable>
		</h:form>
		<p:dialog widgetVar="dlgFabNovo" closable="false" draggable="false"
			resizable="false" modal="true" appendTo="@(body)" header="Fabricante - Novo">
			<h:form>
				<h:panelGrid columns="2">
					<h:outputLabel value="Descrição: "/>
					<h:inputText size="30" maxlength="50" value="#{MBFabricante.fabricante.descricao}" />
				</h:panelGrid>
				<h:panelGrid columns="2">
					<p:commandButton value="Gravar" actionListener="#{MBFabricante.novo}" 
					oncomplete="PF('dlgFabNovo').hide();"/>
					<p:commandButton value="Cancelar" onclick="PF('dlgFabNovo').hide();" />
				</h:panelGrid>
				
			</h:form>
		</p:dialog>
	</ui:define>

</ui:composition>