sexta-feira, 3 de dezembro de 2021

Versão Final 21.11.0

Introdução
Nesse post vou mostrar as principais novidades da versão 21.11.0, algumas correções e pequenas alterações.

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
Refatorado o ReportBuilder para retornar um InputStream no lugar do StreamedContent, por enquanto os métodos antigos estão depreciados
- Correção na tela de parâmetros para carregar sempre sem nenhuma categoria selecionada
- Alterado as geração do Service e Dao para adicionar o método getInstance()

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Correção na atualização do template row do componente DivDataTable e Lookup
- Acerto na geração dos SCRIPTS que estava colocando _ indevido nos nomes de INDEX e FOREIGNKEY
Acerto no css do JARCH para dar um espaçamento de 5px entre o label e o titulo do tab
- Ajuste no main do templatePrincipalV2.xhtml para ocultar o nav corretamente
- Correção no tamanho do e:inputTextMoney do parameterComponents (tela de parâmetros)
- Correção na verificação de exclusividade do @JArchValidExclusive e @JArchValidExclusives que estava desabilitado
- Removido as dependedências do MAVEN do com.sun.xml.bind:jaxb-core e com.sun.xml.bind:jaxb-impl

Implementações

Além das correções descritas acima esta versão contempla algumas correções:
- Adicionado método convertInputStreamToOutputStream no FileUtils
- Adicionado a opção do relatorio da lista por TXT e XML, adicionado os fontes MarshalUtils e UnmarshalUtils
- Adicionado novos atributos elShowButtonAction e labelButtomActionIfHide no e:divListDatatable
- Adicionado método fromMMyyyy() no YearMonthUtils
- Adicionado novo componente e:filterPeriodYearMonth para utilização com competências
- Adicionado atributos inserted e changed no @JArchAutoIncrement para permitir disparar o evento de incremento nesses 2 momentos


Conclusão

Essa versão contempla algumas melhorias e correções. É recomendável a atualização para essa nova versão.

Até mais,

Versão Final 21.10.0

  Introdução

Nesse post vou mostrar as principais novidades da versão 21.10.0, algumas correções e pequenas alterações.

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
Alterado a implementação do getRowKey() para ser possível informar manualmente a indetificação do registro
Alterado o script de gerado para adicionar <SCHEMA>. antes da criação do objeto
- Alterado o tipo dateHour do SecretEntity de Date para LocalDateTime

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
Correção no parameterComponents.xhtml para setar o atributo label corretamente
Correção na classe MigrationService que estava ignorando entidades de pacotes indevido
Correção na verificação do nome da indetificação da SEQUENCE no BaseParameterEntity
Renomeado o caso de uso Audit para RegistryAudit (Entity, service, dao, etc...)
Ajuste na visualização de mensagem de ERRO do JARCH para ficar mais fácil de identificar o problema
- Ajuste na geração do XHTML para colocar o atributo com o nome parcial FilterSelectAction para FilterSelectController
- Correção e ajustes na visualização das mensagens de erros
- Ajuste no templateBaseV2.xhtml e templatePrincipalV2.xhtml, refatoração do TemplateUtils para contemplar as áreas header, nav, main e footer
Melhoria na visualização e gravação dos dados sigilosos
- Correção para tratar ConstraintsViolations na mostragem da mensagem de erro
- Correção no e:panelSelected para remover item da lista quando clicar no botão "menos"

Implementações

Além das correções descritas acima esta versão contempla algumas correções:
- Adicionado método groupBy(String field) no OperatoJpql e RootJpql
- Adicionado método disabled(boolean) no FieldSearch
- Adicionado método existsKey no BeanValidationUtils
- Adicionado atributos indicateRequiredStart, indicateRequiredEnd, requiredStart e requiredEnd no e:filterPeriod
- Adicionado atributos onClick, onStart, onError, onComplete e blockedButtonsClick no e:divDataMaster
- Adicionado atributos onClick, onStart, onError e onComplete no @JArchDynamicShowDataAction
- Adicionado atributos styleTitle e styleDescription no e:dashboardUnity
- Adicionado HELP contextualizado através das classes HelpController e IHelpData

Conclusão

Essa versão contempla algumas melhorias e correções. É recomendável a atualização para essa nova versão.

Até mais,

