Re: javaw застряет с embedded - и еще

2008-03-26 Пенетрантность Vladimir Kozlov


Если connection закрыть в явном виде - то висеть не остается.
Но в 2.0 явного закрытия коннекта не требовалось - приложение закрылось ну  
и коннект соответственно помер; так что разница в поведении присутствует.  
Будем считать это documented feature? :)


Запишу себе мелом на манжетах - коннект закрывать.
Кстати а если аппликуха по RuntimeException вывалится (случаи, как поручик  
Ржевский говаривал, разные бывают) - а кто тогда коннект закроет?


Еще для уверености - закрой пожалуйста connection перед выходом из  
приложения. Если останется висеть - придется Влада или Димку мучить...  
хотя может лучше Адриано - он с Явой наиболее дружит.




Re: javaw застряет с embedded - и еще

2008-03-26 Пенетрантность Evgeny Putililn


Hi Vladimir Kozlov пишет:


Если connection закрыть в явном виде - то висеть не остается.
Но в 2.0 явного закрытия коннекта не требовалось - приложение закрылось 
ну и коннект соответственно помер; так что разница в поведении 
присутствует. Будем считать это documented feature? :)


Запишу себе мелом на манжетах - коннект закрывать.
Кстати а если аппликуха по RuntimeException вывалится (случаи, как 
поручик Ржевский говаривал, разные бывают) - а кто тогда коннект закроет?

для этого есть try{
}finally{
}

Вообще если соелдинение не закрывать то оно должно зарыться по 
finallize, когда GC вычищает объекты. В том дампе памяти который ты 
высылал есть сообщение на 142 ссылки из JNI.


WBR Evgeny Putilin.



Re: javaw застряет с embedded - и еще

2008-03-26 Пенетрантность Alexander A. Venikov


Hello, Evgeny!
You wrote  on Wed, 26 Mar 2008 13:57:20 +0300:

EP ... соелдинение ...
оговорка по Фрейду? :)
--
Удач
Alexander A. Venikov, Tobolsk, Russia 





Re: javaw застряет с embedded - и еще

2008-03-26 Пенетрантность Vladimir Kozlov


Я тормоз - забыл что _любой_ Throwable все равно до finally доковылять  
даст.



для этого есть try{
}finally{
}


А вот закрытие по finalize в моем случае как раз и теряется где-то... или  
у GC руки не доходят его зачистить или где-то в JNI кто-то  
бультерьерствует и не выпускает соединение из зубов :) Во всяком случае до  
этого мне не приходилось сталкиваться с ситуацией когда незакрытое  
соединение не дает аппликухе завершиться...



Вообще если соелдинение не закрывать то оно должно зарыться по  
finallize, когда GC вычищает объекты. В том дампе памяти который ты  
высылал есть сообщение на 142 ссылки из JNI.




Re: javaw застряет с embedded - и еще

2008-03-26 Пенетрантность Roman Rokytskyy




Вообще если соелдинение не закрывать то оно должно зарыться по 
finallize, когда GC вычищает объекты. В том дампе памяти который ты 
высылал есть сообщение на 142 ссылки из JNI.


Финалайзеры при выходе из JVM не запускаются по дефолту... См. 
System.runFinalizersOnExit(boolean), кстати метод депрекейтнутый - 
правильно есть писать свои shutdown-хэндлеры.


Роман



Re: javaw застряет с embedded - и еще

2008-03-26 Пенетрантность Roman Rokytskyy



Если connection закрыть в явном виде - то висеть не остается.
Но в 2.0 явного закрытия коннекта не требовалось - приложение закрылось 
ну и коннект соответственно помер; так что разница в поведении 
присутствует. Будем считать это documented feature? :)


Ага. Незакрытый коннект есть признак кривоватости приложения. Это 
значит, что в некоторых случаях могут терятся данные еще некоммитнутой 
транзакции, что есть криво.


Роман



Re: javaw застряет с embedded - и еще

2008-03-25 Пенетрантность Roman Rokytskyy



-XX:-PrintConcurrentLocks


Вот такое получил (в случае embedded, а при запуске в режиме локального 
или сетевого клиента застревающей жабы не наблюдается, приложение при 
выходе завершается чисто) :


Я попробую у себя такой же эксперимент... но то, что при локальном 
клиенте приложение не зависает говорит о том, что драйвер работает 
нормально - там один и тот же код как для embedded, так и для локального...


Что в общем-то плохо, так как надо дебаггить вместе с fbembedded в 
Visual Studio... а у меня на это сейчас времени нет... :(


Роман



Re: javaw застряет с embedded - и еще

2008-03-25 Пенетрантность Evgeny Putililn


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 - и еще

2008-03-25 Пенетрантность Vladimir Kozlov


Приложение завершается по тычку мышью в кнопку закрытия окна :)

Вот собственно ободранный донельзя скелет стартового класса:

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 - и еще

2008-03-25 Пенетрантность Vladimir Kozlov


В консоли та же шняга только в профиль:

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 - и еще

2008-03-25 Пенетрантность Roman Rokytskyy




В консоли та же шняга только в профиль:
...
По завершению процесса - имеем застрявшую жабу.


Ну эт ваще - прям перчатку в лицо бросил :))) Попробовал у себя - все 
работает, даже если как и у тебя коннект не закрывать... правда 
fbembedded у меня 2.0, не 2.1... дома попробую с 2.1.


Если у меня тоже зависнет - придется к Владу или Димке приставать, 
поскольку у меня нет экспериментального ФБ 2.1 в VS2005 - сам 
пользуюсь официальными сборками :)




Re: javaw застряет с embedded - и еще

2008-03-25 Пенетрантность Vladimir Kozlov


Ты будешь смеяться, но я сейчас специально скачал fbembedded 2.0 - так вот  
с ним всё нормально.



Ну эт ваще - прям перчатку в лицо бросил :))) Попробовал у себя - все  
работает, даже если как и у тебя коннект не закрывать... правда  
fbembedded у меня 2.0, не 2.1... дома попробую с 2.1.


Если у меня тоже зависнет - придется к Владу или Димке приставать,  
поскольку у меня нет экспериментального ФБ 2.1 в VS2005 - сам  
пользуюсь официальными сборками :)




Re: javaw застряет с embedded - и еще

2008-03-25 Пенетрантность Vladimir Kozlov


дабы совсем уж убедиться - в одну и ту же папку с аппликухой и драйвером  
попеременно распаковал несколько раз 2.0 и 2.1 - когда там 2.0 то всё ок,  
когда 2.1 - виснет. Попробовал из соображений шизы сделать FAT-JAR (т.е.  
влинковал jdbc-драйвер к себе в пузо) - то же самое.


Ты будешь смеяться, но я сейчас специально скачал fbembedded 2.0 - так  
вот с ним всё нормально.




Re: javaw застряет с embedded - и еще

2008-03-25 Пенетрантность Roman Rokytskyy


Ты будешь смеяться, но я сейчас специально скачал fbembedded 2.0 - так 
вот с ним всё нормально.


Еще для уверености - закрой пожалуйста connection перед выходом из 
приложения. Если останется висеть - придется Влада или Димку мучить... 
хотя может лучше Адриано - он с Явой наиболее дружит.


Роман



Re: javaw застряет с embedded - и еще

2008-03-24 Пенетрантность 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):

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)