2015-04-22 1 views
5

Sto sviluppando un'applicazione Spring che utilizza Spring Data. Stiamo lavorando su Eclipse Luna (4.4.0) e stiamo utilizzando Java 8 update 20 (lo stesso problema si verifica nelle versioni più avanzate).Java VM si arresta in modo anomalo in Mac OS X all'avvio del livello di persistenza Spring

Quando si avvia l'applicazione da Eclipse in Windows, funziona correttamente. In Mac OS X verifica il seguente errore:

2015-04-22 14:26:27.492 INFO 5363 --- [   main] o.s.j.d.DriverManagerDataSource   : Loaded JDBC driver: com.mysql.jdbc.Driver 
2015-04-22 14:26:27.590 INFO 5363 --- [   main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'jpaPersistenceUnit' 
2015-04-22 14:26:28.715 INFO 5363 --- [   main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'jpaPersistenceUnit' 
# 
# A fatal error has been detected by the Java Runtime Environment: 
# 
# SIGSEGV (0xb) at pc=0x00007fff890330dd, pid=5363, tid=30215 
# 
# JRE version: Java(TM) SE Runtime Environment (8.0_20-b26) (build 1.8.0_20-b26) 
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.20-b23 mixed mode bsd-amd64 compressed oops) 
# Problematic frame: 
# C [libobjc.A.dylib+0x10dd] objc_msgSend+0x1d 

Come si può vedere l'errore si verifica durante l'inizializzazione la connessione al database a mysql. Quel database è in esecuzione.

Qualche idea generale su come risolvere questo problema? So che è un modo per chiederglielo in questo modo, ma per favore fammi sapere se ulteriori informazioni potrebbero aiutarti. Forse ci sono situazioni ben note in cui ciò può accadere.

UPDATE:

contenuto del log degli errori:

Pastebin: hs_err_pid5336.log

+1

Si ottiene un file hs_err nella CWD del processo java? Se è così, per favore pubblica i contenuti. –

+0

Certo, ho aggiunto un collegamento al registro sopra. – titusn

risposta

1

Ho riscontrato questo problema esatto quando si tenta di incorporare una libreria con una dipendenza JavaFX in un ambiente privo di headless. Inizialmente avevo creato un wrapper di avvio JavaFX usando un contenitore Swing. Questa configurazione ha causato l'arresto anomalo della JVM con il suddetto crash dump.

Ho trovato questa soluzione: https://stackoverflow.com/a/25969138/2633009. L'idea è quella di rimuovere l'involucro swing e lanciare l'ambiente JavaFX utilizzando il seguente codice:

import javafx.application.Application; 
import javafx.stage.Stage; 

public class JavaFXInitializer extends Application { 

    private static Object barrier = new Object(); 

    @Override 
    public void start(final Stage primaryStage) throws Exception { 
     synchronized (barrier) { 
      barrier.notify(); 
     } 
    } 

    public static void initialize() throws InterruptedException { 
     Thread t = new Thread("JavaFX Init Thread") { 
      @Override 
      public void run() { 
       Application.launch(JavaFXInitializer.class, new String[0]); 
      } 
     }; 
     t.setDaemon(true); 
     t.start(); 
     synchronized (barrier) { 
      barrier.wait(); 
     } 
    } 
} 

che viene poi chiamato nel ricorso principale al momento del boot utilizzando:

try { 
    JavaFXInitializer.initialize(); 
} catch (InterruptedException e) { 
    // Failed to initialise JavaFX 
    e.printStackTrace(); 
} 

La mia applicazione primavera corre ora liscio su entrambi OSX e Windows.

1

Sembra relative a un certo roba grafica sul Mac se si seleziona la traccia dello stack nativo nel file hs_err. Questa domanda: How to disable or bypass Hardware Graphics Acceleration(Prism) in JavaFX descrive lo stesso crash. Il consiglio è di eseguire jvm con -Dprism.order=j2d o -Dprism.order=sw. Provalo!

+0

Era collegato a javaFX come si può vedere nella risposta sopra, ma si è verificato un problema diverso. – titusn