Re: javaw застряет с embedded - и еще
Если connection закрыть в явном виде - то висеть не остается. Но в 2.0 явного закрытия коннекта не требовалось - приложение закрылось ну и коннект соответственно помер; так что разница в поведении присутствует. Будем считать это documented feature? :) Запишу себе мелом на манжетах - коннект закрывать. Кстати а если аппликуха по RuntimeException вывалится (случаи, как поручик Ржевский говаривал, разные бывают) - а кто тогда коннект закроет? Еще для уверености - закрой пожалуйста connection перед выходом из приложения. Если останется висеть - придется Влада или Димку мучить... хотя может лучше Адриано - он с Явой наиболее дружит.
Re: javaw застряет с embedded - и еще
Hi Vladimir Kozlov пишет: Если connection закрыть в явном виде - то висеть не остается. Но в 2.0 явного закрытия коннекта не требовалось - приложение закрылось ну и коннект соответственно помер; так что разница в поведении присутствует. Будем считать это documented feature? :) Запишу себе мелом на манжетах - коннект закрывать. Кстати а если аппликуха по RuntimeException вывалится (случаи, как поручик Ржевский говаривал, разные бывают) - а кто тогда коннект закроет? для этого есть try{ }finally{ } Вообще если соелдинение не закрывать то оно должно зарыться по finallize, когда GC вычищает объекты. В том дампе памяти который ты высылал есть сообщение на 142 ссылки из JNI. WBR Evgeny Putilin.
Re: javaw застряет с embedded - и еще
Hello, Evgeny! You wrote on Wed, 26 Mar 2008 13:57:20 +0300: EP ... соелдинение ... оговорка по Фрейду? :) -- Удач Alexander A. Venikov, Tobolsk, Russia
Re: javaw застряет с embedded - и еще
Я тормоз - забыл что _любой_ Throwable все равно до finally доковылять даст. для этого есть try{ }finally{ } А вот закрытие по finalize в моем случае как раз и теряется где-то... или у GC руки не доходят его зачистить или где-то в JNI кто-то бультерьерствует и не выпускает соединение из зубов :) Во всяком случае до этого мне не приходилось сталкиваться с ситуацией когда незакрытое соединение не дает аппликухе завершиться... Вообще если соелдинение не закрывать то оно должно зарыться по finallize, когда GC вычищает объекты. В том дампе памяти который ты высылал есть сообщение на 142 ссылки из JNI.
Re: javaw застряет с embedded - и еще
Вообще если соелдинение не закрывать то оно должно зарыться по finallize, когда GC вычищает объекты. В том дампе памяти который ты высылал есть сообщение на 142 ссылки из JNI. Финалайзеры при выходе из JVM не запускаются по дефолту... См. System.runFinalizersOnExit(boolean), кстати метод депрекейтнутый - правильно есть писать свои shutdown-хэндлеры. Роман
Re: javaw застряет с embedded - и еще
Если connection закрыть в явном виде - то висеть не остается. Но в 2.0 явного закрытия коннекта не требовалось - приложение закрылось ну и коннект соответственно помер; так что разница в поведении присутствует. Будем считать это documented feature? :) Ага. Незакрытый коннект есть признак кривоватости приложения. Это значит, что в некоторых случаях могут терятся данные еще некоммитнутой транзакции, что есть криво. Роман
Re: javaw застряет с embedded - и еще
-XX:-PrintConcurrentLocks Вот такое получил (в случае embedded, а при запуске в режиме локального или сетевого клиента застревающей жабы не наблюдается, приложение при выходе завершается чисто) : Я попробую у себя такой же эксперимент... но то, что при локальном клиенте приложение не зависает говорит о том, что драйвер работает нормально - там один и тот же код как для embedded, так и для локального... Что в общем-то плохо, так как надо дебаггить вместе с fbembedded в Visual Studio... а у меня на это сейчас времени нет... :( Роман
Re: javaw застряет с embedded - и еще
Vladimir Kozlov пишет: -XX:-PrintConcurrentLocks Вот такое получил (в случае embedded, а при запуске в режиме локального или сетевого клиента застревающей жабы не наблюдается, приложение при выходе завершается чисто) : c:\Projects2008\Balti\Distr\SRC_localjava -XX:-PrintConcurrentLocks -jar XD2K8BLT.jar Full thread dump Java HotSpot(TM) Client VM (10.0-b19 mixed mode, sharing): У тебя приложение заввершается по System.exit(0)? Или по завершении активных потоков? Судя по списку потоков, все потоки принадлежат Swing. Можеш сузить функциональность до консольного приложения? И на нем воспроизвести ошибку. WBR Evgeny Putilin.
Re: javaw застряет с embedded - и еще
Приложение завершается по тычку мышью в кнопку закрытия окна :) Вот собственно ободранный донельзя скелет стартового класса: public class Main extends JFrame { ... ... public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { try { UIManager.setLookAndFeel(new PlasticXPLookAndFeel()); } catch (Exception e) { System.err.println(Can't set look feel: + e); } instance = new Main(); instance.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); instance.setVisible(true); } }); } private static Main instance = null; } При сетевом коннекте жабы в висящих процессах не остается, так что вроде не должно ничего свингового ее держать... Попробую как оно в консольном приложении. У тебя приложение заввершается по System.exit(0)? Или по завершении активных потоков? Судя по списку потоков, все потоки принадлежат Swing. Можеш сузить функциональность до консольного приложения? И на нем воспроизвести ошибку.
Re: javaw застряет с embedded - и еще
В консоли та же шняга только в профиль: import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class T1 { private static Connection conn = null; public static void main(String[] args) { Properties props = new Properties(); props.put(user, SYSDBA); props.put(password, 1); props.put(sql_role_name, DBUSER); props.put(DYNAMIC_PREPARE, true); String dbURL = jdbc:firebirdsql:embedded:c:\\xd2k8blt\\xd2k8blt.fdb; try { Class.forName(org.firebirdsql.jdbc.FBDriver); conn = DriverManager.getConnection(dbURL, props); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } } По завершению процесса - имеем застрявшую жабу. пишем String dbURL = jdbc:firebirdsql:127.0.0.1:c:\\xd2k8blt\\xd2k8blt.fdb; и застрявшей жабы не имеем. Можеш сузить функциональность до консольного приложения? И на нем воспроизвести ошибку.
Re: javaw застряет с embedded - и еще
В консоли та же шняга только в профиль: ... По завершению процесса - имеем застрявшую жабу. Ну эт ваще - прям перчатку в лицо бросил :))) Попробовал у себя - все работает, даже если как и у тебя коннект не закрывать... правда fbembedded у меня 2.0, не 2.1... дома попробую с 2.1. Если у меня тоже зависнет - придется к Владу или Димке приставать, поскольку у меня нет экспериментального ФБ 2.1 в VS2005 - сам пользуюсь официальными сборками :)
Re: javaw застряет с embedded - и еще
Ты будешь смеяться, но я сейчас специально скачал fbembedded 2.0 - так вот с ним всё нормально. Ну эт ваще - прям перчатку в лицо бросил :))) Попробовал у себя - все работает, даже если как и у тебя коннект не закрывать... правда fbembedded у меня 2.0, не 2.1... дома попробую с 2.1. Если у меня тоже зависнет - придется к Владу или Димке приставать, поскольку у меня нет экспериментального ФБ 2.1 в VS2005 - сам пользуюсь официальными сборками :)
Re: javaw застряет с embedded - и еще
дабы совсем уж убедиться - в одну и ту же папку с аппликухой и драйвером попеременно распаковал несколько раз 2.0 и 2.1 - когда там 2.0 то всё ок, когда 2.1 - виснет. Попробовал из соображений шизы сделать FAT-JAR (т.е. влинковал jdbc-драйвер к себе в пузо) - то же самое. Ты будешь смеяться, но я сейчас специально скачал fbembedded 2.0 - так вот с ним всё нормально.
Re: javaw застряет с embedded - и еще
Ты будешь смеяться, но я сейчас специально скачал fbembedded 2.0 - так вот с ним всё нормально. Еще для уверености - закрой пожалуйста connection перед выходом из приложения. Если останется висеть - придется Влада или Димку мучить... хотя может лучше Адриано - он с Явой наиболее дружит. Роман
Re: javaw застряет с embedded - и еще
-XX:-PrintConcurrentLocks Вот такое получил (в случае embedded, а при запуске в режиме локального или сетевого клиента застревающей жабы не наблюдается, приложение при выходе завершается чисто) : c:\Projects2008\Balti\Distr\SRC_localjava -XX:-PrintConcurrentLocks -jar XD2K8BLT.jar Full thread dump Java HotSpot(TM) Client VM (10.0-b19 mixed mode, sharing): TimerQueue daemon prio=6 tid=0x03719800 nid=0xff8 in Object.wait() [0x03baf000..0x03bafb14] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on 0x22f3b128 (a javax.swing.TimerQueue) at javax.swing.TimerQueue.run(Unknown Source) - locked 0x22f3b128 (a javax.swing.TimerQueue) at java.lang.Thread.run(Unknown Source) DestroyJavaVM prio=6 tid=0x002a5c00 nid=0xe90 waiting on condition [0x..0x0090fd4c] java.lang.Thread.State: RUNNABLE AWT-EventQueue-0 prio=6 tid=0x02f97800 nid=0x700 in Object.wait() [0x033cf000..0x033cfc14] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on 0x22eb7830 (a java.awt.EventQueue) at java.lang.Object.wait(Object.java:485) at java.awt.EventQueue.getNextEvent(Unknown Source) - locked 0x22eb7830 (a java.awt.EventQueue) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) AWT-Windows daemon prio=6 tid=0x02f92c00 nid=0x1f8 runnable [0x0314f000..0x0314fc94] java.lang.Thread.State: RUNNABLE at sun.awt.windows.WToolkit.eventLoop(Native Method) at sun.awt.windows.WToolkit.run(Unknown Source) at java.lang.Thread.run(Unknown Source) AWT-Shutdown prio=6 tid=0x02abe400 nid=0x6cc in Object.wait() [0x030ff000..0x030ffd14] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on 0x22eb7970 (a java.lang.Object) at java.lang.Object.wait(Object.java:485) at sun.awt.AWTAutoShutdown.run(Unknown Source) - locked 0x22eb7970 (a java.lang.Object) at java.lang.Thread.run(Unknown Source) Java2D Disposer daemon prio=10 tid=0x02abd800 nid=0x688 in Object.wait() [0x030af000..0x030afd94] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on 0x22eb7a00 (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(Unknown Source) - locked 0x22eb7a00 (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(Unknown Source) at sun.java2d.Disposer.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Low Memory Detector daemon prio=6 tid=0x02aa6000 nid=0xa70 runnable [0x..0x] java.lang.Thread.State: RUNNABLE CompilerThread0 daemon prio=10 tid=0x02aa0800 nid=0xdf8 waiting on condition [0x..0x02d1f740] java.lang.Thread.State: RUNNABLE Attach Listener daemon prio=10 tid=0x02a9f800 nid=0x100 runnable [0x..0x] java.lang.Thread.State: RUNNABLE Signal Dispatcher daemon prio=10 tid=0x02a9e800 nid=0xff0 waiting on condition [0x..0x] java.lang.Thread.State: RUNNABLE Finalizer daemon prio=8 tid=0x02a5e400 nid=0xf8 in Object.wait() [0x02c2f000..0x02c2fc94] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on 0x22e769d8 (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(Unknown Source) - locked 0x22e769d8 (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(Unknown Source) at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source) Reference Handler daemon prio=10 tid=0x02a5d400 nid=0xd3c in Object.wait() [0x02bdf000..0x02bdfd14] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on 0x22e76778 (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:485) at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source) - locked 0x22e76778 (a java.lang.ref.Reference$Lock) VM Thread prio=10 tid=0x02a5c000 nid=0xdc runnable VM Periodic Task Thread prio=10 tid=0x02ab8400 nid=0xdfc waiting on condition JNI global references: 1202 Heap def new generation total 960K, used 854K [0x2297, 0x22a7, 0x22e5) eden space 896K, 88% used [0x2297, 0x22a364c8, 0x22a5) from space 64K, 96% used [0x22a5, 0x22a5f700, 0x22a6)