jBPM Console 6.2.0.Final / JBoss: Autenticação utilizando seu banco de dados

Neste post, vamos aprender como realizar a autenticação do jBPM Console a partir de um banco de dados.

Conforme consta na documentação, o jbpm console utiliza a autenticação padrão do JBoss, que se baseia em dois arquivos: users.properties e roles.properties.

O primeiro contém a lista de usuários válidos e suas respectivas senhas. O segundo contém os usuários e a lista de grupos ao qual ele pertence. Esse método de autenticação está definido dentro do WAR, no arquivo WEB-INF/jboss-web.xml:

<security-domain>other</security-domain>

Essa configuração indica que o workbench irá utilizar o modelo de autenticação que estiver especificado no security domain chamado “other” dentro do standalone-*.xml.

Por padrão, esse security domain estará configurado conforme abaixo:

<security-domain name="other" cache-type="default">
    <authentication>
        <login-module code="UsersRoles" flag="required">
            <module-option name="usersProperties" value="${jboss.server.config.dir}/users.properties"/>
            <module-option name="rolesProperties" value="${jboss.server.config.dir}/roles.properties"/>
        </login-module>
    </authentication>
</security-domain>

Ok, agora sabemos como funciona por padrão. Agora vamos fazer os ajustes necessários para que possamos validar os usuários em nossa base de dados:

<security-domain name="other" cache-type="default">
    <authentication>
        <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">
            <module-option name="dsJndiName" value="java:jboss/datasources/ExemploDS"/>
            <module-option name="principalsQuery" value="select senha as password from usuario where login = ?"/>
            <module-option name="rolesQuery" value="select g.nome as role, 'Roles' from usuario u inner join grupo g on (g.id = u.id_grupo) where u.login = ? union all select 'admin' as role, 'Roles'"/>
            <module-option name="hashAlgorithm" value="SHA-256"/>
            <module-option name="hashEncoding" value="hex"/>
        </login-module>
    </authentication>
</security-domain>

Temos dois “tricks” nesta configuração:

<module-option name="rolesQuery" value="select g.nome as role, 'Roles' from usuario u inner join grupo g on (g.id = u.id_grupo) where u.login = ? union all select 'admin' as role, 'Roles'"/>

Apenas usuários que pertencem as roles: admin, user e manager podem fazer logon. É provável que você não tenha essas roles cadastradas em sua tabela de grupos e provavelmente você não vai querer ficar limitado à essas 3 roles … o jeito então é retornar ambas de alguma forma. No exemplo eu utilizei uma union mas nada impede que você tenha uma função/procedure, uma tabela apenas para as roles, valores fixos, etc. O importante aqui é você saber que irá precisar de uma role que te autorize logar no console e você vai precisar de “roles” ou grupos para você criar seus processos ok?

    <module-option name="hashAlgorithm" value="SHA-256"/>
    <module-option name="hashEncoding" value="hex"/>

Essas duas linhas são opcionais e os valores vão depender da forma que suas senhas estão armazenadas em seu banco de dados. Se elas estiverem em plaintext, não será necessário nenhuma das duas linhas. Em meu caso, estou usando SHA-256 como criptografia e gravando os dados em hexadecimal.

A última configuração (confesso que não tenho 100% de certeza de que é necessária, se alguém souber, comente), é fazer com que a API (KIE Remote Services :: Cliente)  também utilize o mesmo método de autenticação:

<security-realm name="ApplicationRealm">
    <authentication>
        <jaas name="other"/>
    </authentication>
</security-realm>

Segue um bom material sobre security realms do JBoss: http://docs.jboss.org/jbossweb/3.0.x/realm-howto.html#DataSourceRealm

Até o próximo post o/

Tutorial de Instalação do jBPM 6.2 + PostgreSQL + JBoss 7.1 Final + Eclipse

Fala galera! O objetivo deste tutorial é guiá-los na instalação do jBPM 6.2.0.Final utilizando como base de dados o PostgreSQL. Não abordarei a instalação do PostgreSQL e do Ant pois não é o foco do tutorial.

