Ajuda EJB

8 respostas
C

[i]Galera é o seguinte, estou seguindo um tutorial da apostila da K19 sobre desenvolvimento web com jsf 2 + ejb 3.1 e cdi …

O logo na persistencia ja encontrei dificuldades.

Vamos la.

Tenho essa entidade :[/i]

@Entity
@Table(name = "PRODUTO")
public class Produto {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long idProduto;

	private String nome;

	private double preco;

        // gets e sets omitidos

Esse repositorio :

@Stateless
public class ProdutoRepositorio {
	
	@PersistenceContext
	private EntityManager entityManager;

	@Resource
	private SessionContext sessionContext;

	public void adiciona(Produto produto) {
		this.entityManager.persist(produto);

		if (produto.getPreco() <= 0) {
			this.sessionContext.setRollbackOnly();
		}
	}

E este ManagedBean :

@ManagedBean
public class ProdutoMB {
	
	@EJB
	private ProdutoRepositorio produtoRepositorio;

	private Produto produto = new Produto();
	private List<Produto> produtosCache = new ArrayList<Produto>();

	public void adiciona() {
		this.produtoRepositorio.adiciona(this.produto);
		this.produto = new Produto();
		this.produtosCache = null;
	}

E este persistence.xml :

<persistence-unit name="k22" transaction-type="JTA">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<jta-data-source>jdbc/K19</jta-data-source>

		<properties>
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.format_sql" value="true" />

			<property name="hibernate.hbm2ddl.auto" value="update" />

			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
		</properties>
	</persistence-unit>

O problema é o seguinte, quando eu tento persistir o produto, recebo a exception EJBException.
Vi no log do servidor, e aparece isto:

sessionbeans.ProdutoRepositorio.adiciona(entidades.Produto)
javax.ejb.EJBException
	at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5119)
	at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5017)
	at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4805)
	at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2004)
	at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1955)
	at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:198)
	at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:84)
	at $Proxy109.adiciona(Unknown Source)
	at sessionbeans.__EJB31_Generated__ProdutoRepositorio__Intf____Bean__.adiciona(Unknown Source)
	at managedbeans.ProdutoMB.adiciona(ProdutoMB.java:20)
...

8 Respostas

maior_abandonado

debugando… a instancia do ejb no managed bean está preenchida certinha?

e a do entity manager no ejb?

na apostila o ejb não implementava nenhuma interface com um @Local por exemplo?

C

maior_abandonado:
debugando… a instancia do ejb no managed bean está preenchida certinha?

e a do entity manager no ejb?

na apostila o ejb não implementava nenhuma interface com um @Local por exemplo?

[i]Na apostila não fala pra criar nenhuma interface, apenas os sessionsbeans, managedbeans e os repositorios.
Não falam nada sobre essa exception que gera.

Não sei…

Tem alguma ideia do que possa ser?[/i]

EDIT

Quando tento debuggar o projeto, aparece a mensagem :

Source not found

E em baixo aparece um botão escrito Edit Source Lookup Path…

gabbardo

c0nf1ck:
EDIT

Quando tento debuggar o projeto, aparece a mensagem :

Source not found

E em baixo aparece um botão escrito Edit Source Lookup Path…


Basta clicar nesse botão Edit Source Lookup Path… e selecionar o projeto com o teu código.
Ai vai aparecer e tu vai poder debuggar e saber onde está dando erro.

C

gabbardo:
c0nf1ck:
EDIT

Quando tento debuggar o projeto, aparece a mensagem :

Source not found

E em baixo aparece um botão escrito Edit Source Lookup Path…


Basta clicar nesse botão Edit Source Lookup Path… e selecionar o projeto com o teu código.
Ai vai aparecer e tu vai poder debuggar e saber onde está dando erro.


Ja havia tentado fazer isso, porém da a mesma mensagem. Source not found …

maior_abandonado

c0nf1ck:
maior_abandonado:
debugando… a instancia do ejb no managed bean está preenchida certinha?

e a do entity manager no ejb?

na apostila o ejb não implementava nenhuma interface com um @Local por exemplo?