Versão Final 21.9.0

 Introdução

Nesse post vou mostrar as principais novidades da versão 21.9.0, algumas correções e pequenas alterações.

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
- Alterado as classes VerifyRelationshipDelete e VerifiyExclusiveInsertChange para EJB Singleton, devido suas chamadas serem efetuadas via eventos JPA's
- Refatoração nas classes que avaliam exclusividade para tornar em instância única

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Correção no MessagePropertiesUtils para não ocorrer NullPointerException quando não localizar o arquivo de bundle

Implementações

Além das correções descritas acima esta versão contempla algumas correções:
- Encapsulado o método refresh do EntityManager no Service e Dao
- Implementado a opção de passar o LockModeType para a API de JPQL
- Implementado atributo enable no @JArchValidExclusives para ser possível habilitar / desabilitar a validação da anotação

Conclusão

Essa versão contempla algumas melhorias e correções. É recomendável a atualização para essa nova versão.

Até mais,

Versão Final 21.8.0

Introdução
Nesse post vou mostrar as principais novidades da versão 21.8.0, algumas correções e pequenas alterações.

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
Removido a validação do @JArchValidExclusives e @JArchValidExclusive do insert e change do CrudDao, o mesmo será executado no listener do JPA (PrePersist e PreUpdate)
- Alterado a validação do @JArchValidExclusive e @JArchValidExclusives para validar o listener do JPA
- Ajuste no listener de exclusão para fazer a verificação de relacionamento fora da transação
- Alteração na mensagem de fases do JSF para ler o parâmetro JARCH.LOG.PHASEJSF com o default "N", e colocado a opção de mostrar o usuário e página no AFTER do RENDER RESPONSE. Essa opção pode ser desabilitado pelo parâmetro JARCH.LOG.PAGE

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
Correção na geração do data.xhtml para adicionar o atributo id no e:divDataMaster
- Correção no preenchimento do JArchSearchFieldComboboxCommandJpa no atributo classAttribute para não ocorrer NullPointerException
- Correção no exclusão para não criticar quando tiver um mapeamento OrphanRemoval

Implementações

Além das correções descritas acima esta versão contempla algumas correções:
- Adicionado nova classe EnviromentUtils com o método isDeveloper() para tratar como ambiente de desenvolvimento, utilizado a chave JARCH.ENVIROMENT.DEVELOPER = S

Conclusão

Essa versão contempla algumas melhorias e correções. É recomendável a atualização para essa nova versão.

Até mais,

terça-feira, 24 de agosto de 2021

Versão Final 21.7.0

  Introdução

Nesse post vou mostrar as principais novidades da versão 21.7.0, algumas correções e pequenas alterações.

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
Alterado o atributo size do @JArchAutoIncrement de int para Class<? extends IAutoIncrementSize> para ser possível configurar o tamanho em tempo de execução
- Adicionado nova anotação @JArchDao para configurar o DAO como @Singleton e permitir futuras implementações do JARCH nos DAO's
- Adicionado nova anotação @JArchService para configurar o Service como @Singleton e permitir futuras implementações do JARCH nos Service's
- Adicionado nova anotação @JArchSingleton para configurar como instância única do CDI
- Alterado as injeções de MultiTenant e UserInformation nos Controller's de field para carregamento no momento da chamada do getUserInformation() e getMultiTenant()
- Alterado o @JArchParameter para deixar de ser um qualificador, agora ele é um esteriótipo do tipo @Singleton, sendo assim não é mais necessário a utilização do @JArchParameter na injeção das instâncias de parâmetros

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
Alterado o MultiTenant para ser instância única
- Alterado o UserInformation para ser instância única

Implementações

Além das correções descritas acima esta versão contempla algumas correções:
Alterado GlobalInformation para ser to tipo @ApplicationScoped e adicionado o método clear() para limpar todos os atributos armazenados dentro do contexto

Conclusão

Essa versão contempla algumas melhorias e correções. É recomendável a atualização para essa nova versão.

Até mais,

Versão Final 21.6.0

 Introdução

Nesse post vou mostrar as principais novidades da versão 21.6.0, algumas correções e pequenas alterações.

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
Alterado o MultiTenant para utilizar internamento o GlobalInformation no lugar de SessionInformation e ApplicatioInformation
- Adicionado o método isArray() na interface IParameter
- Alterado o Controller BaseListTaskController para retornar os nomes das tasks em ordem alfabética

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Alterado CollectorJpql para o singleOptional retornar um Optional.empty() no lugar de uma exceção
- Correção na máscara do telefone

