hibernate a createSQLQuery

2009-02-18 Tema obsahu Info
zdravim konferenciu,

pouzivam Hibernate a Spring. potrebujem vykonat jeden update nad DB mimo
klasickeho pristupu Hibernate pomocou prikazu createSQLQuery:

public void updateZdroj(final Long id) {

final HibernateCallback callback = new HibernateCallback() {
public Object doInHibernate(final Session session) throws
HibernateException {
session.beginTransaction();
int result = session.createSQLQuery(update zdroj set hodnota =
hodnota + 1 where id =  + id).executeUpdate();
session.getTransaction().commit();
return result;
}
  };
  getHibernateTemplate().execute(callback);
}

tento kod je v triede ZdrojDaoHibernate (implements ZrojDao).

skusal som aj dat
@Transactional (propagation=Propagation.REQUIRED)
public interface ZdrojDao extends GenericDaoCarrier, Long {

aj konktrentne nad funkciu updateZdroj:
@Transactional (readOnly=false)
void updateZdroj(Long id);

a skusal som aj dat parameter Hibernate:

prop key=hibernate.current_session_context_classthread/prop

bohuzial nic nepomohlo chyba je vzdy nasledovna:

org.hibernate.HibernateException: No Hibernate Session bound to thread, and
configuration does not allow creation of non-transactional one here

org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63)

org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:574)


nepoznate niekto presny postup ako pouzivat createSQLQuery?

dakujem

Ivan


Message sent using Webmail 2.7.9


Oracle DataSource z 2 web applikacii

2009-02-18 Tema obsahu Rastislav Siekel




Zdravím vospolok,

chcel by som sa spýtať, či už niekto neriešil takýto problém:
Na jednom Tomcate som si spravil kópiu web aplikácie kvôli testovaniu
novej verzie. Každá z týchto dvoch aplikácií používa OracleDataSource,
ktorý majú nastavený do rovnakej DB. Odvtedy sa niekedy aplikácia
správa ako pri dead-lock. SQL príkazy typu SELECT prejdú, ale pri
INSERT alebo disable autocommit sa zastaví vykonávanie príkazu bez
akejkoľvek chybovej hlášky. Thread, ktorý spracoval ten HTTP request je
v stave wait (v Tomcat manager console má status "service").
Debugovanie proste na tom riadku zastaví a čaká a čaká (aj niekoľko
desiatok minút).

Neriešil to už niekto?

Aplikácia beží na Tomcat-e na Linux-e, používam Hibernate a Ten
DataSource má nastavené akurát
- connectionCachingEnabled na TRUE
- implicitCachingEnabled na TRUE
Oracle driver je vo verzii 10.2.0.2.0

R.



 Ing. Rastislav Siekel 
Prosoft s.r.o., Kuzmányho 8, 010 01 Žilina, Slovakia 
E-mail : 
sie...@prosoft.sk  
Tel : 041/562 54 91 
Fax : 041/562 54 97 
Mobil : 0905 34 00 20





Hibernate many-to-one a lazy

2009-02-18 Tema obsahu jmanousek
Ahoj,

nedaří se mi donutit Hibernate 3.3.0. používat LAZY na vazbě many-to-one.
Pořád má tendenci plnit takto asociované objekty ihned, a to i do hloubky 
stromu objektů.
V diskusích je spousta podobných problémů včetně bug hib 3.1.1 a 
zprovoznění v 3.1.2 
http://forum.hibernate.org/viewtopic.php?t=954713

Myslím že problém bude někde u mě - můžete mi někdo poradit?

class name=Adresa table=ADRESA 
   ..
many-to-one name=posta column=POSTA_ID unique=false 
not-null=false/
/class

class name=Posta table=POSTA  
..
/class

Pokud provedu session.get(Adresa.class, id) - volané v Springovém 
HibernateCallback - , 
vždy se okamžitě s adresou plní i kompletní objekt Posta.
Zkoušel jsem explicitně nastavovat lazy v definici classu i v definici 
many-to-one, ale nic se nemění. 
Zkoušel jsem i změnu nastavení hibernate.max_fetch_depth, ale to má vliv 
pouze na způsob získání 
asociovaných objektů, nikoliv na hloubku stromu objektů (namísto lef-joinů 
se ihned vykoná samostatný select).
Zajímavé je, že občas se někam PROXY vloží: jakoby na to Hibernate 
používal vnitřní pravidla a neřídil se striktně předpisem lazy.

Díky za pomoc,
Jara

Re: Oracle DataSource z 2 web applikacii

2009-02-18 Tema obsahu Pavel Savara
Tipl bych to na lock v databazi. Databaze umi rict jaky lock a na cem drzi a
con na to ceka tam bych se podival. Jinak vetsinou rowlevel na problemove
tabulce pomuze.