AMBIENTE

Para este tutorial, estou utilizando o sistema operacional Ubuntu 14.04 mas nada impede que você utilize Windows ou qualquer outra distro Linux ok?

INGREDIENTES

  • Instalador do jBPM-6.2.0.Final
  • PostgreSQL
  • Ant
  • Uma boa conexão
  • Paciência

INSTALAÇÃO

Baixe o instalador: http://sourceforge.net/projects/jbpm/files/jBPM%206/jbpm-6.2.0.Final/jbpm-6.2.0.Final-installer-full.zip/download

Descompacte o arquivo no diretório “/opt” (ou em outro diretório de sua preferência)

Abra o arquivo build.properties que está na raiz do diretório “/opt/jbpm-installer”. O trabalho aqui é comentar/descomentar linhas, exceto a configuração do PostgreSQL que vamos adicionar.

As 3 primeiras linhas do arquivo indicam o diretório home da instalação, a snapshot e a release. Não é necessário fazer nenhuma alteração aqui.

install.home=./
snapshot.version=6.2.0-SNAPSHOT
release.version=6.2.0.Final

O próximo bloco diz respeito a versão do jBPM que iremos utilizar, como vamos trabalhar com a release, descomente as linhas abaixo e comente as demais:

jBPM.version=${release.version}
jBPM.url=https://repository.jboss.org/nexus/content/groups/public-jboss/org/drools/droolsjbpm-bpms-distribution/${jBPM.version}/droolsjbpm-bpms-distribution-${jBPM.version}-bin.zip

A próxima configuração é a respeito do WAR do jBPM Console que iremos instalar, em nosso caso, para JBoss AS 7:

jBPM.console.url=https://repository.jboss.org/nexus/content/groups/public-jboss/org/kie/kie-wb-distribution-wars/${jBPM.version}/kie-wb-distribution-wars-${jBPM.version}-jboss-as7.war

Eclipse + plugin jBPM e Drools:

droolsjbpm.eclipse.version=${release.version}
droolsjbpm.eclipse.url=https://repository.jboss.org/nexus/content/groups/public-jboss/org/drools/org.drools.updatesite/${droolsjbpm.eclipse.version}/org.drools.updatesite-${droolsjbpm.eclipse.version}.zip

e

eclipse.home=./eclipse
eclipse.clean.workspace=true

JBoss AS 7.1.1.Final:

jboss.server.version=as-7.1.1.Final
jboss.home=./jboss-${jboss.server.version}
jboss.download.url=http://download.jboss.org/jbossas/7.1/jboss-${jboss.server.version}/jboss-${jboss.server.version}.zip
jboss.server.conf.dir=${jboss.home}/standalone/configuration
jboss.server.deploy.dir=${jboss.home}/standalone/deployments
jboss.server.data.dir=${jboss.home}/standalone/data
jboss.clean.repository=true
jboss.war.type=${jboss.server.version}

O próximo é Dashboard. Dashboard é uma ferramenta utilizada para medir indicadores dos processos.

dashboard.version=${release.version}
dashboard.url=https://repository.jboss.org/nexus/content/groups/public-jboss/org/jbpm/dashboard/jbpm-dashboard-distributions/${dashboard.version}/jbpm-dashboard-distributions-${dashboard.version}-jboss-as7.war

E finalmente, o banco de dados. Por padrão, o jBPM usa o H2 como backend. Nós iremos utilizar o PostgreSQL 9.3 e a partir dessa configuração, fica fácil utilizar qualquer outro banco de dados.

Quem já tiver alguma experiência com módulos do JBoss, não terá nenhuma dificuldade aqui.
As duas linhas abaixo são respectivamente: O caminho de origem para o driver (jar) e a pasta do módulo no JBoss.

db.driver.jar=${install.home}/db/driver/${db.driver.jar.name}
db.driver.module.dir=${jboss.home}/modules/${db.driver.module.prefix}/main/

