leif 2002/09/05 19:14:09
Modified: instrument-client/src/java/org/apache/excalibur/instrument/client
InstrumentManagerConnection.java
InstrumentManagerTreeModel.java
Log:
Get rid of unnecessary synchronization that was causing occasional dead locks.
Fixed a problem where reconnecting clients were trying to reestablish links to
objects that no longer exist on the server.
Revision Changes Path
1.5 +127 -183
jakarta-avalon-excalibur/instrument-client/src/java/org/apache/excalibur/instrument/client/InstrumentManagerConnection.java
Index: InstrumentManagerConnection.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-excalibur/instrument-client/src/java/org/apache/excalibur/instrument/client/InstrumentManagerConnection.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- InstrumentManagerConnection.java 23 Aug 2002 10:03:48 -0000 1.4
+++ InstrumentManagerConnection.java 6 Sep 2002 02:14:09 -0000 1.5
@@ -181,23 +181,21 @@
String getTabTitle()
{
String tabTitle;
- synchronized(this)
+ InstrumentManagerClient manager = m_manager;
+ if ( manager == null )
+ {
+ tabTitle = "[Not Connected]";
+ }
+ else
{
- if ( m_manager == null )
+ try
{
- tabTitle = "[Not Connected]";
+ tabTitle = manager.getDescription();
}
- else
+ catch ( AltrmiInvocationException e )
{
- try
- {
- tabTitle = m_manager.getDescription();
- }
- catch ( AltrmiInvocationException e )
- {
- // Connection closed. Ignore this here.
- tabTitle = "[Not Connected]";
- }
+ // Connection closed. Ignore this here.
+ tabTitle = "[Not Connected]";
}
}
return tabTitle;
@@ -259,132 +257,127 @@
*/
void handleLeasedSamples()
{
- synchronized(this)
- {
- // If we are not connected, then there is nothing to be done here.
-
- // Only renew leases once per minute.
- long now = System.currentTimeMillis();
- if ( now - m_lastLeaseRenewalTime > 60000 )
+ // If we are not connected, then there is nothing to be done here.
+
+ // Only renew leases once per minute.
+ long now = System.currentTimeMillis();
+ if ( now - m_lastLeaseRenewalTime > 60000 )
+ {
+ //getLogger().debug("Renew Leases:");
+ MaintainedSampleLease[] leases = getMaintainedSampleLeaseArray();
+ for ( int i = 0; i < leases.length; i++ )
{
- //getLogger().debug("Renew Leases:");
- MaintainedSampleLease[] leases = getMaintainedSampleLeaseArray();
- for ( int i = 0; i < leases.length; i++ )
+ MaintainedSampleLease lease = leases[i];
+ //getLogger().debug(" lease: " + lease.getSampleName());
+
+ // Look for the Sample Descriptor in the Tree Model
+ DefaultMutableTreeNode sampleTreeNode =
+ m_treeModel.getInstrumentSampleTreeNode( lease.getSampleName()
);
+ if ( sampleTreeNode == null )
{
- MaintainedSampleLease lease = leases[i];
- //getLogger().debug(" lease: " + lease.getSampleName());
+ // A node does not yet exist for the sample. We need to
+ // create it on the server to make sure that it exists.
+ // Then refresh the Instrument in the tree node so that it
+ // is created.
- // Look for the Sample Descriptor in the Tree Model
- DefaultMutableTreeNode sampleTreeNode =
- m_treeModel.getInstrumentSampleTreeNode(
lease.getSampleName() );
- if ( sampleTreeNode == null )
+ // Loof for the Instrument Descriptor in the Tree Model
+ DefaultMutableTreeNode instrumentTreeNode =
+ m_treeModel.getInstrumentTreeNode(
lease.getInstrumentName() );
+ if ( instrumentTreeNode == null )
{
- // A node does not yet exist for the sample. We need to
- // create it on the server to make sure that it exists.
- // Then refresh the Instrument in the tree node so that it
- // is created.
-
- // Loof for the Instrument Descriptor in the Tree Model
- DefaultMutableTreeNode instrumentTreeNode =
- m_treeModel.getInstrumentTreeNode(
lease.getInstrumentName() );
- if ( instrumentTreeNode == null )
- {
- // Instrument does not exist. Ignore this for now.
- }
- else
- {
- // Get the InstrumentDescriptor
- InstrumentDescriptor instrumentDescriptor =
-
((InstrumentNodeData)instrumentTreeNode.getUserObject()).
- getDescriptor();
-
- // Now attempt to create the sample
- try
- {
- instrumentDescriptor.createInstrumentSample(
- lease.getDescription(), lease.getInterval(),
lease.getSize(),
- lease.getLeaseDuration(), lease.getType() );
-
- // Refresh the Tree Model
- m_treeModel.updateInstrument( instrumentDescriptor,
instrumentTreeNode );
- }
- catch ( AltrmiInvocationException e )
- {
- // Means that the connection died.
- close();
- }
- }
+ // Instrument does not exist. Ignore this for now.
}
else
{
- // A sample descriptor already exists. Simply extend it.
- InstrumentSampleNodeData sampleNodeData =
-
(InstrumentSampleNodeData)sampleTreeNode.getUserObject();
-
- // Get the InstrumentSampleDescriptor
- InstrumentSampleDescriptor sampleDescriptor =
sampleNodeData.getDescriptor();
+ // Get the InstrumentDescriptor
+ InstrumentDescriptor instrumentDescriptor =
+
((InstrumentNodeData)instrumentTreeNode.getUserObject()).
+ getDescriptor();
+ // Now attempt to create the sample
try
{
- long newExpireTime =
- sampleDescriptor.extendLease(
lease.getLeaseDuration() );
- //getLogger().debug(" Extended lease to: " +
newExpireTime );
-
- sampleNodeData.setLeaseExpireTime( newExpireTime );
+ instrumentDescriptor.createInstrumentSample(
+ lease.getDescription(), lease.getInterval(),
lease.getSize(),
+ lease.getLeaseDuration(), lease.getType() );
// Refresh the Tree Model
- m_treeModel.updateInstrumentSample( sampleDescriptor,
sampleTreeNode );
+ m_treeModel.updateInstrument( instrumentDescriptor,
instrumentTreeNode );
}
catch ( AltrmiInvocationException e )
{
// Means that the connection died.
close();
}
+ }
+ }
+ else
+ {
+ // A sample descriptor already exists. Simply extend it.
+ InstrumentSampleNodeData sampleNodeData =
+ (InstrumentSampleNodeData)sampleTreeNode.getUserObject();
+
+ // Get the InstrumentSampleDescriptor
+ InstrumentSampleDescriptor sampleDescriptor =
sampleNodeData.getDescriptor();
+
+ try
+ {
+ long newExpireTime =
+ sampleDescriptor.extendLease( lease.getLeaseDuration()
);
+ //getLogger().debug(" Extended lease to: " + newExpireTime
);
+
+ sampleNodeData.setLeaseExpireTime( newExpireTime );
+ // Refresh the Tree Model
+ m_treeModel.updateInstrumentSample( sampleDescriptor,
sampleTreeNode );
+ }
+ catch ( AltrmiInvocationException e )
+ {
+ // Means that the connection died.
+ close();
}
+
}
-
- // Also, take this oportunity to update all of the leased samples in
- // the model.
- m_treeModel.updateAllLeasedSamples();
-
- m_lastLeaseRenewalTime = now;
}
- // Now have the TreeModel purge any expired samples from the tree.
- m_treeModel.purgeExpiredSamples();
+ // Also, take this oportunity to update all of the leased samples in
+ // the model.
+ m_treeModel.updateAllLeasedSamples();
+
+ m_lastLeaseRenewalTime = now;
}
+
+ // Now have the TreeModel purge any expired samples from the tree.
+ m_treeModel.purgeExpiredSamples();
}
void open() throws AltrmiConnectionException, IOException
{
getLogger().debug( "open()" );
- synchronized (this)
+
+ SocketCustomStreamHostContext altrmiHostContext =
+ new SocketCustomStreamHostContext( m_host, m_port );
+ altrmiHostContext.setAltrmiConnectionListener( new
DefaultConnectionListener( 0 ) );
+
+ m_altrmiHostContext = altrmiHostContext;
+ m_altrmiFactory = new ClientClassAltrmiFactory( false );
+ m_altrmiFactory.setHostContext( altrmiHostContext );
+
+ /*
+ System.out.println("Listing Published Objects At Server...");
+ String[] listOfPublishedObjectsOnServer = m_altrmiFactory.list();
+ for ( int i = 0; i < listOfPublishedObjectsOnServer.length; i++ )
{
- SocketCustomStreamHostContext altrmiHostContext =
- new SocketCustomStreamHostContext( m_host, m_port );
- altrmiHostContext.setAltrmiConnectionListener( new
DefaultConnectionListener( 0 ) );
-
- m_altrmiHostContext = altrmiHostContext;
- m_altrmiFactory = new ClientClassAltrmiFactory( false );
- m_altrmiFactory.setHostContext( altrmiHostContext );
-
- /*
- System.out.println("Listing Published Objects At Server...");
- String[] listOfPublishedObjectsOnServer = m_altrmiFactory.list();
- for ( int i = 0; i < listOfPublishedObjectsOnServer.length; i++ )
- {
- System.out.println( "..[" + i + "]:" +
listOfPublishedObjectsOnServer[i] );
- }
- */
-
- m_manager = (InstrumentManagerClient)m_altrmiFactory.lookup(
- "InstrumentManagerClient" );
-
- m_closed = false;
+ System.out.println( "..[" + i + "]:" + listOfPublishedObjectsOnServer[i] );
}
+ */
+
+ m_manager = (InstrumentManagerClient)m_altrmiFactory.lookup(
+ "InstrumentManagerClient" );
+
+ m_closed = false;
- // Notify the listeners outside of synchronization.
+ // Notify the listeners.
InstrumentManagerConnectionListener[] listenerArray = getListenerArray();
for ( int i = 0; i < listenerArray.length; i++ )
{
@@ -426,21 +419,19 @@
void close()
{
getLogger().debug( "close()" );
- synchronized (this)
+
+ if ( !m_closed )
{
- if ( !m_closed )
- {
- m_closed = true;
- m_manager = null;
- m_altrmiFactory.close();
- m_altrmiFactory = null;
- // Uncomment this when it gets implemented.
- // m_altrmiHostContext.close();
- m_altrmiHostContext = null;
- }
+ m_closed = true;
+ m_manager = null;
+ m_altrmiFactory.close();
+ m_altrmiFactory = null;
+ // Uncomment this when it gets implemented.
+ // m_altrmiHostContext.close();
+ m_altrmiHostContext = null;
}
- // Notify the listeners outside of synchronization.
+ // Notify the listeners.
InstrumentManagerConnectionListener[] listenerArray = getListenerArray();
for ( int i = 0; i < listenerArray.length; i++ )
{
@@ -469,7 +460,7 @@
m_deleted = true;
- // Notify the listeners outside of synchronization.
+ // Notify the listeners.
InstrumentManagerConnectionListener[] listenerArray = getListenerArray();
for ( int i = 0; i < listenerArray.length; i++ )
{
@@ -479,25 +470,24 @@
boolean ping()
{
- synchronized(this)
+ // Ping the server by requesting the manager's name
+ InstrumentManagerClient manager = m_manager;
+ if ( manager != null )
{
- // Ping the server by requesting the manager's name
- if ( m_manager != null )
+ try
{
- try
- {
- String name = m_manager.getName();
- return true;
- }
- catch ( AltrmiInvocationException e )
- {
- getLogger().debug( "Ping Failed.", e );
-
- // Socket was closed.
- close();
- }
+ String name = manager.getName();
+ return true;
+ }
+ catch ( AltrmiInvocationException e )
+ {
+ getLogger().debug( "Ping Failed.", e );
+
+ // Socket was closed.
+ close();
}
}
+
return false;
}
@@ -675,38 +665,6 @@
sampleFrame.addToDesktop( m_frame.getDesktopPane() );
sampleFrame.show();
}
-
- /* Old
- synchronized(m_treeModel)
- {
- // See if a Sample Node Data object exists.
- DefaultMutableTreeNode sampleTreeNode =
- m_treeModel.getInstrumentSampleTreeNode( sampleName );
- InstrumentSampleNodeData sampleNodeData = null;
- if ( sampleTreeNode != null )
- {
- sampleNodeData =
- (InstrumentSampleNodeData)sampleTreeNode.getUserObject();
- if ( sampleNodeData != null )
- {
- InstrumentSampleFrame frame =
sampleNodeData.getInstrumentSampleFrame();
- if ( frame != null )
- {
- frame.hideFrame();
- }
- }
- }
-
- // Now create the frame
- InstrumentSampleFrame frame = new InstrumentSampleFrame(
sampleFrameState, this, m_frame );
- if ( sampleNodeData != null )
- {
- sampleNodeData.setInstrumentSampleFrame( frame );
- }
- frame.addToDesktop( m_frame.getDesktopPane() );
- frame.show();
- }
- */
}
/**
@@ -728,20 +686,6 @@
sampleFrame.addToDesktop( m_frame.getDesktopPane() );
}
}
-
- /* Old.
- synchronized( sampleNodeData )
- {
- // See if the NodeData already has a frame
- sampleFrame = sampleNodeData.getInstrumentSampleFrame();
- if ( sampleFrame == null )
- {
- sampleFrame = new InstrumentSampleFrame( this, sampleNodeData.getName(),
m_frame );
- sampleNodeData.setInstrumentSampleFrame( sampleFrame );
- sampleFrame.addToDesktop( m_frame.getDesktopPane() );
- }
- }
- */
sampleFrame.show();
if ( sampleFrame.isIcon() )
1.3 +20 -27
jakarta-avalon-excalibur/instrument-client/src/java/org/apache/excalibur/instrument/client/InstrumentManagerTreeModel.java
Index: InstrumentManagerTreeModel.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-excalibur/instrument-client/src/java/org/apache/excalibur/instrument/client/InstrumentManagerTreeModel.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- InstrumentManagerTreeModel.java 23 Aug 2002 10:03:48 -0000 1.2
+++ InstrumentManagerTreeModel.java 6 Sep 2002 02:14:09 -0000 1.3
@@ -306,19 +306,16 @@
*/
public DefaultMutableTreeNode getInstrumentableTreeNode( String name )
{
- synchronized( this )
+ DefaultMutableTreeNode node = (DefaultMutableTreeNode)m_elementMap.get(
name );
+ if ( node != null )
{
- DefaultMutableTreeNode node = (DefaultMutableTreeNode)m_elementMap.get(
name );
- if ( node != null )
+ Object element = node.getUserObject();
+ if ( element instanceof InstrumentableNodeData )
{
- Object element = node.getUserObject();
- if ( element instanceof InstrumentableNodeData )
- {
- return node;
- }
+ return node;
}
- return null;
}
+ return null;
}
/**
@@ -330,19 +327,16 @@
*/
public DefaultMutableTreeNode getInstrumentTreeNode( String name )
{
- synchronized( this )
+ DefaultMutableTreeNode node = (DefaultMutableTreeNode)m_elementMap.get(
name );
+ if ( node != null )
{
- DefaultMutableTreeNode node = (DefaultMutableTreeNode)m_elementMap.get(
name );
- if ( node != null )
+ Object element = node.getUserObject();
+ if ( element instanceof InstrumentNodeData )
{
- Object element = node.getUserObject();
- if ( element instanceof InstrumentNodeData )
- {
- return node;
- }
+ return node;
}
- return null;
}
+ return null;
}
/**
@@ -354,19 +348,16 @@
*/
public DefaultMutableTreeNode getInstrumentSampleTreeNode( String name )
{
- synchronized( this )
+ DefaultMutableTreeNode node = (DefaultMutableTreeNode)m_elementMap.get(
name );
+ if ( node != null )
{
- DefaultMutableTreeNode node = (DefaultMutableTreeNode)m_elementMap.get(
name );
- if ( node != null )
+ Object element = node.getUserObject();
+ if ( element instanceof InstrumentSampleNodeData )
{
- Object element = node.getUserObject();
- if ( element instanceof InstrumentSampleNodeData )
- {
- return node;
- }
+ return node;
}
- return null;
}
+ return null;
}
private DefaultMutableTreeNode[] getLeasedSampleArray()
@@ -440,6 +431,7 @@
else
{
m_root.removeAllChildren();
+ m_elementMap.clear();
fireTreeStructureChanged( new TreeModelEvent( this,
m_root.getPath() ) );
}
}
@@ -449,6 +441,7 @@
{
// All data will change.
m_root.removeAllChildren();
+ m_elementMap.clear();
fireTreeStructureChanged( new TreeModelEvent( this, new Object[] {
m_root } ) );
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>