Pavel

2009/2/18 Rastislav Siekel sie...@prosoft.sk

  Zdravím vospolok,

 chcel by som sa spýtať, či už niekto neriešil takýto problém:
 Na jednom Tomcate som si spravil kópiu web aplikácie kvôli testovaniu novej
 verzie. Každá z týchto dvoch aplikácií používa OracleDataSource, ktorý majú
 nastavený do rovnakej DB. Odvtedy sa niekedy aplikácia správa ako pri
 dead-lock. SQL príkazy typu SELECT prejdú, ale pri INSERT alebo disable
 autocommit sa zastaví vykonávanie príkazu bez akejkoľvek chybovej hlášky.
 Thread, ktorý spracoval ten HTTP request je v stave wait (v Tomcat manager
 console má status service). Debugovanie proste na tom riadku zastaví a
 čaká a čaká (aj niekoľko desiatok minút).

 Neriešil to už niekto?

 Aplikácia beží na Tomcat-e na Linux-e, používam Hibernate a Ten DataSource
 má nastavené akurát
 - connectionCachingEnabled na TRUE
 - implicitCachingEnabled na TRUE
 Oracle driver je vo verzii 10.2.0.2.0

 R.


  --
 Ing. Rastislav Siekel
 Prosoft s.r.o., Kuzmányho 8, 010 01 Žilina, Slovakia
 E-mail : sie...@prosoft.sk sie...@prosoft.sk
 Tel : 041/562 54 91
 Fax : 041/562 54 97
 Mobil : 0905 34 00 20



Jak zvetsit host language (JDBC)

2009-02-18 Tema obsahu Pavel Hora
Zdravim,

funkce v Oracle 10 DB vraci vetsi mnozstvi dat, cimz generuje chybu ORA-06513: 
PL/SQL: index for PL/SQL table out of range for host language array. Host 
language array je jakasi cache Oraclu pro reprezentaci dat  ciloveho jazyku.

Otazka je, jak tuto hodnotu zvetsit? ... googlovani se nepovedlo :)


pekny den,
Horyna



Re: Jak zvetsit host language (JDBC)

2009-02-18 Tema obsahu Richard Holly

Dobry den,
v pripade prenosu vacsieho mnozstva dat by som radsej prepracoval PL/SQL 
cast tak aby pouzivala Oracle Pipelined Table Functions.

viac info napr.
http://www.akadia.com/services/ora_pipe_functions.html



Pavel Hora  wrote / napísal(a):

Zdravim,

funkce v Oracle 10 DB vraci vetsi mnozstvi dat, cimz generuje chybu ORA-06513: 
PL/SQL: index for PL/SQL table out of range for host language array. Host 
language array je jakasi cache Oraclu pro reprezentaci dat  ciloveho jazyku.

Otazka je, jak tuto hodnotu zvetsit? ... googlovani se nepovedlo :)


pekny den,
Horyna

  





smime.p7s
Description: S/MIME Cryptographic Signature


Re: Oracle DataSource z 2 web applikacii

2009-02-18 Tema obsahu Vladimír Náprstek
Vzhledem k tomu čekání bych to spíš viděl na to, že nemáte autocommit a
po insertu ora čeká na commit. Pokud pracujete s jednou aplikací, může
se to asi snést (i když je to divné), ale u dvou už je větší
pravděpodobnost, že na sebe operace takto narazí.

Zkuste buď nastavit autocommit nebo si pohrát s transakcemi a ten commit
dávat aplikačně (podle aplikace).

-- 

s pozdravem

Vladimír Náprstek
E-mail : vladimir.naprs...@rwe.cz


 Původní zpráva 
Od: Rastislav Siekel sie...@prosoft.sk
Odpovědět-komu: Java konference@java.cz
Komu: Java konference@java.cz
Předmět: Re: Oracle DataSource z 2 web applikacii
Datum: Wed, 18 Feb 2009 14:47:36 +0100

Áno, je to lock v Oracle. To sme medzičasom zistili. Ale prečo vzniká???

Spring má nakonfigurovaný dataSource, ktorý použije OracleDataSource,
Hibernate si vezme takto vytvorený dataSource a viac sa o databázu
nestarám. Hibernate vytvára príkazy a prípadné transakcie. Kto má
uvoľniť prípadný lock? Zrejme by sa mal uvoľniť, keď Hibernate uvoľní
statement. Ale toto tam určite je.

Skúsim nastaviť nejaké time-outy pre ten OracleDataSource. Default ich
má nastavené na 0. Typický Oracle :-)

Aj tak dík,
Rastislav Bedo Siekel