Faça o download do driver postgresql-9.3-1103.jdbc4.jar e salve-o na pasta “/opt/jbpm-installer/db/driver”.
No build.properties, comente as linhas referente ao H2 e acrescente as linhas abaixo:

#postgresql
db.name=postgresql
db.driver.module.prefix=org/postgresql
db.driver.jar.name=postgresql-9.3-1103.jdbc4.jar
db.driver.download.url=https://repository.jboss.org/nexus/content/repositories/thirdparty-uploads/postgresql/postgresql/9.1-902.jdbc4/postgresql-9.1-902.jdbc4.jar

Pronto. Depois de realizar essas alterações, seu arquivo build.properties deve se parecer com esse:

# NOTES for doing a release
# - replace all *.url variables with the variables marked as <RELEASE>
# - make sure all *.version variables = ${release.version}
# - set ${release.version} to the current release version.

install.home=./
snapshot.version=6.2.0-SNAPSHOT
release.version=6.2.0.Final

# the version of jBPM you want to use
# and the associated URL you want to get the dependencies from
# for example:
#<RELEASE>
#   jBPM.version=${release.version}
#   jBPM.url=https://repository.jboss.org/nexus/content/groups/public-jboss/org/jbpm/jbpm-distribution/${jBPM.version}/jbpm-distribution-${jBPM.version}-bin.zip
# or:
#<SNAPSHOT>
#   jBPM.version=${snapshot.version}
#   jBPM.url=https://hudson.jboss.org/hudson/job/jBPM/lastSuccessfulBuild/artifact/jbpm-distribution/target/jbpm-${jBPM.version}-bin.zip
jBPM.version=${release.version}
jBPM.url=https://repository.jboss.org/nexus/content/groups/public-jboss/org/drools/droolsjbpm-bpms-distribution/${jBPM.version}/droolsjbpm-bpms-distribution-${jBPM.version}-bin.zip

# the version of jBPM Console you want to use
# and the associated URL you want to get it from
# for example:
#<RELEASE>
# for AS7:
jBPM.console.url=https://repository.jboss.org/nexus/content/groups/public-jboss/org/kie/kie-wb-distribution-wars/${jBPM.version}/kie-wb-distribution-wars-${jBPM.version}-jboss-as7.war
# for EAP 6.4:
#   jBPM.console.url=http://repository.jboss.org/nexus/content/groups/public-jboss/org/kie/kie-wb-distribution-wars/${jBPM.version}/kie-wb-distribution-wars-${jBPM.version}-eap6_4.war
# for WildFly8:
#   jBPM.console.url=https://repository.jboss.org/nexus/content/groups/public-jboss/org/kie/kie-wb-distribution-wars/${jBPM.version}/kie-wb-distribution-wars-${jBPM.version}-wildfly8.war
# or:
#<SNAPSHOT>
#   jBPM.console.url=https://hudson.jboss.org/hudson/job/kie-wb-distributions/lastSuccessfulBuild/artifact/kie-wb/kie-wb-distribution-wars/target/kie-wb-${jBPM.version}-wildfly8.war

# the version of jBPM and Drools Eclipse plugin you want to use
# and the associated URL you want to get the dependencies from
# for example:
#<RELEASE>
#   droolsjbpm.eclipse.version=${release.version}
#   droolsjbpm.eclipse.url=https://repository.jboss.org/nexus/content/groups/public-jboss/org/drools/org.drools.updatesite/${droolsjbpm.eclipse.version}/org.drools.updatesite-${droolsjbpm.eclipse.version}.zip
# or:
#<SNAPSHOT>
#   droolsjbpm.eclipse.version=${snapshot.version}
#   droolsjbpm.eclipse.url=https://hudson.jboss.org/hudson/job/droolsjbpm-tools/lastSuccessfulBuild/artifact/drools-eclipse/org.drools.updatesite/target/org.drools.updatesite-${droolsjbpm.eclipse.version}.zip
droolsjbpm.eclipse.version=${release.version}
droolsjbpm.eclipse.url=https://repository.jboss.org/nexus/content/groups/public-jboss/org/drools/org.drools.updatesite/${droolsjbpm.eclipse.version}/org.drools.updatesite-${droolsjbpm.eclipse.version}.zip

