Arquillian 不部署在 Weblogic 12c 远程服务器中

Arquillian doesn't deploy in Weblogic 12c remote server

我正在使用 Arquillian 运行 Weblogic 12c 中的集成测试,但它没有部署在远程服务器中。

如今,Arquillian 是通过 Jenkins 从 Windows 服务器启动的,远程服务器在 Linux 上使用 Weblogic 12c 启动。

我尝试了以下方法:

我看到 Arquillian 使用“weblogic.Deployer”,正如我们在 https://docs.oracle.com/cd/E24329_01/web.1211/e24443/wldeployer.htm#DEPGD333 中看到的 deploy有一个“-上传”参数。

-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.

有什么方法可以在部署期间将此参数指示给 Arquillian 使用?

我正在使用 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 启动时出现以下错误。

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.

堆栈跟踪

[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

有人可以给点小费吗?

我找到了解决方案。

我将我的项目更改为使用 "arquillian-wls-remote-rest" 而不是以前的。


pom.xml

我更改了依赖...

<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.arquillian.container</groupId>
    <artifactId>arquillian-wls-remote-rest</artifactId>
    <version>1.0.1.Final</version>
    <scope>test</scope>
</dependency>

并且在文件“arquillian.xml”中,我将协议从“t3”更改为“http".

希望对您有所帮助。