JPA com Toplink - Lento demais

Galeraa,
Boa tarde !

Primeiramente quero desejar a todos um Feliz 2008 e que neste ano venham as tao sonhadas certificações SUN para nós … eebaaa !!!


Seguinte…

Estou fazendo uns testes com JPA e utilizando como Provider o TopLink, conforme mostra o exemplo da ed.39 da JM …

Porém ao rodar o exemplo (main) demora muuuuuuito … ja desabilitei logs … ja fiz de tudo … e nada … a demora é absurda.
Fiz testes utilizando JSP e Servlet … tambem demoraa demais para inserir os dados no banco e olha que saõ apenas 5 campos !!!

Alguem pode me ajudar ??? Será que esse toplink ae é zuado ?!?! é melhor usar hibernate ???

Vlw Galeraa

kra… eu nao tive boa experiencia c o toplink… nd verdade, achei ele uma mer**… eu tava fazendo um projeto simples com ele, deram alguns paus, dae eu resolvi baixar o hibernate pra ver… resultado: sem nenhuma modificação no codigo tudo que eu havia feito funcionou…

isso eh minha opiniao… talvez eu tenha feito algo errado… mas… como eu testei no hibernate e funcionou, toplink nunk mais…

então cara … ta funcionando direitinho …

é teste simples mesmo que eu to fazendo …

qq eu fiz …
fiz um form simples na jsp … capturos os campos no servlet e via jpa eu faço o persist … mas isso demora cerca de 1 minuto …

se com uma coisa simples ja ta essa demora com coisas mais complexas … nao quero nem ver …

qq eu preciso pra mudar para hibernate ??

obrigado

[quote=gui_sv]então cara … ta funcionando direitinho …

é teste simples mesmo que eu to fazendo …

qq eu fiz …
fiz um form simples na jsp … capturos os campos no servlet e via jpa eu faço o persist … mas isso demora cerca de 1 minuto …

se com uma coisa simples ja ta essa demora com coisas mais complexas … nao quero nem ver …
[/quote]
vc chegou a degugar e ver se realmente a demora é no banco de dados?

[quote=gui_sv]
qq eu preciso pra mudar para hibernate ??
obrigado [/quote]
baixa o jar do hibernate e as dependencias dele.

[]´s

olha esse topico:

http://www.guj.com.br/posts/list/76802.java

Veja a log …