Implementações

Além das correções descritas acima esta versão contempla algumas correções:
Adicionado no log nas fases do JSF o login e o nome da pagina
Adicionado no componente e:divListDatatable o atributo showColumnAction para possibilitar ocultar a coluna de ações
Adicionado atributo digits no e:inputTextRate para definir quantidade de casas decimais
Adicionado timer no templatePrincipalV2.xhtml de expiração de sessão, utilizando o Primefaces Extension

Conclusão

Essa versão contempla algumas melhorias e correções. É recomendável a atualização para essa nova versão.

Até mais,

sábado, 12 de junho de 2021

Versão 21.5.0-Final

Introdução

Nesse post vou mostrar as principais novidades da versão 21.5.0, algumas correções e pequenas alterações.

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
Removido BaseListAction utilizar BaseListController em seu lugar
- Removido BaseFilterSelectAction utilizar BaseFilterSelectController em seu lugar
- Removido BaseDataAction utilizar BaseDataController em seu lugar
- Removido IBaseCollectionTaskListAction e BaseCollectionTaskListAction utilizar IBaseCollectionTaskListController e BaseCollectionTaskListController em seu lugar
- Removido IBaseAction e BaseAction utilizar IBaseController e BaseController em seu lugar
- Removido IndexAction utilizar IndexController em seu lugar
- Removido LocaleAction utilizar LocaleController em seu lugar
- Removido BaseAlteraSenhaAction utilizar BaseAlteraSenhaController em seu lugar
- Removido LogoutAction utilizar LogoutController em seu lugar
- Removido IAction e Action utilizar IController e Controller em seu lugar
- Removido UtilAction, utilizar as EL's do JARCH em seu lugar
- Removido a anotação @JArchJoinFetch
- Alterado o MessagePropertiesUtils para setar o Locale como "pt", "BR" e o multitenant quando a lingua for diferente de "pt" ou país diferente de "BR"
- Removido os métodos searchUniqueFilterAndInitializeCollections e searchUniqueFilterIdAndInitializeCollections da API de JPQL para o BaseService
- Adicionado MapFilter para criar um Map<String, Object> mutável (utilizado em parâmetros da biblioteca JPQL)
- Removido MapParamValue e MapParamValueBuilder, utilizar Map<String, Object> em seu lugar
- Removido a biblioteca Jpaql, utilizar Jpql em seu lugar
- Removido método TestUtils.getChromeDriver(), utilizar BrowserFactory.getChromeDriver() em seu lugar
- Removido os métodos getFacade() e getManager(), utilizar getService() e getDao() em seu lugar
- Removido métodos count(), countFilter(), aggregate(), countFilterCache(), existsFilter(), existsUniqueFilter(), find(), findWithFetchGraph(), findWithLoadGraph(), searchAll(), searchAllFilter(), searchAllOrderBy(), searchAny(), searchAllFilterWithPaginator(), searchUniqueFilter(), searchUniqueFilterIdAndInitializeCollections(), searchWithJpaqlSingleResult() e searchWithJpaqlResultList() do BaseService, utilizar em ClientJpql
- Removido método clienteJpaql() de todas as classes, utilizar getClientJpql() em seu lugar
- Removido método getLista() de IPaginator e Paginator, utilizar método getList() em seu lugar
- Removido referências de Facade's, Manager's e Actions's para utilizar Service's, Dao's e Controller's em seu lugar
- Removido IBaseManager, BaseManager, ICrudManager, CrudManager utilizar IBaseDao, BaseDao, ICrudDao e CrudDao em seu lugar
- Removido IBaseFacade, BaseFacade, ICrudFacade, CrudFacade utilizar IBaseService,BaseService, ICrudService e CrudService em seu lugar
- Removido IFilterSelectAction utilizar IBaseFilterSelectController em seu lugar
- Removido ICrudListAction utilizar ICrudListController em seu lugar
- Removido ICrudDataAction utilizar ICrudDataController em seu lugar
- Removido IBaseLoginAction utilizar IBaseLoginController em seu lugar
- Removido IBaseListTaskAction utilizar IBaseListTaskController em seu lugar
- Removido IBaseListAction utilizar IBaseListController em seu lugar
- Removido IBaseFilterSelectAction utilizar IBaseFilterSelectController em seu lugar
- Removido IBaseDataAction utilizar IBaseDataController em seu lugar
- Removido FilterSelectAction utilizar FilterSelectController em seu lugar
- Removido DataDetail (pacote action) utilizar DataDetail (pacote controller) em seu lugar
- Removido CrudListAction utilizar CrudListController em seu lugar
- Removido CrudDataAction utilizar CrudDataController em seu lugar
- Removido BaseLoginAction utilizar BaseLoginController em seu lugar
- Removido BaseListTaskAction utilizar BaseListTaskController em seu lugar
- Removido BaseListAction utilizar BaseListController em seu lugar
- Refatoração na biblioteca de JPQL para permitir utilizar o comando SELECT, não sendo mais necessario passar a lista de campos no singleOptional, single e list

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Correção no carregamento de mensagens do bundle para não perder a configuração devido a alteração do Locale
- Correção no dialog select quando altera o número da página
- Correção na paginação do detalhe no LazyDataModelPaginator atributo datasource

