Spring + toplink + tomcat

Pessoal estou tendo um problema em usar o toplink com o tomcat. vou postar minhas configurações espero que me ajudem pois já não sei o que fazer:
web-application.xml

<!-- Scan for annotation based controllers -->
	<context:component-scan base-package="br.com.cred" />

	<!-- Configure Apache Tiles for the view -->
	<bean id="tilesConfigurer"
		class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
		<property name="definitions">
			<list>
				<value>/WEB-INF/layouts/layouts.xml</value>
				<value>/WEB-INF/paginas/viewcapta.xml</value>
			</list>
		</property>
	</bean>

	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.UrlBasedViewResolver">
		<property name="requestContextAttribute" value="requestContext" />
		<property name="viewClass"
			value="org.springframework.web.servlet.view.tiles2.TilesView" />
	</bean>
	
	<context:load-time-weaver
		weaver-class="org.springframework.instrument.classloading.ReflectiveLoadTimeWeaver"/>
	<bean id="entityManagerFactory"
		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="persistenceUnitName" value="capta" />
		<property name="jpaVendorAdapter">
			<bean class="org.springframework.orm.jpa.vendor.TopLinkJpaVendorAdapter">
				<property name="showSql" value="true" />
				<property name="generateDdl" value="true" />
				<property name="databasePlatform"
					value="oracle.toplink.essentials.platform.database.MySQL4Platform" />
			</bean>
		</property>
	</bean>
	
	<bean id="tm" class="org.springframework.orm.jpa.JpaTransactionManager">
		<property name="entityManagerFactory" ref="entityManagerFactory" />
	</bean> 	

	<context:annotation-config />
	
</beans>

meu persistence.xml

<persistence-unit name="capta">
	<provider>oracle.toplink.essentials.PersistenceProvider</provider>
	<mapping-file>META-INF/orm.xml</mapping-file>
    <properties>    
	    <property name="toplink.jdbc.driver" value="org.gjt.mm.mysql.Driver"/>
		<property name="toplink.jdbc.url" value="jdbc:mysql://localhost/xxxxx"/>
		<property name="toplink.jdbc.user" value="xxxx"/>
		<property name="toplink.jdbc.password" value="xxxxxxxx"/>
		<property name="toplink.logging.level" value="FINE"/>
	</properties>
</persistence-unit>	

agora vou postar a parte do me DAO que quando executa gera a exceção:

TypedQuery<Cadaconv> query = em.createQuery("select c from Cadaconv c where c.logiconv=?1 and c.senhconv=?2", Cadaconv.class);

acontece o seguinte erro:

07/06/2011 00:12:42 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [dispatcherServlet] in context with path [/cred] threw exception [Handler processing failed; nested exception is java.lang.AbstractMethodError: oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerImpl.createQuery(Ljava/lang/String;Ljava/lang/Class;)Ljavax/persistence/TypedQuery;] with root cause
java.lang.AbstractMethodError: oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerImpl.createQuery(Ljava/lang/String;Ljava/lang/Class;)Ljavax/persistence/TypedQuery;
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:365)
	at $Proxy22.createQuery(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240)
	at $Proxy22.createQuery(Unknown Source)
	at br.com.cred.model.entity.login.LoginDaoImpl.getLogin(LoginDaoImpl.java:29)
	at br.com.cred.model.facade.login.LoginFacadeImpl.autenticaLogin(LoginFacadeImpl.java:34)
	at br.com.cred.controller.LoginController.getLogin(LoginController.java:64)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
	at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
	at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:380)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

Pelo que andei lendo, esse erro acontece por que ele não consegue achar minhas classes com as Anotatios @entity. Nem durmo mais direito pensandom em como vou resolveri isso
peço ajuda, se alguem passou pelo mesmo erro poderia me ajudar fazendo favor.

desde já agradeço.

att.

Olá,

O erro não está relacionado a não ter encontrado sua classe mapeada, pois se fosse isso sua aplicação nem subiria corretamente.

Verifique essa sua query, está certa? Voce está fazendo os setParameter? Tentou trocar o TypeQuery por Query?

Abraços
Daniel.

tentei trocar por isso:

Query query =  em.createQuery("select c from Cadaconv c where c.logiconv=?1 and c.senhconv=?2");

dai acontece o seguinte erro:

Exception [TOPLINK-8034] (Oracle TopLink Essentials - 2.1 (Build 60f (01/07/2009))): oracle.toplink.essentials.exceptions.EJBQLException
Exception Description: Error compiling the query [select c from Cadaconv c where c.logiconv=?1 and c.senhconv=?2]. Unknown abstract schema type [Cadaconv].

Olá,

O problema está relacionado ao schema, voce colocou alguma informação sobre o schema nessa sua Entity?

O que parece é que o schema não está definido, então sua classe está sendo vista como se fosse o nome do schema que de fato não é.

Abraços
Daniel.