[i]Na apostila não fala pra criar nenhuma interface, apenas os sessionsbeans, managedbeans e os repositorios.
Não falam nada sobre essa exception que gera.

Não sei…

Tem alguma ideia do que possa ser?[/i]

EDIT

Quando tento debuggar o projeto, aparece a mensagem :

Source not found

E em baixo aparece um botão escrito Edit Source Lookup Path…

então cara… então eu não vou saber te responder, com o ejb 3.0 você teria a interface, o seu session bean implementando essa interface e a instancia injetada no managed bean seria do tipo da interface não da implementação mesmo… No 3.1 eu lembro de ter lido que precisa fazer menos coisa mas não lembro certinho o que, então não vou saber te ajudar…

gabbardo

c0nf1ck:
Ja havia tentado fazer isso, porém da a mesma mensagem. Source not found …
[/i]

Estranho… a classe “ProdutoMB.java” não é do teu projeto? Se tu colocar um breakpoint nessa classe e o debuger parar nela e não tiver o source, basta mapear o teu projeto usando esse botão Edit Source Lookup Path….
Agora se o sistema deu pau em alguma classe fora to teu projeto, ai tu vai precisar o source dessa classe.

Mas olhando melhor teu persistence.xml, tenta isso aqui:

&lt;persistence-unit name="k22" transaction-type="JTA"&gt;  
        &lt;provider&gt;org.hibernate.ejb.HibernatePersistence&lt;/provider&gt;  
        &lt;jta-data-source&gt;jdbc/K19&lt;/jta-data-source&gt;  
  
        &lt;class&gt;com.PACKAGE_DA_CLASSE.Produto&lt;/class&gt;

        &lt;properties&gt;  
            &lt;property name="hibernate.show_sql" value="true" /&gt;  
            &lt;property name="hibernate.format_sql" value="true" /&gt;  
  
            &lt;property name="hibernate.hbm2ddl.auto" value="update" /&gt;  
  
            &lt;property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /&gt;  
        &lt;/properties&gt;  
&lt;/persistence-unit&gt;
C

gabbardo:
c0nf1ck:
Ja havia tentado fazer isso, porém da a mesma mensagem. Source not found …
[/i]

Estranho… a classe “ProdutoMB.java” não é do teu projeto? Se tu colocar um breakpoint nessa classe e o debuger parar nela e não tiver o source, basta mapear o teu projeto usando esse botão Edit Source Lookup Path….
Agora se o sistema deu pau em alguma classe fora to teu projeto, ai tu vai precisar o source dessa classe.

Mas olhando melhor teu persistence.xml, tenta isso aqui:

&lt;persistence-unit name="k22" transaction-type="JTA"&gt;  
        &lt;provider&gt;org.hibernate.ejb.HibernatePersistence&lt;/provider&gt;  
        &lt;jta-data-source&gt;jdbc/K19&lt;/jta-data-source&gt;  
  
        &lt;class&gt;com.PACKAGE_DA_CLASSE.Produto&lt;/class&gt;

        &lt;properties&gt;  
            &lt;property name="hibernate.show_sql" value="true" /&gt;  
            &lt;property name="hibernate.format_sql" value="true" /&gt;  
  
            &lt;property name="hibernate.hbm2ddl.auto" value="update" /&gt;  
  
            &lt;property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /&gt;  
        &lt;/properties&gt;  
&lt;/persistence-unit&gt;

É do meu projeto sim…
testei tbm o negocio do persistence, mais n deu tbm.

vo da uma olhada aqui no que posso fazer.
tenta refazer e etc.

Vlw pra qm ajudo

darkan666

eu estou com um erro igual… só que a minha estrutura é um pouco diferente…

após o “repositório” eu ainda tenho classes DAO
uso as classes repositório apenas para validar oque retorna do DAO…

pelos debugs que eu coloquei na classe… ela da erro na hora que
o “repositório” tenta executar o DAO, mas não chega a executar o conteudo do mesmo (DAO).

eu estou em duvida, se falta alguma anotação, ou algo do tipo…

alguma sugestão?

Criado 4 de outubro de 2011
Ultima resposta 13 de dez. de 2011
Respostas 8
Participantes 4