Boa noite,
Estou estudando EJB pelo livro Enterprise JavaBeans 3.0; e estou com um problema para executar o primeiro exemplo do livro.
Sempre que tento acessar minha interface remota pelo meu cliente java (standalone) recebo a seguinte exceção:
javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
Estou testanto dento do mesmo projeto EJB, só criei uma classe java com o método main. Alguém já passou por esse erro? Alguém sabe como me ajudar?
Pesquisei em vários sits, mas só acho o problema, e nunca a solução. Segue abaixo os códigos do simples exemplo, e desde já, agradeço a todos!
persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="titan" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/MySQLDS</jta-data-source>
<properties>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="false" />
<property name="hibernate.hbm2ddl.auto" value="update" /> <!-- create-drop -->
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
</properties>
</persistence-unit>
</persistence>
Interface remota:
@Remote
public interface TravelAgenteRemote {
public Cabin consultarCabinPorId(Cabin cabin);
public void inserirCabin(Cabin cabin);
}
EJBImp:
package br.com.titan.ejb;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import br.com.titan.domain.Cabin;
@Stateless
public class TravelAgenteEJB implements TravelAgenteRemote {
@PersistenceContext(unitName="titan")
private EntityManager entityManager;
@Override
public Cabin consultarCabinPorId(Cabin cabin) {
return entityManager.find(Cabin.class, cabin.getId());
}
@Override
public void inserirCabin(Cabin cabin) {
entityManager.persist(cabin);
}
}
Entity:
package br.com.titan.domain;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="CABIN")
public class Cabin implements Serializable {
private static final long serialVersionUID = -6400678160591138550L;
@Id
@Column(name="ID_CABIN")
private Long id;
@Column(name="NOME_CABIN")
private String nome;
public Cabin(Long id, String nome) {
this.id = id;
this.nome = nome;
}
public Cabin(Long id) {
this.id = id;
}
public Cabin() { }
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;
}
}
E finalmente o cliente:
package br.com.titan.cliente;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
import br.com.titan.domain.Cabin;
import br.com.titan.ejb.TravelAgenteRemote;
public class Cliente {
public static void main(String[] args) {
try {
Context jndiContext = getInitialContext();
Object ref = jndiContext.lookup("TravelAgenteEJB/remote");
TravelAgenteRemote travelAgenteRemote = (TravelAgenteRemote) PortableRemoteObject.narrow(ref, TravelAgenteRemote.class);
Cabin cabin = new Cabin(1L, "Teste");
travelAgenteRemote.inserirCabin(cabin);
Cabin cabinPorId = travelAgenteRemote.consultarCabinPorId(new Cabin(1L));
System.out.println(cabinPorId.getId());
System.out.println(cabinPorId.getNome());
} catch (NamingException e) {
e.printStackTrace();
}
}
private static Context getInitialContext() throws NamingException {
Properties propriedade = new Properties();
//org.jnp.interfaces.NamingContextFactory
propriedade.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
propriedade.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
propriedade.put(Context.PROVIDER_URL, "jnp://localhost:1099");
return new InitialContext(propriedade);
}
}