dHi,

    I'm using Derby replication successfully (with v 10.4.1.3, on Solaris x86, 
Java 1.5, 32 bit), but what I'm now trying to do is to automate synchronisation 
between two servers (both of which are running embedded with applications).

    One scenario I'm trying to cope with is where the master database has been 
restarted, to stop & re-synchronize the slave database.

    After the master has stopped, I'm successfully stopping the replication on 
the slave by passing the stopSlave=true attribute, and getting back a XRE42 SQL 
State to indicate this success.

    However, after this has stopped, it would appear that derby is still 
listening on the slave port (verified using netstat), so if after re-copying 
the database from the master, I try & restart the slave (using 
startSlave=true), I'm getting an exception due to the port already being in use:


2008-09-15 16:54:56,842 ERROR MYAPP.DB - Cannot start slave synchronization on 
'MYDB'
java.sql.SQLException: Failed to start database 'MYDB', see the next exception 
for details.
        at 
org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
        at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
        at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source)
        at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown 
Source)
        at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source)
        at org.apache.derby.impl.jdbc.EmbedConnection30.<init>(Unknown Source)
        at org.apache.derby.jdbc.Driver30.getNewEmbedConnection(Unknown Source)
        at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
        at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source)
        at java.sql.DriverManager.getConnection(DriverManager.java:525)
        at java.sql.DriverManager.getConnection(DriverManager.java:171)
        at 
com.coppereye.myapp.derby.DerbyServer.getEmbeddedConnection(DerbyServer.java:912)
        at com.coppereye.myapp.derby.DerbyServer.access$400(DerbyServer.java:55)
        at com.coppereye.myapp.derby.DerbyServer$2.run(DerbyServer.java:1327)
Caused by: java.sql.SQLException: Could not establish a connection to the peer 
of the replicated database 'MYDB' on address 'testbox:6959'.
        at 
org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
        at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown 
Source)
        ... 11 more
Caused by: ERROR XRE04: Could not establish a connection to the peer of the 
replicated database 'MYDB' on address 'testbox:6959'.
        at org.apache.derby.iapi.error.StandardException.newException(Unknown 
Source)
        at 
org.apache.derby.impl.store.replication.slave.SlaveController.setupConnection(Unknown
 Source)
        at 
org.apache.derby.impl.store.replication.slave.SlaveController.startSlave(Unknown
 Source)
        at org.apache.derby.impl.store.raw.RawStore.boot(Unknown Source)
        at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown 
Source)
        at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown 
Source)
        at 
org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
        at 
org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
        at org.apache.derby.impl.store.access.RAMAccessManager.boot(Unknown 
Source)
        at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown 
Source)
        at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown 
Source)
        at 
org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
        at 
org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
        at org.apache.derby.impl.db.BasicDatabase.bootStore(Unknown Source)
        at org.apache.derby.impl.db.BasicDatabase.boot(Unknown Source)
        at org.apache.derby.impl.db.SlaveDatabase.bootBasicDatabase(Unknown 
Source)
        at org.apache.derby.impl.db.SlaveDatabase.access$000(Unknown Source)
        at 
org.apache.derby.impl.db.SlaveDatabase$SlaveDatabaseBootThread.run(Unknown 
Source)
        at java.lang.Thread.run(Thread.java:595)
Caused by: java.security.PrivilegedActionException: java.net.BindException: 
Address already in use
        at java.security.AccessController.doPrivileged(Native Method)
        at 
org.apache.derby.impl.store.replication.net.ReplicationMessageReceive.createServerSocket(Unknown
 Source)
        at 
org.apache.derby.impl.store.replication.net.ReplicationMessageReceive.initConnection(Unknown
 Source)
        ... 18 more
Caused by: java.net.BindException: Address already in use
        at java.net.PlainSocketImpl.socketBind(Native Method)
        at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:359)
        at java.net.ServerSocket.bind(ServerSocket.java:319)
        at java.net.ServerSocket.<init>(ServerSocket.java:185)
        at 
javax.net.DefaultServerSocketFactory.createServerSocket(ServerSocketFactory.java:169)
        at 
org.apache.derby.impl.store.replication.net.ReplicationMessageReceive$2.run(Unknown
 Source)
        ... 21 more


Is this something that ought to work? - or in this scenario would I need to 
restart derby completely?


many thanks in advance for any advice.

  Andrew Lawrenson

Reply via email to