# the home of your eclipse installation
# will be used to deploy the Eclipse plugin to
eclipse.home=./eclipse
eclipse.clean.workspace=true

# the home of your JBoss AS installation
# for example, for AS7:
jboss.server.version=as-7.1.1.Final
jboss.home=./jboss-${jboss.server.version}
jboss.download.url=http://download.jboss.org/jbossas/7.1/jboss-${jboss.server.version}/jboss-${jboss.server.version}.zip
jboss.server.conf.dir=${jboss.home}/standalone/configuration
jboss.server.deploy.dir=${jboss.home}/standalone/deployments
jboss.server.data.dir=${jboss.home}/standalone/data
jboss.clean.repository=true
#   IMPORTANT: make sure to also set the H2.version property (below) to 1.3.161
# or for EAP 6.4
#   jboss.server.version=eap-6.4.0
#   jboss.home=./jboss-eap-6.4
#   jboss.download.url=### you need to manually download the eap 6.4.0 zip and put it in the lib folder ###
#   jboss.server.conf.dir=${jboss.home}/standalone/configuration
#   jboss.server.deploy.dir=${jboss.home}/standalone/deployments
#   jboss.server.data.dir=${jboss.home}/standalone/data
#   jboss.clean.repository=true
# or for Wildfly8
#   jboss.server.wildfly.version=8.1.0.Final
#   jboss.server.version=wildfly-${jboss.server.wildfly.version}
#   jboss.home=./${jboss.server.version}
#   jboss.download.url=http://download.jboss.org/wildfly/${jboss.server.wildfly.version}/${jboss.server.version}.zip
#   jboss.server.conf.dir=${jboss.home}/standalone/configuration
#   jboss.server.deploy.dir=${jboss.home}/standalone/deployments
#   jboss.server.data.dir=${jboss.home}/standalone/data
#   jboss.clean.repository=true
jboss.war.type=${jboss.server.version}

# jboss.port.offset=0
# org.uberfire.nio.git.daemon.port=9418
# org.uberfire.nio.git.ssh.port=8001

# the version of Dashboard Builder you want to use
# and the associated URL you want to get it from
# for example:
#<RELEASE>
# for AS7:
dashboard.version=${release.version}
dashboard.url=https://repository.jboss.org/nexus/content/groups/public-jboss/org/jbpm/dashboard/jbpm-dashboard-distributions/${dashboard.version}/jbpm-dashboard-distributions-${dashboard.version}-jboss-as7.war
# for EAP 6.4:
#   dashboard.version=${release.version}
#   dashboard.url=https://repository.jboss.org/nexus/content/groups/public-jboss/org/jbpm/dashboard/jbpm-dashboard-distributions/${dashboard.version}/jbpm-dashboard-distributions-${dashboard.version}-eap6_4.war
# for Wildfly8:
#   dashboard.version=${release.version}
#   dashboard.url=https://repository.jboss.org/nexus/content/groups/public-jboss/org/jbpm/dashboard/jbpm-dashboard-distributions/${dashboard.version}/jbpm-dashboard-distributions-${dashboard.version}-wildfly8.war
# or:
#<SNAPSHOT>
#   dashboard.version=${snapshot.version}
#   dashboard.url=https://hudson.jboss.org/hudson/job/jbpm-dashboard/lastSuccessfulBuild/artifact/jbpm-dashboard-distributions/target/jbpm-dashbuilder-${dashboard.version}-wildfly8.war

