Bugs item #515537, was opened at 2002-02-10 08:18
You can respond by visiting:
http://sourceforge.net/tracker/?func=detail&atid=376685&aid=515537&group_id=22866
Category: JBossServer
Group: v3.0 Rabbit Hole
Status: Closed
Resolution: Fixed
Priority: 5
Submitted By: Georg Schmid (giorgio42)
Assigned to: David Jencks (d_jencks)
Summary: Deployer loops on failed deployment
Initial Comment:
Deployer loops on failed deployment
Basic info:
INFO JBoss (MX MicroKernel) 3.0.0DR1(200202092237)
[RABBIT-HOLE]
...
11:40:24,734 INFO [Info] Java version: 1.3.1_02,Sun
Microsystems Inc.
11:40:24,734 INFO [Info] Java VM: Java HotSpot(TM)
Client VM 1.3.1_02-b02,Sun Microsystems Inc.
11:40:24,734 INFO [Info] OS-System: Windows 2000
5.0,x86
Bug:
Failed deployment puts Deployer into endless loop.
Although the deployment fails, the deployer puts it on
the watch list
and treats it as if the deployment succeeded:
2002-02-10 12:34:52,265 DEBUG
[org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.Mainte
nanceEB] jar:file:/I:/jboss/jboss-
3.0.0DR1/tmp/deploy/66.entity-beans.jar!/META-
INF/jbosscmp-jdbc.xml found. Overriding defaults
2002-02-10 12:34:52,625 ERROR
[org.jboss.ejb.EJBDeployer] Could not deploy
file:/I:/jboss/jboss-3.0.0DR1/deploy/entity-beans.jar
org.jboss.deployment.DeploymentException: Role: module-
belongs-to-facility with multiplicity many using
foreign-key mapping is not allowed to have key-fields
at
org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCRelationshi
pRoleMetaData.loadKeyFields
(JDBCRelationshipRoleMetaData.java:352)
at
org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCRelationshi
pRoleMetaData.init
(JDBCRelationshipRoleMetaData.java:157)
at
org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCRelationMet
aData.<init>(JDBCRelationMetaData.java:308)
at
org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCApplication
MetaData.<init>(JDBCApplicationMetaData.java:383)
at
org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCXmlFileLoad
er.load(JDBCXmlFileLoader.java:75)
at
org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.loadJDB
CEntityMetaData(JDBCStoreManager.java:503)
at
org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.create
(JDBCStoreManager.java:277)
at
org.jboss.ejb.plugins.CMPPersistenceManager.create
(CMPPersistenceManager.java:134)
at org.jboss.ejb.EntityContainer.create
(EntityContainer.java:342)
at org.jboss.ejb.Application.start
(Application.java:214)
at org.jboss.ejb.EJBDeployer.deploy
(EJBDeployer.java:431)
at org.jboss.deployment.MainDeployer.deploy
(MainDeployer.java:396)
at org.jboss.deployment.MainDeployer.deploy
(MainDeployer.java:362)
at org.jboss.deployment.MainDeployer.scan
(MainDeployer.java:243)
at org.jboss.deployment.MainDeployer.run
(MainDeployer.java:229)
at java.lang.Thread.run(Unknown Source)
2002-02-10 12:34:52,937 DEBUG
[org.jboss.deployment.MainDeployer] Watching new file:
file:/I:/jboss/jboss-3.0.0DR1/deploy/entity-beans.jar
2002-02-10 12:34:52,937 WARN
[org.jboss.deployment.MainDeployer] operation failed;
ignoring
java.lang.NullPointerException
at
org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.stop
(JDBCStoreManager.java:346)
at
org.jboss.ejb.plugins.CMPPersistenceManager.stop
(CMPPersistenceManager.java:180)
at org.jboss.ejb.EntityContainer.stop
(EntityContainer.java:408)
at org.jboss.ejb.Application.stop
(Application.java:240)
at org.jboss.ejb.EJBDeployer.deploy
(EJBDeployer.java:444)
at org.jboss.deployment.MainDeployer.deploy
(MainDeployer.java:396)
at org.jboss.deployment.MainDeployer.deploy
(MainDeployer.java:362)
at org.jboss.deployment.MainDeployer.scan
(MainDeployer.java:243)
at org.jboss.deployment.MainDeployer.run
(MainDeployer.java:229)
at java.lang.Thread.run(Unknown Source)
2002-02-10 12:35:03,437 INFO
[org.jboss.deployment.MainDeployer] Undeploying
file:/I:/jboss/jboss-3.0.0DR1/deploy/entity-beans.jar
2002-02-10 12:35:03,437 ERROR
[org.jboss.deployment.MainDeployer] Undeployment
failed: file:/I:/jboss/jboss-3.0.0DR1/deploy/entity-
beans.jar
org.jboss.deployment.DeploymentException: URL not
deployed
at org.jboss.ejb.EJBDeployer.undeploy
(EJBDeployer.java:472)
at org.jboss.ejb.EJBDeployer.undeploy
(EJBDeployer.java:461)
at org.jboss.deployment.MainDeployer.undeploy
(MainDeployer.java:315)
at org.jboss.deployment.MainDeployer.scan
(MainDeployer.java:258)
at org.jboss.deployment.MainDeployer.run
(MainDeployer.java:229)
at java.lang.Thread.run(Unknown Source)
2002-02-10 12:35:08,562 INFO
[org.jboss.deployment.MainDeployer] Undeploying
file:/I:/jboss/jboss-3.0.0DR1/deploy/entity-beans.jar
2002-02-10 12:35:08,578 ERROR
[org.jboss.deployment.MainDeployer] Undeployment
failed: file:/I:/jboss/jboss-3.0.0DR1/deploy/entity-
beans.jar
org.jboss.deployment.DeploymentException: URL not
deployed
at org.jboss.ejb.EJBDeployer.undeploy
(EJBDeployer.java:472)
at org.jboss.ejb.EJBDeployer.undeploy
(EJBDeployer.java:461)
at org.jboss.deployment.MainDeployer.undeploy
(MainDeployer.java:315)
at org.jboss.deployment.MainDeployer.scan
(MainDeployer.java:258)
at org.jboss.deployment.MainDeployer.run
(MainDeployer.java:229)
at java.lang.Thread.run(Unknown Source)
2002-02-10 12:35:13,734 INFO
[org.jboss.deployment.MainDeployer] Undeploying
file:/I:/jboss/jboss-3.0.0DR1/deploy/entity-beans.jar
2002-02-10 12:35:13,734 ERROR
[org.jboss.deployment.MainDeployer] Undeployment
failed: file:/I:/jboss/jboss-3.0.0DR1/deploy/entity-
beans.jar
The problem occurs in MainDeployer.java. In the deploy
(DeploymentInfo)'s finally {...} clause
the deployer does not check whether the deployment has
succeeded.
Fix:
- Naive idea: Add a check for success: if
(deployment.status.equals("Deployed")) { ... }.
I tried that and it does not work, but creates lots of
NPEs, because most of the time the status is null,
even for succeeded deployments. And this is because
the "subordinate" deployers, like the EJBDeployer
do not know, that they should set a flag in the
DeploymentInfo after a successful deployment.
The real problem is that any deployment is always
added to the watch list, whether the deployment
succeeded or not (... finally {...}).
But the undeployment stops, if it did not succeed
(which it cannot, because the deployment did not
succeed...).
So the MainDeployer keeps calling undeploy on the (in
this case) EJBDeployer on each scan.
Moving the biggest part of undeploy() to a finally
{...} clause reduces the problem to inconsistent
messages on the console.
This is not a fix, only half a workaround:
diff -u -r1.11 MainDeployer.java
--- MainDeployer.java 9 Feb 2002 16:09:17 -
0000 1.11
+++ MainDeployer.java 10 Feb 2002 16:16:16 -0000
@@ -314,6 +314,11 @@
// Tell the respective deployer to undeploy
this one
if (di.deployer != null) di.deployer.undeploy
(di);
+ }
+ catch (Exception e) {
+ log.error("Undeployment failed: " + di.url,
e);
+ }
+ finally {
// remove from local maps
deployments.remove(di.url);
if (deploymentsList.lastIndexOf(di) != -1)
deploymentsList.remove(deploymentsList.lastIndexOf
(di));
@@ -322,11 +327,7 @@
di.cleanup(log);
if (infoEnabled)
- log.info("Undeployed "+di.url);
-
- }
- catch (Exception e) {
- log.error("Undeployment failed: " + di.url,
e);
+ log.info("Undeployed "+di.url);
}
}
----------------------------------------------------------------------
>Comment By: David Jencks (d_jencks)
Date: 2002-02-13 06:15
Message:
Logged In: YES
user_id=60525
I don't understand the previous comment. Do you claim this
is still broken on w2k? It appears fixed to me on linux and
mac osx. If you find it is broken, please state so very
clearly with an example.
----------------------------------------------------------------------
Comment By: Georg Schmid (giorgio42)
Date: 2002-02-13 00:10
Message:
Logged In: YES
user_id=437570
Bug 516707 (Undeploy fails on MacOS) occurs on
W32,too, so I cannot verify anything... (removing the ejb
jar from deploy dir does not even create a single line in
the server.log on debug level).
Georg
----------------------------------------------------------------------
Comment By: David Jencks (d_jencks)
Date: 2002-02-11 21:54
Message:
Logged In: YES
user_id=60525
Please check your real-life example, my tests now all work fine.
----------------------------------------------------------------------
Comment By: David Jencks (d_jencks)
Date: 2002-02-10 09:05
Message:
Logged In: YES
user_id=60525
I'm working on this one. I think it has to do with
timestamps from files being unrelated to getCurrentTimeMillis().
----------------------------------------------------------------------
You can respond by visiting:
http://sourceforge.net/tracker/?func=detail&atid=376685&aid=515537&group_id=22866
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development