como faço pra fazer isso que tu me disse tem como vc me postar um exemplo.

Desculpe minha ignorancia :oops:

Oi,

Estava dando uma olhada e no TopLink as coisas são um pouco diferentes, então como nunca mexi com ele estou tentando ajudar :slight_smile:

Achei isso : The abstract schema type of an entity class is specified in the name element of the Entity annotation and defaults to the unqualified name of the entity class,
in your case MailRevisionPersistence.

Pelo que diz ai, voce precisa definir um nome na sua Entity voce fez isso? Poste por favor o código de sua Entity.

Abraços
Daniel

minha entity está assim:

package br.com.cred.model.entity;

import java.io.Serializable;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;


/**
 * The persistent class for the cadaconv database table.
 * 
 */
@Entity(name="Cadaconv")
@Table(name="cadaconv")
public class Cadaconv implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int codiconv;

	private short alteconv;

	private short ativconv;

	@Column(name="cep_conv")
	private String cepConv;

	private String cnpjconv;

	private short comiconv;

	private String endeconv;

	private String fantconv;

	private String foneconv;

	private short imficonv;

	private short lancconv;

	private short leitconv;

	private String logiconv;

	private String mailconv;

	private short manuconv;

	private String niveconv;

	private int numeconv;

	private short parcconv;

	private double peasconv;

	private double peemconv;

	private String razaconv;

	private String respconv;

	private String senhconv;

	private String siteconv;

	private String usuaconv;

	//bi-directional many-to-one association to Cadaativ
    @ManyToOne
	@JoinColumn(name="codiativ")
	private Cadaativ cadaativ;

	//bi-directional many-to-one association to Cadabair
    @ManyToOne
	@JoinColumn(name="codibair")
	private Cadabair cadabair;

	//bi-directional many-to-one association to Cadacida
    @ManyToOne
	@JoinColumn(name="codicida")
	private Cadacida cadacida;

	//bi-directional many-to-one association to Cadaempr
	@OneToMany(mappedBy="cadaconv")
	private Set<Cadaempr> cadaemprs;

	//bi-directional many-to-one association to Cadalanc
	@OneToMany(mappedBy="cadaconv")
	private Set<Cadalanc> cadalancs;

	//bi-directional many-to-one association to Cadparcela
	@OneToMany(mappedBy="cadaconv")
	private Set<Cadparcela> cadparcelas;

    public Cadaconv() {
    }

	public int getCodiconv() {
		return this.codiconv;
	}

	public void setCodiconv(int codiconv) {
		this.codiconv = codiconv;
	}

	public short getAlteconv() {
		return this.alteconv;
	}

	public void setAlteconv(short alteconv) {
		this.alteconv = alteconv;
	}

	public short getAtivconv() {
		return this.ativconv;
	}

	public void setAtivconv(short ativconv) {
		this.ativconv = ativconv;
	}

	public String getCepConv() {
		return this.cepConv;
	}

	public void setCepConv(String cepConv) {
		this.cepConv = cepConv;
	}

	public String getCnpjconv() {
		return this.cnpjconv;
	}

	public void setCnpjconv(String cnpjconv) {
		this.cnpjconv = cnpjconv;
	}

	public short getComiconv() {
		return this.comiconv;
	}

	public void setComiconv(short comiconv) {
		this.comiconv = comiconv;
	}

	public String getEndeconv() {
		return this.endeconv;
	}

	public void setEndeconv(String endeconv) {
		this.endeconv = endeconv;
	}

	public String getFantconv() {
		return this.fantconv;
	}

	public void setFantconv(String fantconv) {
		this.fantconv = fantconv;
	}

	public String getFoneconv() {
		return this.foneconv;
	}

	public void setFoneconv(String foneconv) {
		this.foneconv = foneconv;
	}

	public short getImficonv() {
		return this.imficonv;
	}

	public void setImficonv(short imficonv) {
		this.imficonv = imficonv;
	}

	public short getLancconv() {
		return this.lancconv;
	}

	public void setLancconv(short lancconv) {
		this.lancconv = lancconv;
	}

	public short getLeitconv() {
		return this.leitconv;
	}

	public void setLeitconv(short leitconv) {
		this.leitconv = leitconv;
	}

	public String getLogiconv() {
		return this.logiconv;
	}

	public void setLogiconv(String logiconv) {
		this.logiconv = logiconv;
	}

	public String getMailconv() {
		return this.mailconv;
	}

	public void setMailconv(String mailconv) {
		this.mailconv = mailconv;
	}

	public short getManuconv() {
		return this.manuconv;
	}

	public void setManuconv(short manuconv) {
		this.manuconv = manuconv;
	}

	public String getNiveconv() {
		return this.niveconv;
	}

	public void setNiveconv(String niveconv) {
		this.niveconv = niveconv;
	}

	public int getNumeconv() {
		return this.numeconv;
	}

	public void setNumeconv(int numeconv) {
		this.numeconv = numeconv;
	}

	public short getParcconv() {
		return this.parcconv;
	}

	public void setParcconv(short parcconv) {
		this.parcconv = parcconv;
	}

	public double getPeasconv() {
		return this.peasconv;
	}

	public void setPeasconv(double peasconv) {
		this.peasconv = peasconv;
	}

	public double getPeemconv() {
		return this.peemconv;
	}

	public void setPeemconv(double peemconv) {
		this.peemconv = peemconv;
	}

	public String getRazaconv() {
		return this.razaconv;
	}

	public void setRazaconv(String razaconv) {
		this.razaconv = razaconv;
	}

	public String getRespconv() {
		return this.respconv;
	}

	public void setRespconv(String respconv) {
		this.respconv = respconv;
	}

	public String getSenhconv() {
		return this.senhconv;
	}

	public void setSenhconv(String senhconv) {
		this.senhconv = senhconv;
	}

	public String getSiteconv() {
		return this.siteconv;
	}

	public void setSiteconv(String siteconv) {
		this.siteconv = siteconv;
	}

	public String getUsuaconv() {
		return this.usuaconv;
	}

	public void setUsuaconv(String usuaconv) {
		this.usuaconv = usuaconv;
	}

	public Cadaativ getCadaativ() {
		return this.cadaativ;
	}

	public void setCadaativ(Cadaativ cadaativ) {
		this.cadaativ = cadaativ;
	}
	
	public Cadabair getCadabair() {
		return this.cadabair;
	}

	public void setCadabair(Cadabair cadabair) {
		this.cadabair = cadabair;
	}
	
	public Cadacida getCadacida() {
		return this.cadacida;
	}

	public void setCadacida(Cadacida cadacida) {
		this.cadacida = cadacida;
	}
	
	public Set<Cadaempr> getCadaemprs() {
		return this.cadaemprs;
	}

	public void setCadaemprs(Set<Cadaempr> cadaemprs) {
		this.cadaemprs = cadaemprs;
	}
	
	public Set<Cadalanc> getCadalancs() {
		return this.cadalancs;
	}

	public void setCadalancs(Set<Cadalanc> cadalancs) {
		this.cadalancs = cadalancs;
	}
	
	public Set<Cadparcela> getCadparcelas() {
		return this.cadparcelas;
	}

	public void setCadparcelas(Set<Cadparcela> cadparcelas) {
		this.cadparcelas = cadparcelas;
	}
	
}