# data base related properties
db.driver.jar=${install.home}/db/driver/${db.driver.jar.name}
db.driver.module.dir=${jboss.home}/modules/${db.driver.module.prefix}/main/
# default is H2
# H2.version=1.3.168
# db.name=h2
# db.driver.jar.name=h2-${H2.version}.jar
# db.driver.download.url=http://repo1.maven.org/maven2/com/h2database/h2/${H2.version}/h2-${H2.version}.jar
#other options are:
#mysql
#  db.name=mysql
#  db.driver.module.prefix=com/mysql
#  db.driver.jar.name=mysql-connector-java-5.1.18.jar
#  db.driver.download.url=https://repository.jboss.org/nexus/service/local/repositories/central/content/mysql/mysql-connector-java/5.1.18/mysql-connector-java-5.1.18.jar
#postgresql
db.name=postgresql
db.driver.module.prefix=org/postgresql
db.driver.jar.name=postgresql-9.3-1103.jdbc4.jar

Agora, vamos executar o instalador e esperar (bastante):

ant install.demo

Enquanto você espera a instalação finalizar, vamos configurar o BD:

  • Crie um novo banco de dados chamado jbpm
  • Vá até a pasta “/opt/jbpm-installer/db/ddl-scripts/postgres/”
  • Execute o script postgresql-jbpm-schema.sql e na sequência quartz_tables_postgres.sql

Quando a instalação finalizar, abra o arquivo “/opt/jbpm-installer/jboss-as-7.1.1.Final/bin/standalone.conf”, na linha 50, e altere as configurações como na linha abaixo:

-Xmx1024m -XX:MaxPermSize=512m

e na linha 52:

JAVA_OPTS="$JAVA_OPTS -Djboss.server.default.config=standalone-full.xml"

Abra o arquivo “/opt/jbpm-installer/jboss-as-7.1.1.Final/standalone/configuration/standalone-full.xml”, localize a seção datasource e adicione:

<datasource jta="true" jndi-name="java:jboss/datasources/jbpmDS" pool-name="jbpmDS" enabled="true" use-java-context="true" use-ccm="true">
    <connection-url>jdbc:postgresql://localhost:5432/jbpm</connection-url>
    <driver-class>org.postgresql.Driver</driver-class>
    <driver>postgresql</driver>
    <pool>
        <min-pool-size>2</min-pool-size>
        <max-pool-size>100</max-pool-size>
    </pool>
    <security>
        <user-name>postgres</user-name>
        <password>postgres</password>
    </security>
    <validation>
        <validate-on-match>false</validate-on-match>
        <background-validation>false</background-validation>
        <background-validation-millis>1</background-validation-millis>
    </validation>
    <statement>
        <prepared-statement-cache-size>64</prepared-statement-cache-size>
        <share-prepared-statements>true</share-prepared-statements>
    </statement>
</datasource>

E na seção drivers, acrescente:

<driver name="postgresql" module="org.postgresql">
    <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
</driver>

Se tudo estiver correto, você já pode iniciar o JBoss:

$ cd /opt/jbpm-installer/jboss-as-7.1.1.Final/bin/
$ ./standalone.sh -b 0.0.0.0

Se apareceu “Deployed” no terminal, você já pode acessar o jbpm-console: http://localhost:8080/jbpm-console

Espero que tudo tenha dado certo!

Um abraço e até o próximo post!

Pronova Rockey2 + Java

Estou em um novo projeto que foi necessário implementar licença de software utilizando tokens usb. Um amigo me indicou os tokens da Pronova (pronova.com.br) por ser simples de implementar e relativamente seguros. A diferença é que ele usou .NET e meu projeto é em Java e em Java sempre tem uma pegadinha do malandro 🙂

Lá vai eu pegar o sample do java que vem no cd de instalação e fazer os testes no eclipse. Segui as instruções (sic) do arquivo leia-me e apanhei feito mala velha.

Sempre que executava, me retornava o erro: java.lang.unsatisfiedlinkerror ou não encontrava o pacote “rockey2”.

Usei o DJ Decompiler para saber qual era o pacote que estava na tal classe “JRockey2.class” e não tinha pacote nenhum definido. Setei o pacote como sendo rockey2 e passou a apresentar o erro de classe duplicada.

