hibernate a createSQLQuery
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
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
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
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)
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)
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
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
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