]
Brian Stansberry commented on WFLY-14132:
-----------------------------------------
[~cfang] I think [~jgmeligmeyling] is correct. The DeploymentUnit.getName() method
returns the official 'runtime-name' for the deployment. For a top level deployment
that attribute can be set by the user via the management API when the deployment is added
and its value should be used when making decisions like this. That runtime name must
include the relevant file extension. (For a subdeployment we internally set the
DeploymentUnit name, and there it will be the name of the VirtualFile representing the
subdeployment root, which must have the extension. This means DeploymentUnit.getName()
works for subdeployments too.)
The EjbJarParsingDeploymentUnitProcessor.isWar method should also use
DeploymentUnit.getName().
jboss-ejb3.xml is ignored for exploded deployments
--------------------------------------------------
Key: WFLY-14132
URL:
https://issues.redhat.com/browse/WFLY-14132
Project: WildFly
Issue Type: Bug
Components: EJB
Affects Versions: 14.0.1.Final, JBoss AS7 7.1.1.Final, 21.0.1.Final
Reporter: Jan-Willem Gmelig Meyling
Assignee: Cheng Fang
Priority: Major
Labels: ejb-jar.xml, jboss-ejb3.xml
{{EjbJarParsingDeploymentUnitProcessor}} distinguishes between a WAR and JAR deployment
based on the file extension of the name of the deployment root. For exploded deployments
however, this deployment root may be a folder without any file extension. As a result the
logic fails to detect either a JAR or WAR file and the {{ejb-jar.xml}} and
{{jboss-ejb3.xml}} files are ignored. A better way could be to determine the extension
from the name of {{DeploymentUnit}} instead.
Code from:
[
https://github.com/wildfly/wildfly/blob/master/ejb3/src/main/java/org/jbo...]
{code:java}
private static VirtualFile getDescriptor(final VirtualFile deploymentRoot, final
String descriptorName) {
// Locate the descriptor
final VirtualFile descriptor;
// EJB 3.1 FR 20.4 Enterprise Beans Packaged in a .war
if (isWar(deploymentRoot)) {
// it's a .war file, so look for the ejb-jar.xml in WEB-INF
descriptor = deploymentRoot.getChild(WEB_INF + "/" +
descriptorName);
} else if
(deploymentRoot.getName().toLowerCase(Locale.ENGLISH).endsWith(JAR_FILE_EXTENSION)) {
descriptor = deploymentRoot.getChild(META_INF + "/" +
descriptorName);
} else {
// neither a .jar nor a .war. Return
return null;
}
if (descriptor == null || !descriptor.exists()) {
// no descriptor found, nothing to do!
return null;
}
return descriptor;
}
{code}
I encountered this issue on WildFly 14.0.1.Final, but the code is also present in the
current master and goes back to versions as early as 7.1.