[TopLink Config]: 2008.01.04 03:39:13.211--ServerSession(885172)--Thread(Thread[http-8080-Processor25,5,main])--The table name for entity [class br.com.gaea.jpa.model.Group] is being defaulted to: WGROUP.
[TopLink Config]: 2008.01.04 03:39:13.477--ServerSession(885172)--Thread(Thread[http-8080-Processor25,5,main])--The table name for entity [private java.lang.Long br.com.gaea.jpa.model.Group.id] is being defaulted to: WGROUP.
[TopLink Config]: 2008.01.04 03:39:13.649--ServerSession(885172)--Thread(Thread[http-8080-Processor25,5,main])--The table name for entity [private java.lang.String br.com.gaea.jpa.model.Group.name] is being defaulted to: WGROUP.
[TopLink Config]: 2008.01.04 03:39:13.649--ServerSession(885172)--Thread(Thread[http-8080-Processor25,5,main])--The table name for entity [private java.lang.String br.com.gaea.jpa.model.Group.description] is being defaulted to: WGROUP.
[TopLink Config]: 2008.01.04 03:39:13.664--ServerSession(885172)--Thread(Thread[http-8080-Processor25,5,main])--The table name for entity [class br.com.gaea.jpa.model.User] is being defaulted to: WUSER.
[TopLink Config]: 2008.01.04 03:39:13.664--ServerSession(885172)--Thread(Thread[http-8080-Processor25,5,main])--The table name for entity [private java.lang.String br.com.gaea.jpa.model.User.id] is being defaulted to: WUSER.
[TopLink Config]: 2008.01.04 03:39:13.664--ServerSession(885172)--Thread(Thread[http-8080-Processor25,5,main])--The table name for entity [private java.lang.String br.com.gaea.jpa.model.User.firstName] is being defaulted to: WUSER.
[TopLink Config]: 2008.01.04 03:39:13.664--ServerSession(885172)--Thread(Thread[http-8080-Processor25,5,main])--The table name for entity [private java.lang.String br.com.gaea.jpa.model.User.lastName] is being defaulted to: WUSER.
[TopLink Config]: 2008.01.04 03:39:13.664--ServerSession(885172)--Thread(Thread[http-8080-Processor25,5,main])--The table name for entity [private java.lang.String br.com.gaea.jpa.model.User.login] is being defaulted to: WUSER.
[TopLink Config]: 2008.01.04 03:39:13.680--ServerSession(885172)--Thread(Thread[http-8080-Processor25,5,main])--The table name for entity [private java.lang.String br.com.gaea.jpa.model.User.password] is being defaulted to: WUSER.
[TopLink Config]: 2008.01.04 03:39:13.680--ServerSession(885172)--Thread(Thread[http-8080-Processor25,5,main])--The table name for entity [private java.lang.String br.com.gaea.jpa.model.User.email] is being defaulted to: WUSER.
[TopLink Info]: 2008.01.04 03:39:16.039--ServerSession(885172)--Thread(Thread[http-8080-Processor25,5,main])--TopLink, version: Oracle TopLink Essentials - 2006.6 (Build 060608)
[TopLink Fine]: 2008.01.04 03:39:23.055--Thread(Thread[http-8080-Processor25,5,main])--Detected Vendor platform: oracle.toplink.essentials.platform.database.oracle.OraclePlatform
[TopLink Config]: 2008.01.04 03:39:23.180--ServerSession(885172)--Connection(9521674)--Thread(Thread[http-8080-Processor25,5,main])--connecting(DatabaseLogin(
	platform=>OraclePlatform
	user name=> "cerberon"
	datasource URL=> "jdbc:oracle:thin:@192.168.0.2:1521:develop"
))
[TopLink Config]: 2008.01.04 03:39:27.961--ServerSession(885172)--Connection(3393419)--Thread(Thread[http-8080-Processor25,5,main])--Connected: jdbc:oracle:thin:@192.168.0.2:1521:develop
	User: CERBERON
	Database: Oracle  Version: Oracle9i Release 9.2.0.4.0 - Production
JServer Release 9.2.0.4.0 - Production
	Driver: Oracle JDBC driver  Version: 9.2.0.3.0
[TopLink Config]: 2008.01.04 03:39:27.961--ServerSession(885172)--Connection(24228422)--Thread(Thread[http-8080-Processor25,5,main])--connecting(DatabaseLogin(
	platform=>OraclePlatform
	user name=> "cerberon"
	datasource URL=> "jdbc:oracle:thin:@192.168.0.2:1521:develop"
))
[TopLink Config]: 2008.01.04 03:39:32.508--ServerSession(885172)--Connection(24335874)--Thread(Thread[http-8080-Processor25,5,main])--Connected: jdbc:oracle:thin:@192.168.0.2:1521:develop
	User: CERBERON
	Database: Oracle  Version: Oracle9i Release 9.2.0.4.0 - Production
JServer Release 9.2.0.4.0 - Production
	Driver: Oracle JDBC driver  Version: 9.2.0.3.0
[TopLink Config]: 2008.01.04 03:39:32.508--ServerSession(885172)--Connection(18075465)--Thread(Thread[http-8080-Processor25,5,main])--connecting(DatabaseLogin(
	platform=>OraclePlatform
	user name=> "cerberon"
	datasource URL=> "jdbc:oracle:thin:@192.168.0.2:1521:develop"
))
[TopLink Config]: 2008.01.04 03:39:37.055--ServerSession(885172)--Connection(27104945)--Thread(Thread[http-8080-Processor25,5,main])--Connected: jdbc:oracle:thin:@192.168.0.2:1521:develop
	User: CERBERON
	Database: Oracle  Version: Oracle9i Release 9.2.0.4.0 - Production
JServer Release 9.2.0.4.0 - Production
	Driver: Oracle JDBC driver  Version: 9.2.0.3.0
