Problemas com uso de interface - urgente

Bom dia
Estou iniciando o jsf,mas ao tentar gravar a informação no banco de dados, da o erro de nullpointer.
Segue abaixo meu projeto.
Classe teste
package teste;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Teste implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = 7646013794649657437L;

@Id
@GeneratedValue
private Long id;

private String nome;

public Long getId() {
	return id;
}

public void setId(Long id) {
	this.id = id;
}

public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

@Override
public int hashCode() {
	final int prime = 31;
	int result = 1;
	result = prime * result + ((id == null) ? 0 : id.hashCode());
	result = prime * result + ((nome == null) ? 0 : nome.hashCode());
	return result;
}

@Override
public boolean equals(Object obj) {
	if (this == obj)
		return true;
	if (obj == null)
		return false;
	if (getClass() != obj.getClass())
		return false;
	Teste other = (Teste) obj;
	if (id == null) {
		if (other.id != null)
			return false;
	} else if (!id.equals(other.id))
		return false;
	if (nome == null) {
		if (other.nome != null)
			return false;
	} else if (!nome.equals(other.nome))
		return false;
	return true;
}

}

Interface

package teste;

public interface TesteDAO {

public void salvar(Teste teste);

}

DAO
package teste;

import javax.persistence.EntityManager;

public class TesteDAOJPA implements TesteDAO{

private EntityManager manager;

public TesteDAOJPA(){
	this.manager = JPAUtil.getEntityManager();
}

@Override
public void salvar(Teste teste) {
	// TODO Auto-generated method stub
	this.manager.persist(teste);
	
}

}

Regra

package teste;

public class TesteRN {

private TesteDAO testeDAO;

public void salvar(Teste teste) {
	if (teste == null) {
		System.out.println("Erro");
	} else {
		this.testeDAO.salvar(teste);
	}
}

}

Factory
package teste;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class JPAUtil {

private static final EntityManagerFactory emf = Persistence
		.createEntityManagerFactory("persistencia");

public static final EntityManager getEntityManager() {
	return emf.createEntityManager();
}

public void close(){
	emf.close();
}

}

bean
package teste;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.persistence.EntityManager;

@ManagedBean
@RequestScoped
public class TesteBean {

private Teste teste = new Teste();

public void salvar() {
	// conseguimos a EntityManager
	TesteRN rn = new TesteRN();
	rn.salvar(this.teste);
}

public Teste getTeste() {
	return teste;
}

public void setTeste(Teste teste) {
	this.teste = teste;
}

}

pagina

teste

Se aguem conseguir me ajudar desde ja agradeço.

Havia esquecido desses detalhes abaixo, mas continua de erro de nullpointer
public void salvar(Teste teste) {
// TODO Auto-generated method stub
this.manager.persist(teste);
this.manager.getTransaction().begin();
this.manager.getTransaction().commit();

}

percebo que é na hora de chamar a interface

Realmente o erro ocorre nessa classe:
package teste;

public class TesteRN {

private TesteDAO testeDAO;

public void salvar(Teste teste) {
	if (teste == null) {
		System.out.println("Erro");
	} else {
		try{
			this.testeDAO.salvar(teste);
		}catch (Exception e){
			e.printStackTrace();
		}
	}
}

}

Lembrando que TesteDAO é uma interface e quem implementa ela é a TesteDAOJPA

detalhe do erro.
java.lang.NullPointerException
at teste.TesteRN.salvar(TesteRN.java:12)
at teste.TesteBean.salvar(TesteBean.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Cara pfvr usa a tag CODE pra postar os códigos, fica difícil ler assim