두 개의 javafx 앱과 App 및 Updater가 있습니다. 은 Firebird 데이터베이스를 사용하여 취약한 사용자 데이터를 저장합니다. 데이터베이스는 임베디드 모드에서 실행됩니다 (관련성이 있다고 생각합니다). 즉, 동시에 데이터베이스에 하나의 연결 만있을 수 있습니다 (데이터베이스는 잠금 파일을 만듭니다). 업데이터 업데이트 응용 프로그램.Java가 앱 종료시 모든 리소스를 해제하지 않습니다.
는 전체 스키마는 다음과 같습니다
- 사용자는 APP-> 앱은 그 다음이다가 (자바 ProcessBuilder를 사용) Updater를 시작하고 자신을 닫으면 업데이트가 필요한 경우 확인하고 있습니다 실행 (Platform.exit을 ()).
- 업데이터는 앱이 제대로 종료되었는지 확인합니다.
- Updater는 업데이트를 시작하기 전에 가장 중요한 작업을 내보내는 "App --export-user-data"명령 (ProcessBuilder 사용)을 실행합니다 (이 방법을 수행해야합니다.이 함수는 Updater로 이동할 수 없습니다).
- 앱은 먼저 session.beginTransaction()에 동결 - 단 하나의 오류 또는 예외가 없다
지금까지 관찰 무엇 :
- 나는 응용 프로그램을 시작하고 [눌러 X를 닫을 때 ] "C : \ ProgramData \ firebird"의 잠금 파일은 모두 제거되지만 App 이 Updater를 시작하고 자신을 닫으면 잠금 파일은 변경되지 않습니다. 나는 그것이 Hibernate가 트랜잭션을 시작할 수없는 이유라고 생각한다. 앱이 Updater를 시작하는 경우에만 때문에 문제가 나타납니다 -
- 업데이터의 과정이 앱의 하위 프로세스 아닌 내가 직접이 마법처럼 작동 Updater를 시작하면
- 가 (나는이 사용하는 프로세스 모니터를 확인).
것들 내가 수행 할 수 없습니다
- 스위치 데이터베이스를 무엇에 - 그것은
- 이동 내보내기 기능이 나는 greatful 것
을 Updater의 파이어 버드 임베디드 수있다 이 문제를 해결하기 위해 4 일을 보냈기 때문에 이상한 아이디어를 얻었습니다.
편집 : 파이어 버드 버전 : 2.1 Jaybird 버전 : 2.1.6
방법의 업데이터가 시작 (만 필요한 일)
public void startUpdater(){
ProcessBuilder pb = new ProcessBuilder(updaterPath, argument)
pb.start();
Platform.exit();
}
이 코드를 재현하는 데 필요한 최소 코드를 보여주십시오. 또한 파이어 버드 임베디드 버전과 사용중인 제이 버드 버전을 포함하십시오. –
코드를 보지 않고 exit()를 호출하는 대신 앱을 정상적으로 종료해야합니다. – Henry
나에게 속한 것이 아니기 때문에 소스 코드를 게시 할 수는 없지만 약간의 sinippets을 제공하려고 노력할 것입니다. 나는 또한 파이어 버드에 대한 더 많은 정보를 제공 할 것이다. – straw