Implementações

Além das alterações descritas acima esta versão contempla algumas implementações:
- Adicionado clausula HAVING na API de JPQL
- Adicionado atributo align no @JArchColumnDataTable
- Adicionado possibilidade de adicionar tab's e fieldset's nos parâmetros
- Implementado opção de agrupamento de task, adicionado atributo group no IBaseTaskBean


Conclusão

Essa versão contempla algumas melhorias e correções. É recomendável a atualização para essa nova versão.

Até mais,

terça-feira, 18 de maio de 2021

Versão 21.4.0-Final

   

Introdução
Nesse post vou mostrar as principais novidades da versão 21.4.0, algumas correções e pequenas alterações.

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
- Alterado o CrudDao para não remover itens de detalhe no change
-Alteração da versão do Primefaces da 8.0 para 10.0 mais informações em: https://primefaces.github.io/primefaces/10_0_0/#/../migrationguide/migrationguide
- Adicionado atributo others no @JArchSearchFieldLookup para permitir colocar "V2" quando o estiver dentro de um e:filterSearch com outro lookup dentro, assim ele vai utilizar o e:_lookup2
- Adicionado evento change no e:inputTextMoney
- Alterado o componente e:filterSearch para quando for componente definido com zeros a esquerda para permitir somente a digitação de números
- Alterado a validação de email para verificar um ponto final após o @
- Adicionado o atributo styleClass no e:inputTextInteger
- 
Refatoração na API ExcelUtils separando XLS de XLSX

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Correções nos campos de valores para adequar ao Primefaces X (separador de milhar e decimal)
- Acerto no LazyDataModelPaginator para utilizar o IIdentity no lugar do IBaseEntity
- Removido o métodp preencheDataModelList do IBaseFilterSelectController adicionado o fillDataModelList em seu lugar
- Corrigido o ícone do JavaScriptUtils.showMessageBodyWarningNoRedirect() e JavaScriptUtils.showMessageBodyWarningRedirect() de ERRO para WARNING 
- Ajuste na API do Excel para gerar não gerar linhas em branco quando não houver título
- Ajuste nas colunas de a:selectOneMenu do e:filterSearch para ajustar com o tamanho disponível e não com o tamanho do maior item da lista
- Ajuste na localização de mensagens do properties (bundle e ValidationMessages)
- Acerto no e:filterSearch para reconhecer actions do e:lookup com o sufixo Controller
- Correção no YearMonthJsfConverter para tratar exceção de mês/ano inválido

Implementações

Além das alterações descritas acima esta versão contempla algumas implementações:
- Adicionado novo componente e:inputTextRate para utilização em percentuais
- Adicionado QrCodeUtils para contemplar a geração de QRCode em arquivo

Conclusão

Essa versão contempla algumas melhorias e correções. É recomendável a atualização para essa nova versão.

Até mais,

quarta-feira, 7 de abril de 2021

Versão 21.3.0-Final

  

