Ao colocar ajax no xhtm (JSF) minha aplicação deixa de funcionar

Minha aplicação teste funcionava normalmente até colocar ajax no projeto
<h:outputScript name=“jsf.js” library=“javax.faces” target=“head”></h:outputScript>
<f:ajax render=":formulario2"></f:ajax>
depois de colocar essas linhas não mais alcança o Bean, não executa as ações de exibir ou alterar

<?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">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Tela de cadastro de produto</title>
</head>

<body>
	<h:form>
		<h2>
			<h:outputText value="Novo Produto"
				rendered="#{empty produtoBean.produto.id }" />
			<h:outputText value="Editar Produto"
				rendered="#{not empty produtoBean.produto.id}" />
		</h2>
		<h:panelGrid columns="2">
			<h:outputLabel value="Nome:" for="nome" />
			<h:inputText id="nome" value="#{produtoBean.produto.nome}" />

			<h:outputLabel value="Descrição:" for="descricao" />
			<h:inputText id="descricao" value="#{produtoBean.produto.descricao}" />

			<h:outputLabel value="Preço:" for="preco" />
			<h:inputText id="preco" value="#{produtoBean.produto.preco}" />

			<h:commandButton value="gravar" action="#{produtoBean.grava}" />
		</h:panelGrid>
	</h:form>

	<h:form id="formulario2">
		<h:outputScript name="jsf.js" library="javax.faces" target="head"></h:outputScript>
		<h:dataTable value="#{produtoBean.produtos}" var="produto">
			<h:column>
				<f:facet name="header">NOME</f:facet>
			#{produto.nome}
		</h:column>
			<h:column>
				<f:facet name="header">DESCRICAO</f:facet>
			#{produto.descricao}
		</h:column>
			<h:column>
				<f:facet name="header">PRECO</f:facet>
			#{produto.preco}
		</h:column>
			<h:column>
					<f:facet name="header">AÇÕES</f:facet>
					<h:commandLink action="#{produtoBean.remove(produto)}"
						value="Remover">
                                         <f:ajax render=":formulario2"></f:ajax>
					</h:commandLink>
					<h:commandLink value="Alterar">
						<f:setPropertyActionListener target="#{produtoBean.produto}"
							value="#{produto}" />
					</h:commandLink>
			</h:column>
		</h:dataTable>
	</h:form>
</body>
</html>

Bean:

package gov.goias.gra.controle;

import java.util.LinkedList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ViewScoped
@ManagedBean
public class ProdutoBean {
	private Produto produto = new Produto();
	// Verificar. Ao usar Set(TreeSet, linkedHashSet) não funcionou, porém ao
	// mudar para lista o codigo funciona normalmente...
	private List<Produto> produtos = new LinkedList<Produto>();

	public ProdutoBean() {
		for (int x = 0; x < 5; x++) {
			String y = geraNumeroAleatorio();
			produto.setDescricao("Descricao do produto é " + y);
			produto.setNome("Nome do produto é " + y);
			produto.setPreco(Double.valueOf(y));
			produto.setId(y);
			produtos.add(produto);

			this.produto = new Produto();
		}

	}

	public void setProdutos(List<Produto> produtos) {
		this.produtos = produtos;
	}

	public List<Produto> getProdutos() {
		if (produto == null)
			for (int x = 0; x < 20; x++) {
				String y = geraNumeroAleatorio();
				produto.setDescricao("Descricao do produto é " + y);
				produto.setNome("Nome do produto é " + y);
				produto.setPreco(Double.valueOf(y));
				produto.setId(y);
				produtos.add(produto);
			}

		return produtos;
	}

	// simula gravação no banco
	public void grava() {
		produtos.add(produto);
		this.produto = new Produto();
	}

	// simula atualização do banco
	public void atualiza(Produto produto) {
		produtos.add(produto);
	}

	// só remove da lista
	public void remove(Produto produto) {
		produtos.remove(produto);
	}

	public String geraNumeroAleatorio() {
		return String.valueOf((int) (1 + Math.random() * 10));
	}

	public Produto getProduto() {
		return produto;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

}

Substitua em todos os commandButton e commandLink o atributo action pelo actionListener

Testei, substituindo action pelo actionListener mas não funcionou. Continuou a mesma coisa

Debugou? Verificou se há erros na requisição?

Sim, fiz o debug. Ele só entra no metodo getProdutos, o que dá acesso a tela de remoção, a partir dali os links remover ou alterar não disparam ações no ManagedBean.

E debug da página, fez? Identificou erros na chamada http?
Alias, que versão de JSF você está usando, que exige que você coloque esta linha de código

  <h:outputScript name="jsf.js" library="javax.faces" target="head"></h:outputScript>  

Problema resolvido!!!

Respondendo sua última pergunta, estou usando jsf2.0 e uso essa anotação de ajax só para aprendizado mesmo.

Solução:
O problema estava nas tags html:

e o correto é e

drsmachado, valeu pela disponibilidade!