Depois de muitas tentativas, achei o JNA (Java Native Access) e meus problemas acabaram. Joguei fora a classe JRockey2 que vem no SDK e criei uma interface como mostra os exemplos na wiki do JNA apontando para a dll Rockey2 e não a JRockey2.

Vamos a solução:

1. Baixe o jna.jar e platform.jar em https://github.com/twall/jna#download

2. Inclua essas libs no seu classpath

3. Se ainda não colocou, coloque as dlls do SDK na pasta C:\WINDOWS\System32

4. Criei seu wrapper, o meu ficou assim:

package com.wordpress.tidoc.security;

import com.sun.jna.Library;
import com.sun.jna.Native;

public interface JRockey2 extends Library
{
	JRockey2 INSTANCE = (JRockey2) Native.loadLibrary("Rockey2", JRockey2.class);

    public int RY2_Find();

    public int RY2_Open(int i, int j, int ai[]);

    public void RY2_Close(int i);

    public int RY2_GenUID(int i, int ai[], byte abyte0[], int j);

    public int RY2_Read(int i, int j, byte abyte0[]);

    public int RY2_Write(int i, int j, byte abyte0[]);

    public static final int AUTO_MODE = 0;
    public static final int HID_MODE = -1;
    public static final int ROCKEY2_DISABLE_WRITE_PROTECT = 0;
    public static final int ROCKEY2_ENSABLE_WRITE_PROTECT = 1;
    public static final int RY2ERR_SUCCESS = 0;
    public static final int RY2ERR_NO_SUCH_DEVICE = 0xa0100001;
    public static final int RY2ERR_NOT_OPENED_DEVICE = 0xa0100002;
    public static final int RY2ERR_WRONG_UID = 0xa0100003;
    public static final int RY2ERR_WRONG_INDEX = 0xa0100004;
    public static final int RY2ERR_TOO_LONG_SEED = 0xa0100005;
    public static final int RY2ERR_WRITE_PROTECT = 0xa0100006;
    public static final int RY2ERR_OPEN_DEVICE = 0xa0100007;
    public static final int RY2ERR_READ_REPORT = 0xa0100008;
    public static final int RY2ERR_WRITE_REPORT = 0xa0100009;
    public static final int RY2ERR_SETUP_DI_GET_DEVICE_INTERFACE_DETAIL = 0xa010000a;
    public static final int RY2ERR_GET_ATTRIBUTES = 0xa010000b;
    public static final int RY2ERR_GET_PREPARSED_DATA = 0xa010000c;
    public static final int RY2ERR_GETCAPS = 0xa010000d;
    public static final int RY2ERR_FREE_PREPARSED_DATA = 0xa010000e;
    public static final int RY2ERR_FLUSH_QUEUE = 0xa010000f;
    public static final int RY2ERR_SETUP_DI_CLASS_DEVS = 0xa0100010;
    public static final int RY2ERR_GET_SERIAL = 0xa0100011;
    public static final int RY2ERR_GET_PRODUCT_STRING = 0xa0100012;
    public static final int RY2ERR_TOO_LONG_DEVICE_DETAIL = 0xa0100013;
    public static final int RY2ERR_UNKNOWN_DEVICE = 0xa0100020;
    public static final int RY2ERR_VERIFY = 0xa0100021;
    public static final int RY2ERR_UNKNOWN_ERROR = 0xa010ffff;
}

5. Por último, faça a chamada em seu código assim:

int iRetcode = JRockey2.INSTANCE.RY2_Find();

]

Para quem tiver afim de conhecer mais sobre o JNA: http://en.wikipedia.org/wiki/Java_Native_Access e http://twall.github.com/jna/3.5.1/javadoc/

Abrassss

JasperServer – Backup/Export Repositório

