Exercicio apostila FJ31 - Implementação de um listener

Pessoal estou tentando implementar um Listener para meu EntityBean Livro
e esta me aparecendo o seguinte erro no console;

WARN: Unsupported message received with header 0xffffffff Exception in thread "main" java.lang.IllegalStateException: No EJB receiver available for handling [appName:fj31-loja-ear,modulename:fj31-loja-ejb3,distinctname:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@1e22ab57 at org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:584) at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:119) at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:181) at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:136) at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:121) at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:104) at $Proxy0.salva(Unknown Source) at br.com.caelum.loja.client.gerenciado.ClienteGerenciador.main(ClienteGerenciador.java:29)

eis meu entity bean:

[code]package br.com.caelum.loja.entity;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import br.com.caelum.loja.listeners.LivroListener;

@Entity
@EntityListeners(LivroListener.class)
public class Livro implements Serializable {

/**
 * representação da entidade livro do banco de dados
 */
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private  String nome;
private double preco;

public Long getId() {
	return id;
}
public void setId(Long id) {
	this.id = id;
}
public static long getSerialversionuid() {
	return serialVersionUID;
}

public void setNome(String nome) {
	this.nome = nome;
}
public String getNome() {
	return nome;
}
public void setPreco(double preco) {
	this.preco = preco;
}
public double getPreco() {
	return preco;
}

@Override
public String toString() {
	// TODO Auto-generated method stub
	return "Livro "+getNome();
}

}
[/code]

meu Listener:

[code]package br.com.caelum.loja.listeners;

import java.util.Date;

import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

public class LivroListener {

@Temporal(TemporalType.TIMESTAMP)
private Date dataAlteracao;

public Date getDataAlteracao() {
	return dataAlteracao;
}
public void setDataAlteracao(Date dataAlteracao) {
	this.dataAlteracao = dataAlteracao;
}


@PreUpdate
public void preAltera(){
	System.out.println("Atualizando a data do Livro");
	this.setDataAlteracao(new Date());
}	

@PrePersist
public void prePersist(Object obj){
	System.out.println("Avisa o bibliotecário que existe um novo Livro "+obj);
}

}
[/code]

e classe que faz a invocacao ( meu cliente)

[code]package br.com.caelum.loja.client.gerenciado;

import javax.naming.InitialContext;
import javax.naming.NamingException;

import br.com.caelum.loja.entity.Livro;
import br.com.caelum.loja.session.GerenciadorLoja;

public class ClienteGerenciador {

/**
 * @param args
 * @throws NamingException 
 */
public static void main(String[] args) throws NamingException {
	InitialContext ic = new InitialContext();
	
	GerenciadorLoja gerenciador = (GerenciadorLoja) ic.lookup
			("ejb:fj31-loja-ear/fj31-loja-ejb3/GerenciadorLojaBean!br.com.caelum.loja.session.GerenciadorLoja"); 

// GerenciadorLoja gerenciador = (GerenciadorLoja)ctx.lookup(“fj31-loja-ear/GerenciadorLojaBean/remote”);

	Livro livro;
	for (int i = 0; i < 3; i++) {
		livro = new Livro();
		livro.setNome("Livros educacionais de GEOGRAFIA ed: "+i);
		
		double valor = 5.00+i*2;
		livro.setPreco(valor);
		gerenciador.salva(livro);
		System.out.println("Livro salvo na base de dados. Nome:"+livro.getNome());
	}
	
	

}

}
[/code]

alguem poderia me ajudar me mostrando onde que estou errando?
Obrigado pessoal