Introdução
Nesse post vou mostrar as principais novidades da versão 21.3.0, algumas correções e pequenas alterações.

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
- Alterado o ClientJpql para que o construtor possa ser reutilizado em heranças (protected)
- Alterado a geração do JpqlBuilder para poder utilizar implementações de métodos na própria classe (como método de instância)

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Correção nos atributos de ordenacao para order nos componentes e:divDataDetailTab, e:divListDatatable e e:divListDatatableSimple
Correção no e:lookup quando carregado de dentro de outro e:lookup. Criado o e:_lookup replicado do lookup para ser usado dentro do e:filterSearch
Acerto no FormataNumeroUtils.formata para tratar o parâmetro null (formatar como ZERO)

Conclusão

Essa versão contempla algumas melhorias e correções. É recomendável a atualização para essa nova versão.

Até mais,

terça-feira, 2 de março de 2021

Versão 21.2.0-Final

 

Introdução
Nesse post vou mostrar as principais novidades da versão 21.2.0, algumas correções e pequenas alterações.

Implementação
Segue abaixo as implementações dessa versão:
- Adicionado o preenchimento do combo de tarefas na primeira vez que acessar a tela de lista de tarefas
- Adicionado nova anotação @JArchColumnsDataTable para agrupar as anotações @JArchColumnDataTable
- Adicionnado a opção de between na biblioteca de JPQL
- Adicionado na e:divListDatatable os atributos hideSeparatorActionDynamic e hideSeparatorActionDownload para ser possível condicionar o separador do menu de ações

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
- Alterado o atributo facade para service e manager para dao das anotações de geração de código
- Alterado regras de validações de compilação: 
    1. Anotações @JArchSearchs (Field, Combo, Check, etc) para não aceitar o atributo classEntity  quando estiver dentro de um @JArchSearchTab 
    2. Anotações @JArchSearchs (Field, Combo, Check, etc) para obrigar o preenchimento do atributo classEntity quando não estiver dentro do @JArchSearchTab 
    3. Anotações @JArchSearchs (Field, Combo, Check, etc) para obrigar o preenchimento do atributo field ou whereJpa 
    4. Anotações @JArchColumnDataTable para não aceitar o atributo classEntity quando estiver dentro de um @JArchColumnsDataTable 
    5. Anotações @JArchColumnDataTable para obrigar preencher o atributo classEntity quando não estiver dentro de um @JArchColumnsDataTable 
    6. Anotações @JArchColumnDataTable para obrigar o preenchimento do atributo field
- Ajuste nas mensagens de log na geração do código
- Removido a opção de definir anotações de filtro e coluna (@JArchSearch...@JArchColumnDataTable) nos atributos
- Alteração no IBaseListTaskController para adicionar as chaves dos BPMN's pelo hook method getListProcessDefinitionKey()
Acerto na página de logout para redirecionar para a página de login
- Adicionado método getProcessEngine() no IBaseListController
- Depreciado a anotação @JArchJoinFetch, utilizar a API de JPQL ou eventos em seu lugar

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Corrigido a configuração dos filtros através das anotações dentro do package-info que estava ocasionando NullPointerException
Correção na configuracao de colunas do @JArchColumnsDataTable
Pequenas refatorações de sugestão do SonarLint
Acerto na configuração do ComboBoxFieldSearchFactory para tratar quando estiver dentro de um @JArchSearchTab
Acerto no CpfCnpjUtils para tratar NULL no formataCpf e formataCnpj

Conclusão

Essa versão contempla algumas melhorias e correções. É recomendável a atualização para essa nova versão.

Até mais,

quarta-feira, 3 de fevereiro de 2021

Versão 21.1.0-Final

 

Introdução

Nesse post vou mostrar as principais novidades da versão 21.1.0, algumas correções e pequenas alterações.

Implementações