Aparentemente seu código está certo…

Tente verificar duas coisas:

  1. Essa entity está mapeada no seu persistence.xml?
  2. Se estiver tente colocar alem do name=“algumaCoisa” o schema=“algumaCoisa” na annotation @Table de sua Entity

Abraços
Daniel.

continua dando o mesmo erro.

@Entity(name="Cadaconv")
@Table(name="cadaconv", schema="Cadaconv")
public class Cadaconv implements Serializable {
	private static final long serialVersionUID = 1L;

Olá!

Você precisa adicionar suas classes anotadas em seu persistence.xml, caso contrário o toplink não irá reconhece-la como uma entidade mapeada.

A tag para isto é:

<class>br.com.cred.model.entity.Cadaconv</class>

Seu persistence ficaria assim:

[code]
persistence-unit name=“capta”>
oracle.toplink.essentials.PersistenceProvider
META-INF/orm.xml

<class>br.com.cred.model.entity.Cadaconv</class>

<properties>      
    <property name="toplink.jdbc.driver" value="org.gjt.mm.mysql.Driver"/>  
    <property name="toplink.jdbc.url" value="jdbc:mysql://localhost/xxxxx"/>  
    <property name="toplink.jdbc.user" value="xxxx"/>  
    <property name="toplink.jdbc.password" value="xxxxxxxx"/>  
    <property name="toplink.logging.level" value="FINE"/>  
</properties>  

[/code]

Tente utilizar esta configuração com seu mapeamento anterior

@Entity(name="Cadaconv") @Table(name="cadaconv") public class Cadaconv implements Serializable {

Abraços

então pessoal o que acontece, aquele meu arquivo definido no persistence.xml com nome de orm.xml tem o mapeamento das classes @entity, engraçado é que o glasfish não precisa desses mapeamentos pois reconhece, ja rodando minha aplicação no tomcat não reconhece minhas anotações @entity e nem as outras ontem a noite tava testando e no orm.xml tenho até de descrever a primary key, mesmo que a minha entity tenha a anotação

Agora não sei dizer se é problema do TOMCAT, se é problema do SPRING com adaptador dele pro toplink, se é problema do toplink mesmo. Vou continuar testando aqui se mapeando toda minha entity no orm.xml funciona.

Mas o que eu queria realmente é que minhas @anotations fossem reconhecidas para ficar mais fácil o mapeamento das @Entity’s

Se alguem ja passou esse problema e conseguiu resolver, por favor, peço ajuda.

att.