Lors du démarrage de maven avec les paramètres de test, j'obtiens l'exception mentionnée ci-dessus. Lors de la création du déploiement de test d'intégration, je reçois les éléments suivants:Impossible de traiter les interfaces métier pour la classe EJB
org.jboss.as.server.deployment.DeploymentUnitProcessingException: WFLYEJB0466: Failed to process business interfaces for EJB class class ..contract.ContractMockService
La classe au sujet ressemble à ceci:
package ..integration.bestand.contract;
import java.time.LocalDate;
import java.util.ArrayList;
import javax.ejb.Local;
import javax.ejb.Stateless;
import org.apache.deltaspike.core.api.exclude.Exclude;
import org.apache.deltaspike.core.api.projectstage.ProjectStage;
...
@Exclude(ifProjectStage = {
ProjectStage.Production.class,
ProjectStage.Staging.class,
..Integration.class,
..Qs.class,
..PatchQs.class
})
@Stateless
@Local(IContractIntService.class)
public class ContractMockService implements IContractIntService {
...
return ContractBuilder.build();
}
}
L'interface IContractIntService
ressemble à:
package ..integration.bestand.contract;
import javax.ejb.Local;
...
@Local
public interface IContractIntService {
public enum State {
SUCCESS,
UNKNOWN_ERROR,
NOT_FOUND;
// TODO: Stati für Fehler hier definieren
}
//Interface comment
Result<State, ContractDTO> retrieveContract(String contractIdentifier);
}
Note: L'interface est dans un autre projet qui est inclus via maven.
Le test ressemble à ceci:
package ..api.contractregistration.service;
import static org.hamcrest.CoreMatchers.any;
import static org.hamcrest.MatcherAssert.assertThat;
import java.util.logging.Logger;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.rules.TestWatcher;
import org.junit.runner.RunWith;
import ..core.test.IntegrationTest;
@RunWith(Arquillian.class)
@Category(IntegrationTest.class)
public class ContractRegistrationIntegrationTest {
protected final Logger log = Logger.getLogger(ContractRegistrationIntegrationTest.class.getCanonicalName());
@Rule
public TestWatcher watcher = new TestWatcher() {
@Override
protected void starting(org.junit.runner.Description description) {
log.info(String.format("---> Starting test: %s", description));
}
@Override
protected void failed(Throwable e, org.junit.runner.Description description) {
log.info(String.format("<--- Test failed: %s", description));
}
@Override
protected void succeeded(org.junit.runner.Description description) {
log.info(String.format("<--- Test succeeded: %s", description));
}
};
@Deployment
public static WebArchive createDeployment() {
WebArchive result = ShrinkWrap.create(WebArchive.class)
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml")
.addAsResource("META-INF/persistence.xml", "META-INF/persistence.xml")
.addPackages(true, "..ejb.portal")
.addPackages(true, "..core")
.deletePackages(true, "..core.config.deltaspike")
.addPackages(true, "..integration")
.addPackages(true, "..api")
.addPackages(true, "org.apache.deltaspike.core")
.addPackages(true, "..ejb.util");
System.out.println("########## TEST DEPLOYMENT########" + result.toString(true));
return result;
}
@Test
public void test() {
String tempPw = "bla"; // result.getDto();
assertThat(tempPw, any(String.class));
}
}
La chose remarquable à propos de ce test est que je ne suis même pas quoi que ce soit à l'aide de la MockService
dans un test.
La configuration de maven ressemble à ceci:
Objectifs: clean test -Parq-wildfly-managed
Arguments VM: -Djboss.home="myLocalWildflyDirectory"
JRE
JAVA_HOME
est-il réglé à jdk8.
La dernière chose est mon pom, en particulier la partie du conteneur "ARQ-wildfly gérés":
...
<profile>
<!-- An optional Arquillian testing profile that executes tests in your WildFly instance, e.g. for build server -->
<!-- This profile will start a new WildFly instance, and execute the test, shutting it down when done -->
<!-- Run with: mvn clean test -Parq-wildfly-managed -->
<id>arq-wildfly-managed</id>
<dependencies>
<dependency>
<groupId>org.wildfly.arquillian</groupId>
<artifactId>wildfly-arquillian-container-managed</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>de.ivi.torino</groupId>
<artifactId>torino-integration-bestand-mock-ejb</artifactId>
<version>1.0.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>de.ivi.torino</groupId>
<artifactId>torino-integration-docservice-mock-ejb</artifactId>
<version>1.0.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>de.ivi.torino</groupId>
<artifactId>torino-integration-bestand-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
</profile>
...
Une build Maven normale avec clean verify package install
(juste pas de test inclus) construit avec succès.
Note: Pour cet article, j'ai renommé les packages afin d'exclure les spécialisations de l'entreprise.
Des erreurs similaires suggèrent de corriger le déploiement de ShrinkWrap, mais j'ai inclus pratiquement tous les paquets existants et j'ai même essayé d'inclure explicitement la classe d'interface. Mais encore, la même erreur reste.
Ce qui pourrait causer cela?
Vous avez semblé mal comprendre le cycle de vie de Maven. Si vous appelez maven via 'mvn clean, vérifiez l'installation du paquet' que plusieurs choses tournent en double ou triple. Ce dont vous avez simplement besoin est: '' mvn clean install'' ou '' mvn clean verify'' ... Recommandez de lire https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html – khmarbaise
@khmarbaise merci pour votre suggestion. Je peux clairement dire que je ne suis pas un expert chez maven. J'utilisais auparavant vos config run mentionnés et ils fonctionnaient, mais ma question ne visait pas les builds de travail. La construction 'test' est à l'origine de l'erreur mentionnée ci-dessus et me laisse dans l'ignorance ... – EngJon
Peut-être que votre IContractService ne peut pas être chargé en raison de dépendances manquantes. Vous pouvez vouloir enregistrer votre journal sous la catégorie org.jboss.weld.Bootstrap au niveau INFO pour vous assurer que toutes les définitions de vos beans sont correctement enregistrées. – Franck