Pregunta

Hola chicos, puedo conectar Derby a través de Eclipse Database Development, pero no puedo conectar Derby con la misma URL que Eclipse Database Development a través de Hibernate.Error: "Causado por:java.sql.SQLExcepción:Es posible que otra instancia de Derby ya haya iniciado la base de datos "

¿Fue útil?

Solución

Acabo de terminar un proyecto que hizo esto, usando Derby con Hibernate, hace un par de días.(Con Derby ejecutándose en la misma JVM).

Según tengo entendido, cuando utiliza el controlador integrado, de forma predeterminada inicia la instancia de la base de datos como parte del controlador y, mientras mantenga la conexión, la base de datos se ejecutará.Pero para Hibernate le gusta tener un DataSource que realmente debería ser una fuente de datos de agrupación.

La respuesta anterior es correcta, es realmente una buena idea iniciar Derby como un servidor de base de datos de red, incluso si está en la misma JVM.Aún puede utilizar el controlador JDBC integrado, que parece saber cuándo la base de datos a la que se conecta está en modo de red y se ajusta en consecuencia.(Esto también permite utilizar una herramienta de terceros para conectarse a la base de datos y ver y editar los datos y el esquema mientras se está ejecutando, lo cual es muy útil para la depuración).

System.setProperty("derby.system.home", applicationHome);

NetworkServerControl serverControl = new NetworkServerControl(InetAddress.getByName(m_address),port);

serverControl.start(new PrintWriter(System.out, true)); 

Una vez que la base de datos se esté ejecutando, coloque un DataSource instancia en un registro JNDI.Entonces Hibernate puede acceder a esta fuente de datos, dado su nombre, desde el registro JNDI.

EmbeddedConnectionPoolDataSource40 dataSource = new EmbeddedConnectionPoolDataSource40();
dataSource.setDatabaseName(databaseName);
dataSource.setUser(username);
dataSource.setPassword(password);

El EmbeddedConnectionPoolDataSource40 es la implementación de DataSource que se utilizará con un contenedor DataSource de agrupación para que las conexiones se puedan reutilizar siempre que sea posible.Utilicé Apache Commons DBCP y modifiqué uno de los ejemplos para crear mi propia fuente de datos de agrupación usando EmbeddedConnectionPoolDataSource40.

Otros consejos

Parece como si está ejecutando Derby como un incrustado DB y no con un servidor de base de datos.

  

El problema es a la vez se están ejecutando en   diferentes máquinas virtuales de Java y una base de datos dada   Sólo se puede acceder desde una JVM.

Eclipse comenzará otra JVM, al iniciar las pruebas de su programa y no permiten a conenect a la base de datos incrustada en eclipse. Creo que el cómo utilizar Derby como una red Servidor de DB puede ayudar usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top