[TopLink Config]: 2008.01.04 03:39:37.055--ServerSession(885172)--Connection(17845671)--Thread(Thread[http-8080-Processor25,5,main])--connecting(DatabaseLogin(
	platform=>OraclePlatform
	user name=> "cerberon"
	datasource URL=> "jdbc:oracle:thin:@192.168.0.2:1521:develop"
))
[TopLink Config]: 2008.01.04 03:39:41.586--ServerSession(885172)--Connection(12277849)--Thread(Thread[http-8080-Processor25,5,main])--Connected: jdbc:oracle:thin:@192.168.0.2:1521:develop
	User: CERBERON
	Database: Oracle  Version: Oracle9i Release 9.2.0.4.0 - Production
JServer Release 9.2.0.4.0 - Production
	Driver: Oracle JDBC driver  Version: 9.2.0.3.0
[TopLink Config]: 2008.01.04 03:39:41.602--ServerSession(885172)--Connection(27611385)--Thread(Thread[http-8080-Processor25,5,main])--connecting(DatabaseLogin(
	platform=>OraclePlatform
	user name=> "cerberon"
	datasource URL=> "jdbc:oracle:thin:@192.168.0.2:1521:develop"
))
[TopLink Config]: 2008.01.04 03:39:46.133--ServerSession(885172)--Connection(1213248)--Thread(Thread[http-8080-Processor25,5,main])--Connected: jdbc:oracle:thin:@192.168.0.2:1521:develop
	User: CERBERON
	Database: Oracle  Version: Oracle9i Release 9.2.0.4.0 - Production
JServer Release 9.2.0.4.0 - Production
	Driver: Oracle JDBC driver  Version: 9.2.0.3.0
[TopLink Config]: 2008.01.04 03:39:46.149--ServerSession(885172)--Connection(23527324)--Thread(Thread[http-8080-Processor25,5,main])--connecting(DatabaseLogin(
	platform=>OraclePlatform
	user name=> "cerberon"
	datasource URL=> "jdbc:oracle:thin:@192.168.0.2:1521:develop"
))
[TopLink Config]: 2008.01.04 03:39:50.680--ServerSession(885172)--Connection(17437869)--Thread(Thread[http-8080-Processor25,5,main])--Connected: jdbc:oracle:thin:@192.168.0.2:1521:develop
	User: CERBERON
	Database: Oracle  Version: Oracle9i Release 9.2.0.4.0 - Production
JServer Release 9.2.0.4.0 - Production
	Driver: Oracle JDBC driver  Version: 9.2.0.3.0
[TopLink Config]: 2008.01.04 03:39:50.680--ServerSession(885172)--Connection(13863997)--Thread(Thread[http-8080-Processor25,5,main])--connecting(DatabaseLogin(
	platform=>OraclePlatform
	user name=> "cerberon"
	datasource URL=> "jdbc:oracle:thin:@192.168.0.2:1521:develop"
))
[TopLink Config]: 2008.01.04 03:39:55.258--ServerSession(885172)--Connection(801860)--Thread(Thread[http-8080-Processor25,5,main])--Connected: jdbc:oracle:thin:@192.168.0.2:1521:develop
	User: CERBERON
	Database: Oracle  Version: Oracle9i Release 9.2.0.4.0 - Production
JServer Release 9.2.0.4.0 - Production
	Driver: Oracle JDBC driver  Version: 9.2.0.3.0
[TopLink Info]: 2008.01.04 03:39:55.696--ServerSession(885172)--Thread(Thread[http-8080-Processor25,5,main])--file:/C:/workspace/jpa/WEB-INF/classes-cerberon login successful
ID: 44ef3744-a1a3-408d-91bc-329187d1fe18
[TopLink Fine]: 2008.01.04 03:39:56.055--ClientSession(25671167)--Connection(27104945)--Thread(Thread[http-8080-Processor25,5,main])--INSERT INTO WUSER (WUSER_ID, LAST_NAME, LOGIN, FIRST_NAME, PASSWORD, EMAIL) VALUES (?, ?, ?, ?, ?, ?)
	bind => [4c22933d-1997-4e09-8669-c82d6a154845, dasdasdas, dasdasda, sdasdasdasdasdas, sdasdasd, dasdas]