Segue abaixo as implementações dessa versão:
- Adicionado classe RootJpql para evitar confusão nos métodos que retornavam um ClientJpql e na sequencia fosse chamado uma método que não pertencia a ela (find, searchUniqueFilter, searchAllFilter, etc...)
- Adicionado o metodo formatMMyyyy(LocalDate) no DateUtils
Adicionado os atributos update e styleClass no filterOrder
- Adicionado os atributos update e styleClass no filterGroup
- Adicionado metodo toYearMonth(Date) no DateUtils
- Adicionado metodos list() e single() para retornar na API de JQPL para retornar uma lista de array de objetos

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
- Removido os atributos depreciados clazzEntity (Utilizar classEntity), attribute (Utilizar field) e attributes (Utilizar fields)
- Removido os atributos depreciados title (Utilizar labelMenu), attributeShow (Utilizar fieldShow), attributeItems (Utilizar fieldItens) e attributeCommandJpa (Utilizar fieldCommandJpa)
- Alteração no nome dos controllers do Communication de Action para Controller (List e Data)
- Adicionado o EntityManagerFilterUtils.addFilters no construtor do ClientJpql para adicionar os filtros default's no EntityManager
Adicionado o atributo classEnum no @JArchSearchFieldComboboxCommandJpa
Alteração no YearMonthJpaConverter para não adicionar horário usando o Timezone
Alterado a quantidade de registros no e:divListDatatable para 10, 20, 50, 100, 500 e 1000

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Correção no BaseListTaskController para carregar os tipos de tarefas quando estiver NULL ou VAZIO
- Correção no BaseListTaskController para salvar os dados na sessão de Filtro da Task, Ordenação e Tipo
- Correção na API de JPQL para sempre adicionar o filtro de tenant (getEntityManager() adicionando filtro)
- Ajuste no metodo getValueReady() do FieldSearch para tratar o diversos formatos de Data/Hora no LocalDateTime
- Acerto no e:divListDataTable para ação dinâmica sem a tela de dados que solicita confirmação
- Ajuste no PanelSelectedUI para remover o item selecionado
- Correção na atualização do template row do componente e:divListDataTable

Conclusão

Essa versão contempla algumas melhorias e correções. É recomendável a atualização para essa nova versão.

Até mais,

segunda-feira, 11 de janeiro de 2021

Criando Estrutura de Versionamento de Scripts SQLs no Flyway

Integração FLYWAY com JARCH

 O flyway é uma excelente ferramenta para versionamento de scripts de banco de dados. Por padrão, ele utiliza a tabela schema_version para fazer o gerenciamento dos scripts executados, no entanto, podemos alterar o nome da tabela através de sua API.

Nesse post, vou usar como exemplo como criar a estrutura de versionamento de estrutura e dados, na qual deve ser gerenciada por uma tabela Flyway (TB_FLYWAYSTRUCTURE).

O primeiro passo é criar a pasta (db/migration)  dentro do resources que é por padrão onde Flyway verifica.


Após os diretórios criados, os scripts devem ser criados nessa devida pasta como demonstrado abaixo.

/db/migration/V1__script.sql


CREATE TABLE tb_empresa (
id_empresa NUMBER PRIMARY KEY,
sq_versaoregistro INTEGER DEFAULT 0 NOT NULL,
nr_cnpj VARCHAR(14) NOT NULL,
nm_fantasia VARCHAR(100) NOT NULL,
nm_razaosocial VARCHAR(100) NOT NULL,
sn_ativo BOOLEAN NOT NULL,
CONSTRAINT PK_EMPRESA PRIMARY KEY (nr_cnpj)
);

/db/migration/V2__script.sql


CREATE TABLE tb_usuario (
id_usuario NUMBER PRIMARY KEY,
sq_versaoregistro INTEGER DEFAULT 0 NOT NULL,
nm_login VARCHAR(14) NOT NULL,
cn_senha VARCHAR(255) NOT NULL,
sn_ativo CHAR(1) NOT NULL,
CONSTRAINT PK_USUARIO PRIMARY KEY (id_usuario)
);

Observação: Os scripts SQLs foram exemplificados para o banco de dados Oracle.
Finalizado a criação das tabelas, agora é possível utilizar a estrutura para fazer alterações nas tabelas do sistema, assim o V3 insere uma empresa na tabela de empresa.

/db/migration/V3__script.sql

1
INSERT INTO tb_empresa(nr_cnpj, nm_fantasia, nm_razaosocial, sn_ativo) VALUES ('03025433000190', 'Empresa', 'Empresa LTDA', true);

Criados os scripts agora é preciso configurar o Flyway para utilizar a estrutura de versionamento.

A configuração consiste em basicamente criar uma instância do flyway, passando o parâmetro locations com o path da pasta, demonstrado no trecho abaixo.


