dfdfdfgdfd
Mostrando postagens com marcador Java. Mostrar todas as postagens
Mostrando postagens com marcador Java. Mostrar todas as postagens

quinta-feira, 5 de julho de 2012

Adicionado JAR ao deploy do Arquillian

Arquillian é um framework que torna facil a construção de testes de integração com aplicações Java EE.
A execução dos testes se baseia em montar deploymentes com as dependências especificas de cada teste.
o trecho de código a seguir mostra como adicionar libs não disponíveis no container Jboss 7, quando da execução dos testes.

import org.jboss.shrinkwrap.resolver.api.DependencyResolvers;
import org.jboss.shrinkwrap.resolver.api.maven.MavenDependencyResolver;


MavenDependencyResolver resolver = DependencyResolvers.use(
MavenDependencyResolver.class).loadMetadataFromPom("pom.xml");

Estas classes são da API Shrink Wrap que neste caso ira manipular as propriedades do maven
para identificar os JARs.

Abaixo segue exemplo completo de utilização, o trecho "resolver.artifact("org.apache.commons:commons-lang3:3.0.1").resolveAsFiles()" é o responsavel por buscar os arquivos.


@Deployment
public static Archive<?> createDeployment() {
        //classes de shrinkwrap
MavenDependencyResolver resolver = DependencyResolvers.use(
  MavenDependencyResolver.class).loadMetadataFromPom("pom.xml");
         return ShrinkWrap
.create(WebArchive.class, "test.war")
.addAsLibraries(
resolver.artifact("org.apache.commons:commonslang3:3.0.1").resolveAsFiles())
.addPackages(true, Dao.class.getPackage(), Driver.class.getPackage())
.addAsResource("META-INF/test-persistence.xml",
"META-INF/persistence.xml").addAsResource("import.sql")
.addAsWebInfResource("test-ds.xml")
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
}

}

sábado, 24 de março de 2012

WELD-001408 Unsatisfied dependency

Um dos motivos para o erro "WELD-001408 Unsatisfied dependency" é que a classe que você esta tentando injetar não encontra suas dependências, então o JBossAS 7 pode mascarar este erro com o WELD-001408, veja exemplo:

public class Equipe1{
    import org.apache.commons.lang3.StringUtils
}

public class Fabrica{
    @Inject private Equipe1 equipe1;
}

Se ao publicar sua aplicação e a classe "org.apache.commons.lang3.StringUtils" não estiver no classpath, sempre será lançado o erro "WELD-001408" ao tentar injetar Fabrica.equipe1. Para solucionar é preciso adicionar as dependências necessárias no war, ear ou no próprio servidor de aplicação

quarta-feira, 15 de fevereiro de 2012

Usando javac

Compilar classes com javac adicionando mais de um jar ao classspath:

javac -classpath lib/app1.jar:lib/app2.jar /projeto/src/Main.java -d /projeto/classes

Atenção: No Liniux o separador  é ":" e no windows é ";"

Fonte:
http://docs.oracle.com/javase/1.5.0/docs/tooldocs/solaris/javac.html

domingo, 14 de agosto de 2011

java.lang.ClassFormatError: Absent Code

Ao parsear os metodos de um Entity JPA e vrificar se o mesmo possui determinada anotação (@IntegracaoColuna) foi detectado o erro, pois não era possivel identificar os atributos e metodos das anotações JPA. Pesquisando descobri que o problema estava nos jar do javaee 6 que estava usando.

Código de teste onde o erro foi detectado:

Entidade entidade = new Entidade();
Method[] methods = Class.forName(NOME_CLASSE.getMethods();
String valor = "73";
for (Method m : methods) {
    if (m.isAnnotationPresent(IntegracaoColuna.class)) {
        m.invoke(entidade, stringvalor);
    }
}

Erro: java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/persistence/GenerationType

Problema: A dependência javaaee 6 não estava sendo carregada pelo maven e, tempo de execução.

<dependency>
    <groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>${javaee-api.version}</version>
<scope>provided</scope>
</dependency>

Solução: Tentei modificar o scope para compile e test, mas sem sucesso. Então peguei outro pacote de dependêcncias do javaee 6, a especificação Jboss (jboss-javaee-6.0):

<dependency>
    <groupId>org.jboss.spec</groupId>
<artifactId>jboss-javaee-6.0</artifactId>
    <version>2.0.0.Final</version>
<type>pom</type>
<scope>provided</scope>
</dependency>

Carregar arquivos do resources em projetos maven


Carregar arquivos do resources em projetos maven:

InputStream in = getClass().getClassLoader().getResourceAsStream("arquivo.txt");

Atenção:
Código digo em "/projeto/src/java" acessara o resources "/projeto/src/resources"

Código digo em "/projeto/src/test/java" acessara o resources "/projeto/src/test/resources"