[TopLink Config]: 2008.01.04 03:39:56.164--ServerSession(885172)--Connection(3393419)--Thread(Thread[http-8080-Processor25,5,main])--disconnect
[TopLink Info]: 2008.01.04 03:39:56.164--ServerSession(885172)--Thread(Thread[http-8080-Processor25,5,main])--file:/C:/workspace/jpa/WEB-INF/classes-cerberon logout successful
[TopLink Config]: 2008.01.04 03:39:56.164--ServerSession(885172)--Connection(24335874)--Thread(Thread[http-8080-Processor25,5,main])--disconnect
[TopLink Config]: 2008.01.04 03:39:56.164--ServerSession(885172)--Connection(9521674)--Thread(Thread[http-8080-Processor25,5,main])--disconnect
[TopLink Config]: 2008.01.04 03:39:56.164--ServerSession(885172)--Connection(12277849)--Thread(Thread[http-8080-Processor25,5,main])--disconnect
[TopLink Config]: 2008.01.04 03:39:56.164--ServerSession(885172)--Connection(1213248)--Thread(Thread[http-8080-Processor25,5,main])--disconnect
[TopLink Config]: 2008.01.04 03:39:56.180--ServerSession(885172)--Connection(17437869)--Thread(Thread[http-8080-Processor25,5,main])--disconnect
[TopLink Config]: 2008.01.04 03:39:56.180--ServerSession(885172)--Connection(801860)--Thread(Thread[http-8080-Processor25,5,main])--disconnect
[TopLink Config]: 2008.01.04 03:39:56.180--ServerSession(885172)--Connection(27104945)--Thread(Thread[http-8080-Processor25,5,main])--disconnect

Pq será que ele se conecta tantas vezes com o banco ???

veja o insert é simples …INSERT INTO WUSER (WUSER_ID, LAST_NAME, LOGIN, FIRST_NAME, PASSWORD, EMAIL) VALUES (?, ?, ?, ?, ?, ?)

Vlw

poxa que estranho, com o toplink comigo funcionava legal

você já testou em outro banco? tentou mudar o escopo transacional da tua aplicação?

Obs.: cara, se você usar hibernate, se prepare, não são poucas dependencias… O toplink é só o toplink-essentials.jar + teu driver. Já o hibernate é uns 20 jars pra mais + o teu driver

Ps 2.: Eu uso Hibernate :stuck_out_tongue:

se vc der 2 inserts seguidos? demora 1 minuto para cada?

Henrik,
Nao testei com dois inserts … apenas 1 … que eh qnd clico no botao incluir !!! eheh

demora muito …

com prepared statement é rapidao …

Vlw

quando vc manda inserir a primeira vez seria normal demorar um pouco, no segundo insert era pra ficar normal.

esse monte de connect nao seria ele criando o pool?

Geralmente se usa pool para otimizar algo …

ele abre um monte de connect e no fim ele da um monte de disconnect … lusitano isso …

vou tentar mudar pra hibernate … vamos ver no que da …

henrik … vc sabe de alguma com JPA pra trabalhar com WEB e separar bem as camadas MVC .???

obrigado cara !

kra oq rola eh q no primeiro insert ele faz td a inicializacao do entity manager… dai ele faz trocentas coisas…
o hibernate da primeria vez tbm demora um pouco(nao 1min… oq eh realmente estranho msm q para o toplink)
o negocio eh vc inicializar ele e manter aberto… no seu caso, pelo q parece, ao finalizar a execucao do insert ele finaliza td…
por isso ele fecha tds as conexoes e tals…
utilize a classe abaixo para obter o seu entity manager… dae ele vai inicializar somente a primeira vez… nos inserts subsequentes ele sera mais rapido… testa com isso e diga se fez alguma diferenca…

[code]/*

  • EntityManagerUtils.java
  • Created on 4 de Novembro de 2007, 10:28
  • To change this template, choose Tools | Template Manager
  • and open the template in the editor.
    */

package br.com.empresa;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
*

  • @author Diego
    */
    public class EntityManagerUtils
    {
    private static EntityManagerFactory emf = null;

    /** Creates a new instance of EntityManagerUtils */
    private EntityManagerUtils()
    { }

    public static EntityManager getEntityManager( )
    {
    if( emf == null || !emf.isOpen( ) )
    emf = Persistence.createEntityManagerFactory( “persistenceUnit” );

     return emf.createEntityManager( );
    

    }

}[/code]

Cara, o toplink é cheio de manha mesmo… Mas acredito que o problema não está bem ae… que app server tu usa neste projeto?