use of com.swiftmq.tools.concurrent.Semaphore in project swiftmq-client by iitsoftware.
the class ConnectionImpl method reconnectAndWait.
private void reconnectAndWait() {
if (reconnector.isDebug())
System.out.println(new Date() + " " + toString() + ": initiate reconnect and wait ...");
lastConnectionLost = System.currentTimeMillis();
Semaphore sem = new Semaphore();
POReconnect po = new POReconnect(sem, this);
connector.dispatch(po);
sem.waitHere();
if (reconnector.isDebug())
System.out.println(new Date() + " " + toString() + ": reconnect done, connection =" + connection);
}
use of com.swiftmq.tools.concurrent.Semaphore in project swiftmq-client by iitsoftware.
the class Connector method close.
public void close() {
if (debug)
System.out.println(toString() + ", close ...");
synchronized (closeSync) {
if (closeInProgress) {
if (debug)
System.out.println(toString() + ", close in progress, return");
return;
}
closeInProgress = true;
}
Semaphore sem = new Semaphore();
dispatch(new POClose(sem));
sem.waitHere();
if (debug)
System.out.println(toString() + ", close done");
}
use of com.swiftmq.tools.concurrent.Semaphore in project swiftmq-client by iitsoftware.
the class MessageConsumerImpl method close.
public void close() throws JMSException {
if (closed)
return;
if (!mySession.isSessionStarted()) {
close(null);
return;
}
CloseConsumer request = new CloseConsumer(consumerId);
request._sem = new Semaphore();
mySession.serviceRequest(request);
request._sem.waitHere();
}
use of com.swiftmq.tools.concurrent.Semaphore in project swiftmq-client by iitsoftware.
the class SessionImpl method close.
public void close() throws JMSException {
if (closed)
return;
if (messageListener == null && !isSessionStarted()) {
_close();
return;
}
CloseSession request = new CloseSession();
request._sem = new Semaphore();
if (messageListener == null)
serviceRequest(request);
else {
addMessageChunk(request);
}
request._sem.waitHere(5000);
if (!request._sem.isNotified())
_close();
}
use of com.swiftmq.tools.concurrent.Semaphore in project swiftmq-ce by iitsoftware.
the class StoreSwiftletImpl method startup.
protected void startup(Configuration config) throws SwiftletException {
try {
ctx = new StoreContext(this, config);
ctx.swapFileFactory = createSwapFileFactory();
ctx.swapPath = SwiftUtilities.addWorkingDir((String) ctx.swapEntity.getProperty("path").getValue());
swapMaxLength = ((Long) ctx.swapEntity.getProperty("roll-over-size").getValue()).longValue();
if (ctx.traceSpace.enabled)
ctx.traceSpace.trace("sys$store", "startup...");
ctx.durableStore = createDurableSubscriberStore(ctx, SwiftUtilities.addWorkingDir((String) ctx.durableEntity.getProperty("path").getValue()));
deleteSwaps();
ctx.recoveryManager = new RecoveryManager(ctx);
ctx.stableStore = createStableStore(ctx, SwiftUtilities.addWorkingDir((String) ctx.dbEntity.getProperty("path").getValue()), ((Integer) ctx.dbEntity.getProperty("initial-page-size").getValue()).intValue());
Property minCacheSizeProp = ctx.cacheEntity.getProperty("min-size");
Property maxCacheSizeProp = ctx.cacheEntity.getProperty("max-size");
int minCacheSize = ((Integer) minCacheSizeProp.getValue()).intValue();
int maxCacheSize = ((Integer) maxCacheSizeProp.getValue()).intValue();
if (minCacheSize > maxCacheSize)
throw new Exception("Cache/min-size is invalid, must be less than max-size!");
minCacheSizeProp.setPropertyChangeListener(new PropertyChangeAdapter(null) {
public void propertyChanged(Property property, Object oldValue, Object newValue) throws PropertyChangeException {
int n = ((Integer) newValue).intValue();
if (n > ((Integer) ctx.cacheEntity.getProperty("max-size").getValue()).intValue())
throw new PropertyChangeException("min-size is invalid, must be less than max-size!");
}
});
maxCacheSizeProp.setPropertyChangeListener(new PropertyChangeAdapter(null) {
public void propertyChanged(Property property, Object oldValue, Object newValue) throws PropertyChangeException {
int n = ((Integer) newValue).intValue();
if (n < ((Integer) ctx.cacheEntity.getProperty("min-size").getValue()).intValue())
throw new PropertyChangeException("max-size is invalid, must be greater than min-size!");
}
});
// ctx.preparedLog = new PreparedLogFile(ctx, SwiftUtilities.addWorkingDir((String) ctx.xaEntity.getProperty("path").getValue()),
// ((Boolean) ctx.xaEntity.getProperty("force-sync").getValue()).booleanValue());
ctx.cacheManager = new CacheManager(ctx, ctx.stableStore, minCacheSize, maxCacheSize);
ctx.transactionManager = new TransactionManager(ctx);
ctx.logManager = createLogManagerFactory().createLogManager(ctx, ctx.transactionManager, SwiftUtilities.addWorkingDir((String) ctx.txEntity.getProperty("path").getValue()), ((Long) ctx.txEntity.getProperty("checkpoint-size").getValue()).longValue(), ((Boolean) ctx.txEntity.getProperty("force-sync").getValue()).booleanValue());
ctx.recoveryManager.restart(isRecoverOnStartup());
rootIndex = new RootIndex(ctx, 0);
ctx.preparedLog = new PreparedLogQueue(ctx, rootIndex.getQueueIndex(PREPARED_LOG_QUEUE));
ctx.backupProcessor = new BackupProcessor(ctx);
checkBackupPath();
ctx.shrinkProcessor = new ShrinkProcessor(ctx);
CommandRegistry commandRegistry = ctx.dbEntity.getCommandRegistry();
CommandExecutor shrinkExecutor = new CommandExecutor() {
public String[] execute(String[] context, Entity entity, String[] cmd) {
if (cmd.length != 1)
return new String[] { TreeCommands.ERROR, "Invalid command, please try 'shrink'" };
Semaphore sem = new Semaphore();
StartShrink po = new StartShrink(sem);
ctx.shrinkProcessor.enqueue(po);
sem.waitHere();
String[] result = null;
if (po.isSuccess())
result = new String[] { TreeCommands.INFO, "Shrink initiated." };
else
result = new String[] { TreeCommands.ERROR, po.getException() };
return result;
}
};
Command backupCommand = new Command("shrink", "shrink", "Perform Shrink Now", true, shrinkExecutor, true, false);
commandRegistry.addCommand(backupCommand);
SwiftletManager.getInstance().addSwiftletManagerListener("sys$scheduler", new SwiftletManagerAdapter() {
public void swiftletStarted(SwiftletManagerEvent event) {
ctx.schedulerSwiftlet = (SchedulerSwiftlet) SwiftletManager.getInstance().getSwiftlet("sys$scheduler");
jobRegistrar = new JobRegistrar(ctx);
jobRegistrar.register();
}
public void swiftletStopInitiated(SwiftletManagerEvent event) {
jobRegistrar.unregister();
}
});
if (ctx.traceSpace.enabled)
ctx.traceSpace.trace("sys$store", "startup...done");
} catch (Exception e) {
e.printStackTrace();
throw new SwiftletException(e.getMessage());
}
}
Aggregations