Boa tarde, estou fazendo alguns testes com Beans, e estou utilizando o JBoss da versão 4.2.2.GA.
O class path do JAVA_HOME foi definido para o JDK versão 1.5, e o Eclipse definido com o JRE 1.5, porém ao acessar o metodo do session bean passando para o metodo um objeto da entidade Pessoa (que implementa Serializable), ocorre as seguintes exceções:
Pesquisei e verifiquei que poderia ser um problema de compatibilidade da versão do JBoss com o JDK 1.6, então mudei para a versão 1.5, porém o problema continua, e o objeto que envio está serializado, não sei o que está acontecendo, agradeceria se alguem pudesse me ajudar, ou me sugerir outra alternativa.
Obrigado,
[]s
Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
at $Proxy0.cadastrar(Unknown Source)
at Teste.main(Teste.java:20)
Caused by: java.lang.ClassNotFoundException: javax.persistence.PersistenceException
at org.jboss.remoting.serialization.ClassLoaderUtility.loadClass(ClassLoaderUtility.java:82)
at org.jboss.remoting.loading.RemotingClassLoader.loadClass(RemotingClassLoader.java:76)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.jboss.remoting.loading.ObjectInputStreamWithClassLoader.resolveClass(ObjectInputStreamWithClassLoader.java:174)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObjectVersion2_2(JavaSerializationManager.java:239)
at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObject(JavaSerializationManager.java:133)
at org.jboss.remoting.marshal.serializable.SerializableUnMarshaller.read(SerializableUnMarshaller.java:120)
at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.versionedRead(MicroSocketClientInvoker.java:957)
at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:586)
at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:122)
at org.jboss.remoting.Client.invoke(Client.java:1634)
at org.jboss.remoting.Client.invoke(Client.java:548)
at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:62)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107)
at $Proxy0.cadastrar(Unknown Source)
at Teste.main(Teste.java:20)
at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:74)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107)
... 2 more
Abaixo os fontes:
A classe que executa os serviços do Stateless
import com.estudo.*;
import javax.naming.NamingException;
import javax.naming.*;
import java.util.*;
import javax.rmi.*;
public class Teste {
public static void main(String[] args) {
try{
Context context = getInitialContext();
Object ref = context.lookup("PessoaDAO/remote");
PessoaDAORemote dao = (PessoaDAORemote) PortableRemoteObject.narrow(ref, PessoaDAORemote.class);
Pessoa p = new Pessoa();
p.setId(1);
p.setNome("teste nome");
p.setSobrenome("teste Sobrenome");
dao.cadastrar(p);
Pessoa p2 = dao.pesquisar(1);
System.out.println(p2.getId() + " " + p2.getNome()
+ " " + p2.getSobrenome());
System.out.println(dao.teste());
}
catch(NamingException ex){
System.out.println("Erro");
}
}
public static Context getInitialContext() throws
NamingException{
try{
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
p.put(Context.URL_PKG_PREFIXES,
"org.jboss.naming:org.jnp.interfaces");
p.put(Context.PROVIDER_URL,
"jnp://localhost:1099");
return new InitialContext(p);
}
catch(NamingException ex){
System.out.println("erro no initialcontext");
}
return null;
}
}
As classe Beans desenvolvidas:
package com.estudo;
import javax.persistence.*;
import java.io.*;
@Entity
@Table(name="PESSOA")
public class Pessoa implements Serializable {
@Id
@GeneratedValue
private int id;
private String nome;
private String sobrenome;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSobrenome() {
return sobrenome;
}
public void setSobrenome(String sobrenome) {
this.sobrenome = sobrenome;
}
}
package com.estudo;
import javax.ejb.Remote;
@Remote
public interface PessoaDAORemote{
public Pessoa pesquisar(int id);
public void cadastrar(Pessoa p);
public String teste();
}
package com.estudo;
import javax.ejb.Stateless;
import javax.persistence.*;
@Stateless
public class PessoaDAO implements PessoaDAORemote {
@PersistenceContext(unitName="unidade")
private EntityManager manager;
public void cadastrar(Pessoa p) {
manager.persist(p);
}
public Pessoa pesquisar(int id) {
Pessoa p = manager.find(Pessoa.class, id);
return p;
}
public String teste(){
return "teste 123";
}
}
Arquivos de configuração:
jboss.xml
<?xml version="1.0" encoding="UTF-8"?>
<jboss>
<enterprise-beans>
<session>
<ejb-name>com.estudo.PessoaDAO</ejb-name>
<jndi-name>PessoaDAO/remote</jndi-name>
</session>
</enterprise-beans>
</jboss>
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- example of a default persistence.xml -->
<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="unidade">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/MySqlDS</jta-data-source>
<class>com.estudo.Pessoa</class>
<class>com.estudo.PessoaDAO</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
ps: Qaundo eu comento a parte em que o objeto dao utiliza a entidade, e deixo apenas a chamada System.out.println(dao.teste());, ele funciona normalmente, creio que o problema seja na passagem do objeto no método.