O JasperServer é uma excelente opção gratuita para desenvolver relatórios de forma profissional, rápida (na maioria das vezes) e segura. Não sei porque parece que não ganhou muitos adaptos ou os usuários não costumam falar sobre a ferramenta :). É muito difícil achar algum material sobre Jasper/iReports. Então vou dando minhas trumbicadas diárias e postando aqui as soluções que encontro e/ou invento.

Hoje precisei publicar um repositório do JasperServer em um servidor de desenvolvimento. Já vi por ai que muita gente dizendo que faz o backup/export usando o dump do banco do jasper server. Não me pareceu uma opção muito segura e resolvi procurar uma outra forma de fazer e dai lembrei do js-export e js-import que usei para migrar do jasperserver 3.1 para o 3.5 (Upgrade do JasperServer 3.1 para o 3.5). Esses dois scripts, como o nome já diz, exportam e importam dados do repositório do JS. Para exportar todos os dados do repositório, use o comando:

Linux:

js-export.sh --everything --output-zip js-backup.zip

Windows:

js-export.bat --everything --output-zip js-backup.zip

Onde –everything diz que tudo será exportado, –output-zip indica que o formato de saída será um arquivo compactado e js-backup.zip é o arquivo de saída.

obs.: Os scripts citados estão no diretório <JASPERSERVER_HOME>/scripts

Para exportar apenas um ou N repositórios, basta usar a opção –uris.

Linux:

js-export.sh --uris /reports/samples,/reports/cms --output-zip js-backup.zip

Windows:

js-export.bat --uris /reports/samples,/reports/cms --output-zip js-backup.zip

Para importar os dados, execute o js-import:

Linux:

js-import.sh --input-zip js-backup.zip

Windows:

js-import.bat --input-zip js-backup.zip

Se o repositório já existir, use a opção –update.

Não se desespere se aparecer um erro do tipo:
blábláblá bundles.jsexceptions_messages, locale pt_BR blábláblá
jsexception.folder.details.not.found

ou ainda:
blábláblá jsexception.uri.not.found

Fique calmo, provavelmente foi um erro de digitação no js-export. Cuidado com as “/” e com as letras maiúsculas e minúsculas. Ao informar o caminho para o repositório, coloque extamente o caminho apresentado no JasperServer.

Abraços e até o próximo post.

Tomcat 6 – Falha ao inicializar serviço

Se ao tentar iniciar o tomcat 6 numa máquina com Windows XP você recebe o erro abaixo no log

=========================

[173 javajni.c] [error] Can’t create the specified module.
[764 prunsrv.c] [error] Failed creating java
D:\Programs\Java\jdk1.6.0\jre\bin\server\jvm.dll
[982 prunsrv.c] [error] ServiceStart returned 1

=========================

Basta copiar o arquivo msvcr71.dll da pasta bin do JRE ( JRE_HOME\bin\msvcr71.dll ) para a pasta windows ou para CATALINA_HOME\bin que seu problema estará resolvido.

Esse problema aconteceu comigo essa semana, duas máquinas com as mesmas versões de JRE, Tomcat e Windows mas apenas uma funcionava. E o mais engraçado é que a máquina que funcionava não tinha o arquivo msvcr71.dll nem na pasta Windows e muito menos na pasta bin do tomcat 😐 ????????

Mas por que isso acontece? … Só Deus e agora a Oracle sabem 🙂 – I Love PHP

Oracle compra Sun por US$ 7,4 bilhões

A Oracle comprou a desenvolvedora do Java e fabricante de servidores para empresas Sun Microsystems por 7,4 bilhões de dólares, impulsionando a desenvolvedora de softwares corporativos no setor de hardware.

A Oracle, que está no mercado de banco de dados e de aplicações comerciais (conhecidas pela sigla ERP), pagará 9,5 dólares por ação em dinheiro para a Sun, de acordo com a Oracle, aumento de 42% em relação ao preço do seu fechamento na sexta-feira (17/04).

http://idgnow.uol.com.br/mercado/2009/04/20/oracle-compra-sun-por-us-7-4-bilhoes/