Ing. Rastislav Siekel 
Prosoft s.r.o., Kuzmányho 8, 010 01 Žilina, Slovakia 
E-mail : sie...@prosoft.sk 
Tel : 041/562 54 91 
Fax : 041/562 54 97 
Mobil : 0905 34 00 20


Pavel Savara wrote: 
 Tipl bych to na lock v databazi. Databaze umi rict jaky lock a na cem
 drzi a con na to ceka tam bych se podival. Jinak vetsinou rowlevel na
 problemove tabulce pomuze.
 
 Pavel
 
 2009/2/18 Rastislav Siekel sie...@prosoft.sk
 Zdravím vospolok,
 
 chcel by som sa spýtať, či už niekto neriešil takýto problém:
 Na jednom Tomcate som si spravil kópiu web aplikácie kvôli
 testovaniu novej verzie. Každá z týchto dvoch aplikácií
 používa OracleDataSource, ktorý majú nastavený do rovnakej DB.
 Odvtedy sa niekedy aplikácia správa ako pri dead-lock. SQL
 príkazy typu SELECT prejdú, ale pri INSERT alebo disable
 autocommit sa zastaví vykonávanie príkazu bez akejkoľvek
 chybovej hlášky. Thread, ktorý spracoval ten HTTP request je v
 stave wait (v Tomcat manager console má status service).
 Debugovanie proste na tom riadku zastaví a čaká a čaká (aj
 niekoľko desiatok minút).
 
 Neriešil to už niekto?
 
 Aplikácia beží na Tomcat-e na Linux-e, používam Hibernate a
 Ten DataSource má nastavené akurát
 - connectionCachingEnabled na TRUE
 - implicitCachingEnabled na TRUE
 Oracle driver je vo verzii 10.2.0.2.0
 
 R.
 
 
 
 __
 Ing. Rastislav Siekel 
 Prosoft s.r.o., Kuzmányho 8, 010 01 Žilina, Slovakia 
 E-mail : sie...@prosoft.sk 
 Tel : 041/562 54 91 
 Fax : 041/562 54 97 
 Mobil : 0905 34 00 20 
 


Re: hibernate a createSQLQuery

2009-02-18 Tema obsahu Ivan Polák


tak si aj sam odpoviem, snad to niekomu pomoze:

treba nastavit transakcny mechanizmus pomocou AOP nasledovne:

tx:advice id=txAdvice transaction-manager=txManager
 tx:attributes
   tx:method name=get* read-only=true propagation=NEVER/
   tx:method name=find* read-only=true propagation=NEVER/
   tx:method name=save* rollback-for=Exception/
   tx:method name=update* rollback-for=Exception/
   tx:method name=delete* rollback-for=Exception/
   tx:method name=*/
 /tx:attributes
 /tx:advice

 tx:annotation-driven transaction-manager=txManager/

 aop:config
 aop:pointcut id=serviceOperation expression=execution(* 
com.*.service.impl.*..*ManagerImpl.*(..))/
 aop:advisor advice-ref=txAdvice 
pointcut-ref=serviceOperation/

 /aop:config

 bean id=txManager 
class=org.springframework.jdbc.datasource.DataSourceTransactionManager

 property name=dataSource ref=dataSource/
 /bean

Ivan

Info  wrote / napísal(a):

zdravim konferenciu,

pouzivam Hibernate a Spring. potrebujem vykonat jeden update nad DB mimo
klasickeho pristupu Hibernate pomocou prikazu createSQLQuery:

public void updateZdroj(final Long id) {

final HibernateCallback callback = new HibernateCallback() {
public Object doInHibernate(final Session session) throws
HibernateException {
session.beginTransaction();
int result = session.createSQLQuery(update zdroj set hodnota =
hodnota + 1 where id =  + id).executeUpdate();
session.getTransaction().commit();
return result;
}
  };
  getHibernateTemplate().execute(callback);
}

tento kod je v triede ZdrojDaoHibernate (implements ZrojDao).

skusal som aj dat
@Transactional (propagation=Propagation.REQUIRED)
public interface ZdrojDao extends GenericDaoCarrier, Long {

aj konktrentne nad funkciu updateZdroj:
@Transactional (readOnly=false)
void updateZdroj(Long id);

a skusal som aj dat parameter Hibernate:

prop key=hibernate.current_session_context_classthread/prop

bohuzial nic nepomohlo chyba je vzdy nasledovna:

org.hibernate.HibernateException: No Hibernate Session bound to thread, and
configuration does not allow creation of non-transactional one here

org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63)

org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:574)


nepoznate niekto presny postup ako pouzivat createSQLQuery?

dakujem

Ivan


Message sent using Webmail 2.7.9