Histórico da Página
...
Não se esqueça de configurar a variável de ambiente JAVA_HOME no seu ambiente, mas, forneceremos um bootstrap pro Intellector, onde essa variável é configurada, mas você pode querer colocá-la em outro lugar; não se esqueça dela! Embora a localização da instalação da JDK seja livre, sugerimos criar uma pasta “<drive>:\opt” no Windows ou usar o “/opt” no Linux; ajuda para propósitos de suporte. Instalando em sistemas Linux, tenha bastante cuidado com as permissões de escrita para owner/group para o diretório do JBoss, pois o Intellector vai precisar escrever nesse diretório.
JBoss
...
JBoss
O Intellector foi testado nas versões JBoss 4.2.3 e JBoss 7 (7.1.1). Você pode fazer o download do JBoss, para qualquer plataforma do seguinte site: http://www.jboss.org/jbossas/downloads/
Este é um bom lugar para tirar dúvidas e procurar dicas sobre o JBoss… http://wiki.jboss.org/
Instalando…
...
Após instalar a Java JDK e o JBoss nos locais apropriados, faça um pequeno teste de verificação da instalação, subindo o JBoss (JBOSS_HOME/bin/run.sh ou run.bat no Windows); para verificar se tudo foi bem, você estará apto a abrir a url http://localhost:8080/web-console de administração do application server.
Evite instalar JDK e JBoss em diretórios que contenham espaços no nome, como “C:\Arquivo de Programas” do Windows. Conheça mais sobre JBoss Enterprise Application Platform.
...
Bootstrap para JBoss/Intellector
...
Os scripts de bootstrap para o Intellector são simples, precisando apenas de pequenas modificações no que concerne a memória e variáveis de ambientes. Sugiro usar o nome “run-intellector.sh” no Linux/Unix e “run-intellector.bat” no Windows e, deve ficar emJBOSS_HOME/bin com permissão explícita de execução (básico para os linuxers!)
...
- no Linux/Unix; observe que coloco explicitamente a versão do JBoss; o ideal é criar um link simbólico e usar somente /opt/jboss e, também uso um IP 192.168.0.185, que provavelmente não será o seu, tanto em testes como em produção!
- teremos mais abaixo, um arquivo de propriedades usadas pelo Intellector e deve ficar em JBOSS_HOME/bin…
- Não use a variável de ambiente -Duser.dir=seu_dir, pois isso impede o Intellector de compilar as políticas!
...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/bin/bash # alguns snipets para o bootstrap do Intellector export JAVA_OPTS= "-Xms512m -Xmx536m -XX:PermSize=128m -XX:MaxPermSize=128m -Xss128k -Dintellector.datadir=/home/jboss/intellector -Dpersistence.configuration=./persistence.properties" # exportar a variavel JBOSS_HOME, devido a compilacao de politicas export JBOSS_HOME= /opt/jboss-4 .2.3.GA # a library log4j deve estar incluido no classpath, inprescindivel na # compilacao de politicas; simplemente não compila as políticas export JBOSS_CLASSPATH=$JBOSS_HOME /server/default/lib/log4j .jar # inicia o JBoss numa instancia e IP especificos . /run .sh -c default --host 192.168.0.185 |
No Windows…
...
1 2 3 4 5 6 7 8 9 10 11 12 | rem alguns snipets para o bootstrap do Intellector set JAVA_OPTS=-Xms512m -Xmx536m -XX:PermSize=128m -XX:MaxPermSize=128m -Xss128k -Dintellector.datadir=c: /java/intellector-files rem exportar a variavel JBOSS_HOME, devido a compilacao de politicas set JBOSS_HOME=c:\java\jboss-4.2.3.GA rem a library log4j deve estar incluido no classpath, inprescindivel na rem compilacao de politicas; simplemente não compila as políticas set JBOSS_CLASSPATH=%JBOSS_HOME%\server\default\lib\log4j.jar rem inicia o JBoss numa instancia e IP especificos . /run .bat -c default --host 192.168.0.185 |
Sem a linha JBOSS_CLASSPATH=$JBOSS_HOME/server/default/lib/log4j.jar no bootstrap, o Intellector não compilará as políticas!
...
Área de dados para o Intellector
...
O Intellector tem uma característica de persistir alguns dados no File System da plataforma, seja persistência em XML (JAXB), seja dos plugins de acessos, políticas e layouts de políticas. Esse local de persistência, é um diretório ou uma árvore de diretórios. Você pode verificar, que no arquivo de bootstrap, existe uma variável intellector.datadir que deve apontar para um diretório válido, onde ocorrerá a persistência e o site criará o restante dos diretórios; veja uma árvore de diretórios criada pelo Intellector abaixo:
...
Nunca MODIFIQUE NADA nos diretórios abaixo de intellector.datadir!
- considerando intellector.datadir=/home/intellector como diretório raiz…
- /home/intellector/acessos – diretório de instalação dos plugins de acesso; o Intellector cria uma pasta para cada acesso;
- /home/intellector/key – diretório para as licenças do Intellector;
- /home/intellector/dados – diretório raiz para persistência de cadastros (usuários, perfis, plugins, auditorias, etc.)
- /home/intellector/dados/person – persistência de usuários cadastrados
- /home/intellector/dados/audit – persistência de auditoria de execução de políticas (intellector.auditpolicy=true/false)
- /home/intellector/dados/plugin – persistências dos dados dos plugins instalados
- /home/intellector/dados/layouts – persistências de todos os layouts das políticas
- /home/intellector/dados/policy – persistências de todos as políticas enviadas do servidor
- /home/intellector/politicas – onde serão mantidas as classes das políticas compiladas
- /home/intellector/politicas/classes
- /home/intellector/politicas/classes/br
- /home/intellector/politicas/classes/br/com
- /home/intellector/politicas/classes/br/com/tools
- /home/intellector/politicas/classes/br/com/tools/politicas
- /home/intellector/tarifacao – pasta para os arquivos de Tarifação
- Se houver necessidade de fazer uma “purga” nesse datadir, baixe a instância ou instâncias se o datadir for compartilhado, deixe apenas a pasta key com a licença e, suba novamente a(s) instância(s); pronto, o Intellector reconstruirá o datadir com as configurações básicas.
...
Instalando uma Licença para o Intellector
...
O Intellector trabalha com 3 (três) modelos de licenciamento, enterprise, limited e trial; essas licenças estarão contidas em um único arquivo nomeado intellector.key (outro nome não será reconhecido) que deverá ser colocado no diretório ${intellector.datadir}/key; ela poderá ser copiada para esse local a qualquer momento, não necessitando de qualquer intervenção no servidor.
- Tipos de licenças:
- enterprise – totalmente livre para execução de qualquer política sem data de expiração
- limited – determinada por um Tipo específico e uma data de expiração ou não
- trial – Tipos de políticas livres e com uma data de expiração
...
Deployment do Intellector no JBoss
Considerando que o item instalando o JBoss foi seguido, o próximo passo será o deployment (instalação) do pacote intellector.war em uma instância do JBoss.
Sigamos os passos…
- copiar intellector.war dentro do diretório deploy…
- se for uma atualização de versão, simplesmente remova o intellector.war, ANTES de extrair a nova versão; é boa prática excluir as pastas log, tmp e work, situado abaixo da instância, no caso JBOSS_HOME/server/default/log, tmp,… se quiser, pode guardar os logs, tmp e work; você não irá precisar deles.
- Se for atualização, siga o sugerido acima.
...
Saiba mais sobre estruturas de diretórios do JBoss.
Iniciando o JBoss
...
Se tudo foi bem, e os passos foram seguidos, iniciar o JBoss é a parte trivial; no diretórioJBOSS_HOME/bin, inicie o batch, simplesmente digitando ./run-intellector.sh (linux/unix) ou run.bat no Windows; abaixo o início e fim do bootstrap do JBoss:
- iniciando…
...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | ========================================================================= JBoss Bootstrap Environment JBOSS_HOME: /opt/jboss-4 .2.3.GA JAVA: /opt/jdk1 .6.0_10 /bin/java JAVA_OPTS: -Dprogram.name=run.sh -server -Xms512m -Xmx536m -XX:PermSize=128m -XX:MaxPermSize=128m -Xss128k -Dintellector.datadir= /home/jboss/intellector-files -Djava.net.preferIPv4Stack= true CLASSPATH: /opt/jboss-4 .2.3.GA /server/default/lib/log4j .jar: /opt/jboss-4 .2.3.GA /bin/run .jar: /opt/jdk1 .6.0_10 /lib/tools .jar ========================================================================= 17:25:25,676 INFO [Server] Starting JBoss (MX MicroKernel)... 17:25:25,708 INFO [Server] Release ID: JBoss [Trinity] 4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date =200807181417) 17:25:25,710 INFO [Server] Home Dir: /opt/jboss-4 .2.3.GA 17:25:25,710 INFO [Server] Home URL: file : /opt/jboss-4 .2.3.GA/ |
pronto pra atender requisições…
...
1 2 3 4 5 | 17:26:05,961 INFO [intellector] ----------------------------------------------------------- 17:26:05,962 INFO [intellector] --------- Intellector configurado com sucesso... ---------- 17:26:05,962 INFO [intellector] ----------------------------------------------------------- 17:26:06,146 INFO [TomcatDeployer] deploy, ctxPath= /jmx-console , warUrl=... /deploy/jmx-console .war/ 17:26:07,318 INFO [Server] JBoss (MX MicroKernel) [4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date =200807181417)] Started in 21s:602ms |
Configurações adicionais
...
Normalmente, ajustes adicionais, ou tuning, dependem de plataforma, número de requisições, escalabilidade, multi-ip, dentre outras; a mais comum é alterar a porta onde o container irá atender, default é a 8080. Outros casos, como HTTPS ou load balancer, envolvendo o Apache, devem ser analisadas e não fazem parte do escopo desse manual.
...
Configurando Pool de Conexões – JNDI
- Os datasources são configurados em arquivos xxx-ds.xml (onde xxx pode ser qualquer nome) que deverão ser inseridos no diretório deploy do servidor da aplicação. No exemplo usando JBoss estão em: C:\java\jboss-4.2.3.GA\server\default\deploy).
...
Exemplo datasource Oracle…
...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <? xml version = "1.0" encoding = "UTF-8" ?> < datasources > < local-tx-datasource > < jndi-name >jdbc/OracleDS</ jndi-name > <!-- Here are a couple of the possible OCI configurations. For more information, see [http://otn.oracle.com/docs/products/oracle9i/doc_library/release2/java.920/a96654/toc.htm] <connection-url>jdbc:oracle:oci:@youroracle-tns-name</connection-url> or <connection-url>jdbc:oracle:oci:@(description=(address=(host=youroraclehost)(protocol=tcp)(port=1521))(connect_data=(SERVICE_NAME=yourservicename)))</connection-url> Clearly, its better to have TNS set up properly. --> < driver-class >oracle.jdbc.driver.OracleDriver</ driver-class > < user-name >cartao_h</ user-name > < password >uma_senha_qualquer</ password > <!-- Uses the pingDatabase method to check a connection is still valid before handing it out from the pool --> <!--valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name--> <!-- Checks the Oracle error codes and messages for fatal errors --> < exception-sorter-class-name >org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</ exception-sorter-class-name > <!-- sql to call when connection is created <new-connection-sql>some arbitrary sql</new-connection-sql> --> <!-- sql to call on an existing pooled connection when it is obtained from pool - the OracleValidConnectionChecker is prefered <check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql> --> <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) --> < metadata > < type-mapping >Oracle10g</ type-mapping > </ metadata > </ local-tx-datasource > </ datasources > |
Exemplo datasource PostgreSQL 9.x
...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <? xml version = "1.0" encoding = "UTF-8" ?> < datasources > < no-tx-datasource > < jndi-name >intellector/totvs</ jndi-name > < driver-class >org.postgresql.Driver</ driver-class > < user-name >postgres</ user-name > < password >esqueci_me_dela</ password > <!-- The minimum connections in a pool/sub-pool. Pools are lazily constructed on first use --> < min-pool-size >1</ min-pool-size > <!-- The maximum connections in a pool/sub-pool --> < max-pool-size >30</ max-pool-size > </ no-tx-datasource > </ datasources > |
Exemplo datasource SqlServer2008…
...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <? xml version = "1.0" encoding = "UTF-8" ?> < datasources > < no-tx-datasource > < jndi-name >jdbc/tools</ jndi-name > < connection-url >jdbc:jtds:sqlserver://192.168.0.214:1433/totvs_h_esquema;tds=8.0;lastupdatecount=true;prepareSQL=1</ connection-url > < driver-class >net.sourceforge.jtds.jdbc.Driver</ driver-class > < user-name >totvs</ user-name > < password >ops_esqueci!</ password > <!--pooling parameters--> < transaction-isolation >TRANSACTION_READ_COMMITTED</ transaction-isolation > < min-pool-size >5</ min-pool-size > < max-pool-size >30</ max-pool-size > < blocking-timeout-millis >5000</ blocking-timeout-millis > < idle-timeout-minutes >15</ idle-timeout-minutes > < new-connection-sql >select 1</ new-connection-sql > < check-valid-connection-sql >select 1</ check-valid-connection-sql > < set-tx-query-timeout ></ set-tx-query-timeout > < metadata > < type-mapping >MS SQLSERVER2008</ type-mapping > </ metadata > </ no-tx-datasource > </ datasources > |
- Além disso, também deverão ser colocados no diretório$JBOSS_HOME/server/[instance]/lib, os arquivos “.jar” referentes ao driver do banco de dados (ex : C:\java\jboss-4.2.3.GA\server\default\lib)
- Baixe o Driver JNDI para o SQLServer aqui.
- Baixe o Driver JNDI para o Oracle aqui.
...
Ao configurar um arquivo de conexão com Banco de Dados no JBoss (JNDI), o Servidor de aplicação subentende que o pool de conexões será gerenciado por ele, podendo trazer instabilidade para as conexões do Intellector Server.
...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 2010-08-04 11:32:01,665 ERROR [org.jboss.resource.connectionmanager.CachedConnectionManager] Closing a connection for you. Please close them yourself: org.jboss.resource.adapter.jdbc.jdk5.WrappedConnectionJDK5@13b3c2c java.lang.Throwable: STACKTRACE at org.jboss.resource.connectionmanager.CachedConnectionManager.registerConnection(CachedConnectionManager.java:290) at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:423) at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:849) at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:89) at org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:92) at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142) at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85) at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1463) at br.com.totvs.persistence.factory.ConnectionFactory.beginTransaction(ConnectionFactory.java:194) at br.com.totvs.persistence.factory.ConnectionFactory.getSession(ConnectionFactory.java:165) at br.com.tools.intellector.api.persistence.PersistenceUtil.expungeDatabase(PersistenceUtil.java:87) ... at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) at java.lang.Thread.run(Thread.java:619) |
Para persistir filas JMS podemos escolher o BD padrão ou configurar outro
...
O Banco de Dados padrão para o JBoss persistir dados da fila JMS (Queue) é o Hypersonic, tendo limitações para grandes volumes; para trocar a persistência para outro Banco de Dados, siga os passos abaixo:
- Apagar o arquivo hsqldb-ds.xml da pasta JBOSS_HOME/server/[instance]/deploy
- Copiar o respectivo arquivo correspondente ao DB que será usado deJBOSS_HOME/docs/examples/jca/*-ds.xml para a pasta deploy de sua instância
- Alterar o jndi-name no arquivo *-ds.xml para no nome correspondente
- Apagar o arquivo hsqldb-jdbc2-service.xml da pastaJBOSS_HOME/server/default/jms
- Copiar o arquivo de gerência de persistência *-jdbc2-service.xml deJBOSS_HOME/docs/examples/jms para a pasta JBOSS_HOME/server/[instance]/jms
- Alterar o nome do jndi no arquivo *-jdbc2-service.xml para o mesmo nome de jndi-name, contido no *-ds.xml (e.g. “DefaultDS”): jboss.jca:service=DataSourceBinding,name=DefaultDS
- Renomear hsqldb-jdbc-state-service.xml para o nome do respectivo DB *-jdbc-state-service.xml, as configurações opcionais deixe como estão
- Copiar o Driver de conexão (JDBC) para a pasta JBOSS_HOME/server/[instance]/lib
...
Pronto, agora a persistência dos dados da fila JMS serão persistidas na tabela jms_message, como área temporária. Uma vez consumidas as mensagens, elas serão deletadas.
Intellector-EAR
O Intellector-EAR é a produto de persistência do Intellector Server, monitorando um fila (queue) no Servidor de Aplicação onde os dados das execuções de políticas e plugins de acessos é enviada para serem persistidas no banco de dados.
Para instalar o Intellector-EAR:
No JBoss: Basta colocar na pasta deploy (ex : C:\java\jboss-4.2.3.GA\server\default\deploy\) do Servidor de Aplicação.
Baixe o Intellector-EAR aqui.
Configurando a “fila” do Intellector
No Servidor de aplicação na pasta “(ex : C:\java\jboss-4.2.3.GA\server\default\deploy\jms\jbossmq-destinations-service.xml)”, neste arquivo contém as configurações das filas que o servidor disponibiliza para as aplicações conversarem entre si.
...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <? xml version = "1.0" encoding = "UTF-8" ?> ... < mbean code = "org.jboss.mq.server.jmx.Queue" </ mbean > < mbean code = "org.jboss.mq.server.jmx.Queue" </ mbean > < mbean code = "org.jboss.mq.server.jmx.Queue" </ mbean > < mbean code = "org.jboss.mq.server.jmx.Queue" </ mbean > < mbean code = "org.jboss.mq.server.jmx.Queue" </ mbean > < mbean code = "org.jboss.mq.server.jmx.Queue" </ mbean > </ server > |
Neste arquivo somente deve ser incluído a fila do Intelletor caso o Administrador do Servidor de Aplicação deseje que o Intellector não ocupe uma fila que poderá ser utilizada por outras aplicações. Neste caso deve-se incluir:
...
para Para que o Intellector possa monitorar uma fila própria. Para configurar a Fila que o Intellector irá monitorar o Intellector possui um arquivo de configuração para as persistências de dados explicado mais adiante.
Arquivo persistence.properties
Para utilização da persistência de acessos no Intellector na primeira execução antes da utilização do cache, deverá ser copiado o arquivo de configuração persistence.properties para o diretório $JBOSS_HOME/bin, como descrito abaixo.
O Intellector ultiliza a API de persistência Hibernate de forma que este arquivo também serve para mapear as configurações mais eficazes para utilização da API.
...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | #persistence.properties #Fri Feb 03 13:52:26 BRST 2012 ### Define se o intellector utilizará banco de dados para persistência dos dados de acessos e políticas intellector.usesdatabase= true ### Nome da fila utilizada pelo MDB (Não pode ser alterado) persistence.queue.name=queue /intellector ### Connection Factory persistence.queue.connection.factory=QueueConnectionFactory ### Context Factory persistence.jndi.context.factory=org.jboss.security.jndi.JndiLoginInitialContextFactory ### Endereço da fila JMS persistence.jndi.address=jnp: //192 .168.18.129:1099 ### Emails de aviso de erro na fila de tarifação, separados por virgula, de preferência sem espaço ### Credenciais de conexão na fila Usuário/Senha persistence.jndi.security.principal= persistence.jndi.security.credentials= ### Parâmetros do Hibernate do Cache e Auditoria ### #################################################### ## Endereço JNDI da conexão hibernate.connection.datasource=java:intellector /totvs # dialetos suportados pelo Intellector hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect #hibernate.dialect=org.hibernate.dialect.SQLServer2008Dialect #hibernate.dialect=br.com.totvs.persistence.dialectfix.Oracle9iDialectFix #hibernate.dialect=br.com.totvs.persistence.dialectfix.Oracle10gDialectFix ### auto schema export hibernate.hbm2ddl.auto=update ### Delimitador de comandos específico do Banco de dados utilizado hibernate.hbm2ddl.delimiter=; ### cache #hibernate.cache.provider_class=org.hibernate.hibernate.NoCacheProvider hibernate.use_second_level_cache= false hibernate.max_fetch_depth=1 hibernate.cache.use_minimal_puts= true hibernate.use_query_cache= false ### hibernate only hibernate.show_sql= true hibernate.format_sql= true hibernate.use_sql_comments= true hibernate.generate_statistics= true hibernate.jdbc.batch_versioned_data= true hibernate.session_factory_name=sessionFactory hibernate.current_session_context_class=thread ### connection hibernate.connection.release_mode=after_transaction hibernate.connection.autocommit= false ## transaction controll hibernate.transaction.flush_before_completion= false hibernate.transaction.auto_close_session= false #hibernate.transaction.factory_class=org.hibernate.transaction.JDBCTransactionFactory hibernate.transaction.factory_class=org.hibernate.transaction.JTATransactionFactory hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup |
Importante ressaltar que as variáveis:
...
Se referem ao banco de dados onde serão armazenadas as informações de cache e auditoria. Os bancos homologados para essas funcionalidades foram Oracle 10g e 11g, SQL Server 2008 e PostgreSQL 9.x
...
Bibliotecas de infraestrutura para o Intellector
O intellector tem sua infraestrutura baseadas numa série de bibliotecas e frameworksdisponíveis no mercado, além das próprias. Essas bibliotecas devem ser colocadas no CLASSPATH do Servidor de Aplicação. Normalmente criamos um diretório dentro da instância nomeado intellector-lib, distribuído e disponível para download. No JBoss, para que elas fiquem disponíveis, consideramos que a pasta com as bibliotecas estejam em$JBOSS_HOME/server/[instance]/conf/jboss-service.xml, como abaixo
...
O versionamento dessas bibliotecas acompanham o mesmo do Intellector. Entretanto, e isso é muito importante, algumas bibliotecas que vem como default na instância do$JBOSS_HOME/[instance]/lib, que conflitam com as mais atualizadas do $JBOSS_HOME/[instance]/intellector-lib, que precisam ser removidas, são elas:
- dom4j
- ejb3-persistence
- hibernate3
- hibernate-annotations
- hibernate-entitymanager
Pronto!