[Resolvido] SessionBean Stateless (Problema com parametro de método)

3 respostas
U

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.

3 Respostas

Fabiano_Freitas

Tbm estou com o mesmo problema, qq dica será importante !

U

Problema resolvido, na verdade o problema não era com a passagem de valor para o método, e sim, que eu estava setando uma chave para a entidade Pessoa, da qual a classe estava definindo a chave primaria como GeneratedValue.

import javax.persistence.*;
import java.io.*;


@Entity
@Table(name="PESSOA")
public class Pessoa implements Serializable {
	@Id
	@GeneratedValue
	private int id;
public class Teste {

	public static void main(String[] args) {

		try{
                        ....
			p.setId(1);
Fabiano_Freitas

O meu era que o EntityManager não estava no Stateless…

Criado 4 de novembro de 2007
Ultima resposta 20 de nov. de 2007
Respostas 3
Participantes 2