I'm using Arquillian to run an integration test in Weblogic 12c, but it doesn't deploy in a remote server.
Nowadays, Arquillian is launched from a Windows Server via Jenkins and the remote server with Weblogic 12c on Linux.
I tried the follows:
from Windows to Solaris
from Windows to Windows
from Solaris to Solaris
I saw that Arquillian uses "weblogic.Deployer" and as we can see in https://docs.oracle.com/cd/E24329_01/web.1211/e24443/wldeployer.htm#DEPGD333 the deploy has a "-upload" argument.
-upload Transfers the specified deployment files, including deployment plans and alternate deployment descriptors, to the Administration Server. Use this option when you are on a remote machine and you cannot copy the deployment files to the Administration Server by other means. The application files are uploaded to the WebLogic Server Administration Server upload directory prior to distribution and deployment.
Has some way to indicate this argument to Arquillian use during deploy?
I'm using Weblogic 12.2.1.3.0.
ProtocoloTest.java
package br.gov.mg.fazenda.protocolonegocio.testeintegracao;
import static org.junit.Assert.assertNotNull;
import java.io.File;
import java.io.IOException;
import javax.ejb.EJB;
import javax.xml.parsers.ParserConfigurationException;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
import org.jboss.shrinkwrap.resolver.api.maven.ScopeType;
import org.junit.Test;
import org.junit.jupiter.api.DisplayName;
import org.junit.runner.RunWith;
import org.xml.sax.SAXException;
import com.unitech.ufw.exception.UFWException;
import gov.sefmg.sicaf.protocolo.controller.ProtocoloFacadeEJB3;
import gov.sefmg.sicaf.protocolo.model.ProtocoloModel;
import gov.sefmg.sicaf.util.identificacao.IdentificacaoCPF;
import gov.sefmg.sicaf.util.identificacao.SolicitanteModel;
@RunWith(Arquillian.class)
public class ProtocoloTest {
//Deve ser mantido com Deployents, outras configurações a injeção não funciona.
@Deployment
@DisplayName("Empacotando o EAR de testes")
public static Archive<?> createDeployment() throws ParserConfigurationException, SAXException, IOException {
File[] lFiles = Maven.configureResolver()
// Define para utilizar os artefatos disponíveis no repositório local (após o "clean install")
//.withClassPathResolution(false)
// Define as configurações do Maven que devem ser utilizadas (contém o usuário, senha e repositório)
.fromFile("C:/Ambiente/maven/apache-maven-3.5.2/conf/settings.xml")
// Carrega o arquivo "pom.xml" para a identificação das dependências
.loadPomFromFile("pom.xml")
// Importa tudo que é "provided" de forma a garantir que tudo necessário seja disponibilizado
.importDependencies(ScopeType.PROVIDED)
// Se baseia no próprio projeto a ser testado
.resolve("gov.sefmg:protocolonegocio:1.0.0")
// Garante que o próprio projeto seja incluído
.withTransitivity()
.asFile();
// Gera o JAR com as classes de teste
JavaArchive lJavaArchive = ShrinkWrap.create(JavaArchive.class, "testeArquillianProtocolo.jar")
.addClasses(ProtocoloTest.class)
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
//Criando o ear, não é necessario de jogar tudo, apenas o que achar necessário para os testes.
final EnterpriseArchive lEnterpriseArchive = ShrinkWrap.create(EnterpriseArchive.class, "testeArquillianProtocolo.ear")
.setApplicationXML("application.xml") // application.xml com configurações otimizadas, este arquivo esta presente em \src\test\resources
.addAsApplicationResource(new File("src/test/resources/weblogic-application.xml"))
.addAsLibrary(lJavaArchive)
.addAsLibraries(lFiles);
//Sysout no console do ear configurado, sempre verificar se foi criado corretamente com as configurações
System.out.println(lEnterpriseArchive.toString(true));
return lEnterpriseArchive;
}
@EJB(lookup="ProtocoloFacadeEJB3")
ProtocoloFacadeEJB3 protocoloFacadeEJB3;
@Test
@DisplayName("Testa a alteração de um protocolo (Atualmente só ocorre para ITCD). Falhará pois é um protocolo fake.")
public void testAlterarProtocoloInvalido() throws UFWException {
NumeroProtocolo lNumeroProtocoloFake = new NumeroProtocolo(999900000012L);
ProtocoloModel lProtocoloModel = new ProtocoloModel();
lProtocoloModel.setProtocolo(lNumeroProtocoloFake);
lProtocoloModel.setDataSolicitacao(new Date());
SolicitanteModel lSolicitante = new SolicitanteModel();
lSolicitante.setIdentificacao(new IdentificacaoCPF("88888888888"));
lSolicitante.setNome("Teste Arquillian");
lProtocoloModel.setSolicitante(lSolicitante);
try {
protocoloFacadeEJB3.alterar(lProtocoloModel);
// Se não lançar exceção, então indica que a validação falhou.
assertTrue(false);
} catch (SicafAplicacaoException e) {
assertTrue(e.getCodigoErro().equals(SicafConstantesDicionarioIf.PAR_REGISTRO_JA_REMOVIDO));
}
}
}
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>gov.sefmg</groupId>
<artifactId>projeto-sefmg</artifactId>
<version>5.8</version>
</parent>
<artifactId>protocolonegocio</artifactId>
<packaging>ejb</packaging>
<version>1.0.0</version>
<name>protocolonegocio</name>
<dependencies>
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.container</groupId>
<artifactId>arquillian-wls-remote-12.1.x</artifactId>
<version>1.0.1.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.shrinkwrap.descriptors</groupId>
<artifactId>shrinkwrap-descriptors-impl-javaee</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-impl-maven</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-api-maven-embedded</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.5.0-M1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.4.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.4.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.opentest4j</groupId>
<artifactId>opentest4j</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-bom</artifactId>
<version>1.4.1.Final</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-bom</artifactId>
<version>3.1.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.jboss.shrinkwrap.descriptors</groupId>
<artifactId>shrinkwrap-descriptors-bom</artifactId>
<version>2.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
.
.
.
</project>
arquillian.xml
<?xml version="1.0"?>
<arquillian
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://jboss.org/schema/arquillian"
xsi:schemaLocation="http://jboss.org/schema/arquillian
http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
<engine>
<!-- Exporta o EAR gerado para posterior analise. -->
<property name="deploymentExportPath">target/deployments</property>
</engine>
<!-- https://docs.jboss.org/author/display/ARQ/WLS+12.1+-+Remote -->
<container qualifier="weblogic" default="true">
<protocol type="Servlet 3.0" />
<configuration>
<!-- Necessario utilizar como base o 12.1 pois as bibliotecas do 12.2
tem conflito com o Arquillian e lancam excecao. -->
<property name="wlHome">C:\Ambiente\as\Oracle\Middleware\wlserver_12.1</property>
<!-- Necessario para executar diretamente a classe do teste de integracao.
Para o funcionamento via "clean install" eh necessario ter as propriedades
abaixo configuradas no "pom.xml" ou passadas via argumentos junto com o "clean
install", visto que elas sao sobrescritas via "systemPropertyVariables" do
plugin "maven-failsafe-plugin". -->
<property name="adminUrl">t3://testarquillian:7001</property>
<property name="adminUserName">weblogic</property>
<property name="adminPassword">welcome1</property>
<property name="target">AdminServer</property>
</configuration>
</container>
</arquillian>
application.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<application xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="7"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/application_7.xsd">
<display-name>ear</display-name>
<module>
<ejb>lib/protocolonegocio-1.0.0.jar</ejb>
</module>
<library-directory>lib</library-directory>
</application>
weblogic-application.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wls:weblogic-application
xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-application"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/javaee_7.xsd http://xmlns.oracle.com/weblogic/weblogic-application http://xmlns.oracle.com/weblogic/weblogic-application/1.7/weblogic-application.xsd">
<!--weblogic-version:12.2.1 -->
<wls:application-param>
<wls:param-name>webapp.encoding.default</wls:param-name>
<wls:param-value>UTF-8</wls:param-value>
</wls:application-param>
<wls:library-ref>
<wls:library-name>siare-client</wls:library-name>
</wls:library-ref>
<wls:library-ref>
<wls:library-name>lib-sef</wls:library-name>
</wls:library-ref>
<wls:library-ref>
<wls:library-name>siare-libs</wls:library-name>
</wls:library-ref>
</wls:weblogic-application>
Arquillian is launching the error below.
org.jboss.arquillian.container.spi.client.container.DeploymentException: java.lang.RuntimeException: [Deployer:149003]Unable to access application source information in "/Windows/TEMP/arquillian4372177899218720179testeArquillianProtocolo.ear/testeArquillianProtocolo.ear" for application "testeArquillianProtocolo". The specific error is: No application files exist.
Stacktrace
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running ProtocoloTest
Problem creating dummy orb: org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 203 completed: No
testeArquillianProtocolo.ear:
/META-INF/
/META-INF/application.xml
/META-INF/weblogic-application.xml
/lib/
/lib/testeArquillianProtocolo.jar
/lib/junit-platform-launcher-1.5.0-M1.jar
/lib/apiguardian-api-1.0.0.jar
/lib/junit-platform-engine-1.5.0-M1.jar
/lib/junit-vintage-engine-5.3.1.jar
/lib/junit-4.12.jar
/lib/hamcrest-core-1.3.jar
/lib/junit-jupiter-api-5.4.2.jar
/lib/junit-platform-commons-1.4.2.jar
/lib/junit-jupiter-engine-5.4.2.jar
/lib/opentest4j-1.1.1.jar
/protocolonegocio-1.0.0.jar
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 11.438 s <<< FAILURE! - in ProtocoloTest
[ERROR] ProtocoloTest Time elapsed: 11.438 s <<< ERROR!
org.jboss.arquillian.container.spi.client.container.DeploymentException: java.lang.RuntimeException: [Deployer:149003]Unable to access application source information in "/Windows/TEMP/arquillian4372177899218720179testeArquillianProtocolo.ear/testeArquillianProtocolo.ear" for application "testeArquillianProtocolo". The specific error is: No application files exist.
Caused by: javax.management.RuntimeMBeanException: java.lang.RuntimeException: [Deployer:149003]Unable to access application source information in "/Windows/TEMP/arquillian4372177899218720179testeArquillianProtocolo.ear/testeArquillianProtocolo.ear" for application "testeArquillianProtocolo". The specific error is: No application files exist.
Caused by: java.lang.RuntimeException: [Deployer:149003]Unable to access application source information in "/Windows/TEMP/arquillian4372177899218720179testeArquillianProtocolo.ear/testeArquillianProtocolo.ear" for application "testeArquillianProtocolo". The specific error is: No application files exist.
[INFO]
[INFO] Results:
[INFO]
[ERROR] Errors:
[ERROR] ProtocoloTest » Deployment java.lang.RuntimeException: [Deployer:149003]Unable...
[INFO]
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0
[INFO]
[INFO]
[INFO] --- maven-failsafe-plugin:3.0.0-M3:verify (default) @ protocolonegocio ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 17.976 s
[INFO] Finished at: 2019-06-13T16:31:17-03:00
[INFO] Final Memory: 16M/491M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-failsafe-plugin:3.0.0-M3:verify (default) on project protocolonegocio: There are test failures.
[ERROR]
[ERROR] Please refer to C:\Jenkins\jobs\AMBIENTE SIARE QUEBRA DE ARQUITETURA\jobs\SIARE (QA) - PROTOCOLO - NEGOCIO - HOM - TESTE\workspace\negocio\..\negocio\target\failsafe-reports for the individual test results.
[ERROR] Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m; support was removed in 8.0
Build step 'Invoke top-level Maven targets' marked build as failure
[WeblogicDeploymentPlugin] - Build didn't finish successfully. The plugin execution is disabled.
[INFO] ------------------------------------------------------------------------
[INFO] DEPLOYMENT UNSTABLE
[INFO] ------------------------------------------------------------------------
Finished: FAILURE
Can anyone give a tip?
I found a solution.
I changed my project to use "arquillian-wls-remote-rest" instead of the previous.
pom.xml
I changed the dependency...
<dependency>
<groupId>org.jboss.arquillian.container</groupId>
<artifactId>arquillian-wls-remote-12.1.x</artifactId>
<version>1.0.1.Final</version>
<scope>provided</scope>
</dependency>
For the dependency...
<dependency>
<groupId>org.jboss.arquillian.container</groupId>
<artifactId>arquillian-wls-remote-rest</artifactId>
<version>1.0.1.Final</version>
<scope>test</scope>
</dependency>
And in the file "arquillian.xml" I changed the protocol from "t3" to "http".
I hope I've helped.