Flyway
.configure()
.cleanDisabled(true)
.dataSource(dataSourceStructure)
.schemas("ADMFIS")
.table("TB_FLYWAYSTRUCTURE")
.outOfOrder(true)
.locations("db/migration")
.load()
.migrate();

Configuração com JAVAEE e JARCH

Como estratégia de execução dos scripts utilizei o método migrate, que compara a versão atual da base dados com os scripts versionados e executa os novos arquivos inseridos na estrutura, caso queiram conhecer mais afundo sobre essa estratégia segue o link da documentação.

No Java EE a chamada das configurações de Flyway serão chamadas dentro de um método de inicialização de um EJB no Startup da aplicação.

package br.com.dsfnet.admfis.web.flyway;

import org.flywaydb.core.Flyway;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.sql.DataSource;

@Startup
@Singleton
@TransactionManagement(TransactionManagementType.BEAN)
public class FlywaySetup {

@Resource(lookup = "java:/ds/flyway")
private DataSource dataSourceStructure;

@PostConstruct
public void init() {
Flyway
.configure()
.cleanDisabled(true)
.dataSource(dataSourceStructure)
.schemas("ADMFIS")
.table("TB_FLYWAYSTRUCTURE")
.outOfOrder(true)
.locations("db/migration")
.load()
.migrate();

}
}

A classe FlywaySetup é anotada com @Startup para ser executada na inicialização da aplicação e a criação das configurações do Flyway devem ser executadas no PostConstruct para que o dataSouce esteja injetado nesse momento.

Também foi utilizada a anotação @TransactionManagement do tipo Bean porque se trata de alterações na base de dados, pois o Flyway trabalha com transações (em algumas bancos, consulte a documentação) para executar os scripts, pois, caso haja falhas na execução é precisa realizar o rollback das alterações.

Utilizei um datasource onde o usuário tem permissão de alterar estrutura do banco de dados.

Agora falta somente adicionar a dependência da API do Flyway no pom.xml:


<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>7.5.0</version>
</dependency>
Conclusão

Essa estratégia de regularização de banco de dados é uma ótima opção pois evita que um publicação seja feito em algum ambiente sem que o mesmo não tenha sido regularizado seu banco de dados. 

Até a próxima,

sábado, 2 de janeiro de 2021

Versão 20.12.0-Final

   

Introdução

Nesse post vou mostrar as principais novidades da versão 20.12.0, algumas correções e pequenas alterações.

Implementações

Segue abaixo as implementações dessa versão:
- Implementação geração de CSV assim como já tinha pra XLS e PDF na tela de lista
- Implementação geração dos dados dos detalhes no Excel
- Adicionado método getInstance() no GlobalInformation
- Adicionado os métodos single() e singleOptional() no CollectorJpql para poder retornar um Bean anêmico. Esses métodos foram incluídos com 2 versões utilizando os fields como String ou Attributte

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
- Removido método getDescricaoAcao() que estava depreciado desde a versão 18.10.0
- Removido método processamentoBotaoCancelar() que estava depreciado desde a versão 18.10.0
- Removido método processamentoBotaoGravar() que estava depreciado desde a versão 18.10.0
- Removido método isMostraBotaoExcluir() que estava depreciado desde a versão 18.10.0
- Removido método isMostraBotaoGravar() que estava depreciado desde a versão 18.10.0
- Removido método isMostraBotaoVoltar() que estava depreciado desde a versão 18.10.0
- Removido método isMostraBotaoCancelar() que estava depreciado desde a versão 18.10.0
- Removido método getDescricaoBotaoGravar() que estava depreciado desde a versão 18.10.0

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Correção no menu.xhtml para não chamar o LoginAction/LoginController indevidamente no c:if, utilizado o MenuAction e MenuController
Correção na geração do Excel para os tipos numéricos
Correção na geração do Excel para os tipos ENUM
Correção na identificação das colunas da anotação @JArchColumnDataTable do DataDetail
Correção no controle de paginação na Action de Tasks
- Correção no template principal para não sobrepor a última opção no menu

Conclusão

Essa versão contempla algumas melhorias e correções. É recomendável a atualização para essa nova versão.

Até mais,

Versão 23.3.0-Final

      Introdução Nesse post vou mostrar as principais novidades da versão 23.3.0, algumas correções e pequenas alterações. Alterações Além d...