SlideShare a Scribd company logo
1 of 122
Download to read offline
EVOLUINDOSEUBANCODEMANEIRAINCREMENTAL
RafaelPonte
QConSP2013
MigrationsforJava
EM 2005
EU SÓ QUERIA SABER DE
FRAMEWORKS
ANALISTADESISTEMAS
NA EQUIPE
I ♥HIBERNATE
I ♥HIBERNATE
<?xml	
  version="1.0"	
  encoding="UTF-­‐8"?>
<persistence	
  version="2.0"	
  
	
  	
  	
  	
  xmlns="http://java.sun.com/xml/ns/persistence">
	
   	
   	
  
	
   <persistence-­‐unit	
  name="IssueTracker">
	
   	
   <properties>
	
  	
  	
  	
  	
  	
  	
  	
  <!-- ... -->
	
   	
   	
   <property	
  name="hibernate.show_sql"	
  value="true"	
  />
	
   	
   	
   <property	
  name="hibernate.format_sql"	
  value="true"	
  />
	
   	
   	
   <property	
  name="hibernate.hbm2ddl.auto"	
  value="update"	
  />
	
   	
   </properties>
	
   </persistence-­‐unit>
	
  
</persistence>
persistence.xml
@Entity
class	
  Issue	
  {
@Id
private	
  Long	
  id;
private	
  String	
  descricao;
…
}
Nova Entidade
INFO	
  [SchemaUpdate	
  ]	
  Running	
  hbm2ddl	
  schema	
  update
INFO	
  [SchemaUpdate	
  ]	
  fetching	
  database	
  metadata
INFO	
  [SchemaUpdate	
  ]	
  updating	
  schema
...
INFO	
  [TableMetadata]	
  table	
  not	
  found:	
  issue
INFO	
  [SchemaUpdate	
  ]	
  create	
  table	
  issue	
  (id	
  bigserial	
  
not	
  null,	
  descricao	
  varchar(255))
...
INFO	
  [SchemaUpdate	
  	
  	
  	
  	
  	
  	
  	
  ]	
  schema	
  update	
  complete
I ♥HIBERNATE
@Entity
class	
  Issue	
  {
@Id
private	
  Long	
  id;
private	
  String	
  descricao;
private	
  String	
  status	
  =	
  "A";	
  
…
}
Entidade ATUALIZADA!
INFO	
  [SchemaUpdate	
  ]	
  Running	
  hbm2ddl	
  schema	
  update
INFO	
  [SchemaUpdate	
  ]	
  fetching	
  database	
  metadata
INFO	
  [SchemaUpdate	
  ]	
  updating	
  schema
...
INFO	
  [TableMetadata]	
  table	
  found:	
  issue
INFO	
  [TableMetadata]	
  columns:	
  [id,	
  descricao]
INFO	
  [SchemaUpdate	
  ]	
  alter	
  table	
  issue	
  add	
  column	
  
status	
  varchar(255)
...
INFO	
  [SchemaUpdate	
  ]	
  schema	
  update	
  complete
I ♥HIBERNATE
@Entity
class	
  Issue	
  {
@Id
private	
  Long	
  id;
@Column(length=1000)
private	
  String	
  descricao;
private	
  String	
  status	
  =	
  "A";	
  
…
}
Entidade ATUALIZADA! <3
EMPRODUÇÃO
java.sql.SQLException:	
  Data	
  
truncated	
  for	
  column	
  'descricao'	
  at	
  
row	
  1
INFO	
  [SchemaUpdate	
  ]	
  Running	
  hbm2ddl	
  schema	
  update
INFO	
  [SchemaUpdate	
  ]	
  fetching	
  database	
  metadata
INFO	
  [SchemaUpdate	
  ]	
  updating	
  schema
...
INFO	
  [TableMetadata]	
  table	
  found:	
  issue
INFO	
  [TableMetadata]	
  columns:	
  [id,	
  status,	
  descricao]
INFO	
  [TableMetadata]	
  foreign	
  keys:	
  []
INFO	
  [TableMetadata]	
  indexes:	
  [issue_pkey]
...	
  ???????????	
  #WTF
INFO	
  [SchemaUpdate	
  ]	
  schema	
  update	
  complete
I ♥HIBERNATE
ϟ
SEMPRE
PODE
PIORAR
SEMPRE
PODE
PIORAR
MUDEONOME
DACOLUNA
SEMPRE
PODE
PIORAR
MUDEOTIPO
DACOLUNA
SEMPRE
PODE
PIORAR
ADICIONE
UMACOLUNA
NOT-NULL
WARNING: We've seen Hibernate users trying
to use SchemaUpdate to update the schema
of a productiondatabase automatically. This
can quickly endindisaster and won't be
allowed by your DBA.
“
-- Java Persistence with Hibernate
WARNING: We've seen RafaelPontetrying
to use SchemaUpdate to update the schema
of a productiondatabase automatically. This
can quickly endindisaster and won't be
allowed by your DBA.
“
-- Java Persistence with Hibernate
I ♥HIBERNATE
ϟ
DO PROJETO
SOMENTE NO INICIO
APRENDI:GERAR SCHEMA COM HIBERNATE
CORRIGINDO O BANCO
NAMÃO
CORRIGINDO O BANCO
NAMÃO
Mario Diniz
Não tá entrando na tela...
CORRIGINDO O BANCO
NAMÃO
E o meu banco?
Handerson Frota
Mario Diniz
Não tá entrando na tela...
ALGO ESTAVA ERRADO,
EVOLUIR O BANCO ERA
CARO
MigrationsforJava
EVOLUINDOSEUBANCODEMANEIRAINCREMENTAL
@rponte
Príncipe do
Oceano
Fortaleza- TerradoSol
Como você evolui sua
APP?
Como você evolui seu
BANCO?
Como você evolui seu
BANCO?
gerencia mudanças
PREPARA UM HUGE_SCRIPT.SQL E
APLICA MANUALMENTE?
DEIXA NA MÃO DO DBA?
DEIXA NA MÃO DO
ARQUITETO?
* BDUF (Big Design Up Front)
*
CRIA SUA PRÓPRIA
FERRAMENTA, CERTO?
NÓS ♥
TECNOLOGIACASEIRA
OU GERA COM HIBERNATE?
Não importa qual solução
você utilize...
CADA SOLUÇÃO
TEM VANTAGENS
EDESVANTAGENS
CADA SOLUÇÃO
TEM SEUS PRÓS
ECONTRAS
A COMUNIDADE RUBYONRAILS APRENDEU DESDE O COMEÇO
SIMPLESEEFICAZ:
MIGRATIONS
A COMUNIDADE JAVA
PARECE QUE NÃO APRENDEU
AINDA COMO SE FAZ
Java ferramentasparatodososgostos
TODASSEGUEM O MESMO
CONCEITO
PASSOS4
RESUMINDO EM
CRIE O SCRIPT COM A
MUDANÇA1
CREATE	
  TABLE	
  'blog'	
  (
	
  	
  	
  'id'	
  INT(10)	
  UNSIGNED	
  NOT	
  NULL	
  AUTO_INCREMENT,
	
  	
  	
  'descricao'	
  VARCHAR(255)	
  NOT	
  NULL
	
  	
  	
  PRIMARY	
  KEY	
  ('id')
)
script.sql
CRIE O SCRIPT COM A
MUDANÇA1
CREATE	
  TABLE	
  'blog'	
  (
	
  	
  	
  'id'	
  INT(10)	
  UNSIGNED	
  NOT	
  NULL	
  AUTO_INCREMENT,
	
  	
  	
  'descricao'	
  VARCHAR(255)	
  NOT	
  NULL
	
  	
  	
  PRIMARY	
  KEY	
  ('id')
)
create_table_blog.sql
CRIE O SCRIPT COM A
MUDANÇA1
CREATE	
  TABLE	
  'blog'	
  (
	
  	
  	
  'id'	
  INT(10)	
  UNSIGNED	
  NOT	
  NULL	
  AUTO_INCREMENT,
	
  	
  	
  'descricao'	
  VARCHAR(255)	
  NOT	
  NULL
	
  	
  	
  PRIMARY	
  KEY	
  ('id')
)
1_create_table_blog.sql
CRIE O SCRIPT COM A
MUDANÇA1
CREATE	
  TABLE	
  'blog'	
  (
	
  	
  	
  'id'	
  INT(10)	
  UNSIGNED	
  NOT	
  NULL	
  AUTO_INCREMENT,
	
  	
  	
  'descricao'	
  VARCHAR(255)	
  NOT	
  NULL
	
  	
  	
  PRIMARY	
  KEY	
  ('id')
)
<ID>_<DESCRIPTION>.sql
APLICA O SCRIPT NO
BANCO2
[rponte]	
  ~/myblog/scripts
$	
  migrate	
  up
APLICA O SCRIPT NO
BANCO2
[rponte]	
  ~/myblog/scripts
$	
  migrate	
  up	
  -­‐env=PRODUCTION
-­‐env=HOMOLOG
-­‐env=DEV
-­‐env=TEST
VERSIONA A MUDANÇA
NO BANCO3mysql>	
  select	
  *	
  from	
  DB_VERSION;
+-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+
|	
  ID	
  |	
  DESCRIPTION	
  	
  	
  	
  	
  	
  	
  	
  	
  |
+-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+
|	
  1	
  	
  |	
  create	
  table	
  blog	
  	
  	
  |
+-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+
APLICA SCRIPTS AINDA
NÃO APLICADOS4[rponte]	
  ~/myblog/scripts
$	
  migrate	
  up
mysql>	
  select	
  *	
  from	
  DB_VERSION;
+-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+
|	
  ID	
  |	
  DESCRIPTION	
  	
  	
  	
  	
  	
  	
  	
  	
  |
+-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+
|	
  1	
  	
  |	
  create	
  table	
  blog	
  	
  	
  |
|	
  2	
  	
  |	
  create	
  table	
  author	
  |
|	
  3	
  	
  |	
  create	
  table	
  post	
  	
  	
  |
+-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+
CRIA O SCRIPT1
APLICA SCRIPT2
VERSIONA O BANCO3
APLICA NOVOS SCRIPTS4
Java ferramentasparatodososgostos
Java ferramentasparatodososgostos
liquibase
mybatisflyway
FLYWAY LIQUIBASE MYBATIS
MIGRATIONS
FLYWAY LIQUIBASE MYBATIS
MIGRATIONS
Flyway
Flyway
> Plain SQL migrations
> Java migrations
> Convention over Configuration
> SQL Parser
> Java API - Ant - Maven - Gradle
FLYWAY LIQUIBASE MYBATIS
MIGRATIONS
Liquibase
Liquibase
> XML migrations
> Plain SQL migrations
> Multiple Databases
> Rollback support
> Generation of SQL scripts for DBA
FLYWAY LIQUIBASE MYBATIS
MIGRATIONS
MyBatisSchemaMigrations
MyBatisSchemaMigrations
> Plain SQL migrations
> Generation of SQL scripts for DBA
> Rollback support
> Maven
APESARDE
TANTAS
OPÇÕESHOJE
EMDIA
APESARDE
TANTAS
OPÇÕESHOJE
EMDIA
EM2009
ERADIFERENTE
APESARDE
TANTAS
OPÇÕESHOJE
EMDIA
ADOTAMOSO
MYBATIS
MIGRATIONS
WINDOWS,
LINUXE MACOSX
ADOTAMOSO
MYBATIS
MIGRATIONS
PODEMOS FACILITAR
E FOI O QUE FIZEMOS
ANT SCRIPT
Mybatis-Migrations-Anttasks github.com/rponte/mybatis-migrations-anttasks
PODEMOS FACILITAR
E FOI O QUE MARCELO FEZ
GRADLE PLUGIN
PODEMOS FACILITAR
E FOI O QUE MARCELO FEZ
GRADLE PLUGIN
Ant é tão OLD!
Gradle-Migrations-Plugin github.com/marceloemanoel/gradle-migrations-plugin
MAVEN
MyBatisMigrations
MAVEN ANT
MyBatisMigrations
MAVEN ANT GRADLE
MyBatisMigrations
FLYWAY
LIQUIBASE
MYBATIS
MIGRATIONS
FLYWAY
LIQUIBASE
MYBATIS
MIGRATIONS
QUAL
ESCOLHER?
MIGRATIONS
MIGRATIONS =
EVOLUÇÃO
SUSTENTÁVEL
DOBANCO
MIGRATIONS MELHOR
PROCESSO+ =
EVOLUÇÃO
SUSTENTÁVEL
DOBANCO
MELHOREO
PROCESSO
EQUIPE
RESPONSÁVELPELO
BANCO
COLOQUEAS
MIGRATIONSNO
CONTROLEDEVERSÃO
-BANCODEDADOSCOMPARTILHADO-
NAOUSEEM
DESENVOLVIMENTO
Banco de Dados
Rafael Mario Handerson ......
Rafael Mario Handerson ...
Banco Banco Banco ...
...
...
Banco de Dados
Rafael Mario Handerson ...
Schema Schema Schema ...
...
...
AUTOMATIZEOMÁXIMO
QUEPUDER
Rafael
v48
Rafael
v48
Rafael
v48
Mario
v49
Rafael
v48
Handerson
v43
Rafael
v48
Rafael
v48
Rafael
v48
Mario
v49
Rafael
v48
Handerson
v43
Integration
v48
deployfrequente
Rafael
v48
Rafael
v48
Rafael
v48
Mario
v49
Rafael
v48
Handerson
v43
Integration
v48
Q&A
v44
Demo
v45
deployfrequente deploycontrolado
Rafael
v48
Rafael
v48
Rafael
v48
Mario
v49
Rafael
v48
Handerson
v43
Integration
v48
Q&A
v44
Demo
v45
Produção
v43
deployfrequente deploycontrolado deployMUITOcontrolado
Rafael
v48
Rafael
v48
Rafael
v48
Mario
v49
Rafael
v48
Handerson
v43
Integration
v48
Q&A
v44
Demo
v45
Produção
v43
deployfrequente deploycontrolado deployMUITOcontrolado
Rafael
v48
Rafael
v48
Rafael
v48
Mario
v49
Rafael
v48
Handerson
v43
Integration
v49
Q&A
v44
Demo
v45
Produção
v43
deployfrequente deploycontrolado deployMUITOcontrolado
Rafael
v48
Rafael
v48
Rafael
v48
Mario
v49
Rafael
v48
Handerson
v43
Integration
v49
Q&A
v49
Demo
v45
Produção
v43
deployfrequente deploycontrolado deployMUITOcontrolado
Rafael
v48
Rafael
v48
Rafael
v48
Mario
v49
Rafael
v48
Handerson
v43
Integration
v49
Q&A
v49
Demo
v49
Produção
v43
deployfrequente deploycontrolado deployMUITOcontrolado
Rafael
v48
Rafael
v48
Rafael
v48
Mario
v49
Rafael
v48
Handerson
v43
Integration
v49
Q&A
v49
Demo
v49
Produção
v49
deployfrequente deploycontrolado deployMUITOcontrolado
NÃOMODIFIQUE
MIGRATIONSQUEFORAM
PARAPRODUÇÃO
GRANDESMUDANÇAS
PEQUENASMIGRATIONS
MIGRATIONS MELHOR
PROCESSO+ =
EVOLUÇÃO
SUSTENTÁVEL
DOBANCO
SEMPRE
PODE
PIORAR
APP
BANCO
APP
BANCO
APPS que você NÃO
conhece
APPS que você
conhece
APPS que você
conhece
APPS que você NÃO
conhece
Data
importers
Data
exporters
Outros
bancos
Frameworks
de persistência
Código de teste
APPS que você
conhece
APPS que você
conhece
APPS que você NÃO
conhece
Outros
bancos
Data
importers
Data
exporters
APP
BANCO
APPS que você NÃO
conhece
APPS que você
conhece
APPS que você
conhece
APPS que você NÃO
conhece
Data
importers
Data
exporters
Outros
bancos
Frameworks
de persistência
Código de teste
APPS que você
conhece
APPS que você
conhece
APPS que você NÃO
conhece
Outros
bancos
Data
importers
Data
exporters
“Deusnocéu,eBancode
dadosnaterra.”
EVOLUIR O BANCO
NESSE CENÁRIO
É CARO
Original Transição Resultado
modifica o
banco
período de
transição
(antigo e novo)
finaliza a
modificação
{
{
{
Aplica as migrations, migra
os dados, escreve código de
compatibilidade
Remove schema antigo e
código de compatibilidade
CONCLUINDO
EVOLUIR O BANCO É
MAIS DIFÍCIL DO QUE A
APLICAÇAO
TRABALHE
JUNTAMENTE COM O
DBA
ESTUDE, EXPERIMENTE E ESCOLHA
UMA MIGRATIONSTOOL
Rafael Ponte
rponte@triadworks.com.br

More Related Content

What's hot

Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphereCriando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphereJuliano Martins
 
RubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoRubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoCezinha Anjos
 
Evento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontEvento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontMichel Ribeiro
 
Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6danielfcampos
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsEduardo Mendes
 
A arquitetura modular do Java 9
A arquitetura modular do Java 9A arquitetura modular do Java 9
A arquitetura modular do Java 9Helder da Rocha
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
 
don't repeat yourself front-ender
don't repeat yourself front-enderdon't repeat yourself front-ender
don't repeat yourself front-endertdc-globalcode
 
Criando websites a jato com Django
Criando websites a jato com DjangoCriando websites a jato com Django
Criando websites a jato com DjangoMarcos Petry
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoCezinha Anjos
 
Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Julian Cesar
 

What's hot (20)

Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphereCriando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
 
RubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoRubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direito
 
Evento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontEvento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de Front
 
Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e Servlets
 
A arquitetura modular do Java 9
A arquitetura modular do Java 9A arquitetura modular do Java 9
A arquitetura modular do Java 9
 
Web Offline
Web OfflineWeb Offline
Web Offline
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
 
Java com banco my sql
Java com banco my sqlJava com banco my sql
Java com banco my sql
 
don't repeat yourself front-ender
don't repeat yourself front-enderdon't repeat yourself front-ender
don't repeat yourself front-ender
 
Tutorial +login+mvc
Tutorial +login+mvcTutorial +login+mvc
Tutorial +login+mvc
 
Apache Wicket
Apache WicketApache Wicket
Apache Wicket
 
Criando websites a jato com Django
Criando websites a jato com DjangoCriando websites a jato com Django
Criando websites a jato com Django
 
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direito
 
Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)
 
Doctrine2 Seminário PHP
Doctrine2 Seminário PHPDoctrine2 Seminário PHP
Doctrine2 Seminário PHP
 
Python 07
Python 07Python 07
Python 07
 
Mean Stack
Mean StackMean Stack
Mean Stack
 

Viewers also liked

Integração Contínua com o Jenkins para Aplicações .NET
Integração Contínua com o Jenkins para Aplicações .NETIntegração Contínua com o Jenkins para Aplicações .NET
Integração Contínua com o Jenkins para Aplicações .NETComunidade NetPonto
 
JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013
JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013
JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013Danival Calegari
 
Importancia dos Testes Automatizados no dia a dia (Don't Panic)
Importancia dos Testes Automatizados no dia a dia (Don't Panic)Importancia dos Testes Automatizados no dia a dia (Don't Panic)
Importancia dos Testes Automatizados no dia a dia (Don't Panic)Rafael Ponte
 
Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)Rafael Ponte
 
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...Rodrigo Cândido da Silva
 
Batch Processing - Processamento em Lotes no Mundo Corporativo
Batch Processing - Processamento em Lotes no Mundo CorporativoBatch Processing - Processamento em Lotes no Mundo Corporativo
Batch Processing - Processamento em Lotes no Mundo CorporativoRodrigo Cândido da Silva
 
Hibernate Efetivo (QCONSP-2012)
Hibernate Efetivo (QCONSP-2012)Hibernate Efetivo (QCONSP-2012)
Hibernate Efetivo (QCONSP-2012)Rafael Ponte
 
Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Lidando com o Caos: Testando Código PLSQL em um Projeto CriticoLidando com o Caos: Testando Código PLSQL em um Projeto Critico
Lidando com o Caos: Testando Código PLSQL em um Projeto CriticoRafael Ponte
 
Como Apresentar Codigo em Slides - Javou #7 - 2016
Como Apresentar Codigo em Slides - Javou #7 - 2016Como Apresentar Codigo em Slides - Javou #7 - 2016
Como Apresentar Codigo em Slides - Javou #7 - 2016Rafael Ponte
 

Viewers also liked (9)

Integração Contínua com o Jenkins para Aplicações .NET
Integração Contínua com o Jenkins para Aplicações .NETIntegração Contínua com o Jenkins para Aplicações .NET
Integração Contínua com o Jenkins para Aplicações .NET
 
JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013
JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013
JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013
 
Importancia dos Testes Automatizados no dia a dia (Don't Panic)
Importancia dos Testes Automatizados no dia a dia (Don't Panic)Importancia dos Testes Automatizados no dia a dia (Don't Panic)
Importancia dos Testes Automatizados no dia a dia (Don't Panic)
 
Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)
 
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
 
Batch Processing - Processamento em Lotes no Mundo Corporativo
Batch Processing - Processamento em Lotes no Mundo CorporativoBatch Processing - Processamento em Lotes no Mundo Corporativo
Batch Processing - Processamento em Lotes no Mundo Corporativo
 
Hibernate Efetivo (QCONSP-2012)
Hibernate Efetivo (QCONSP-2012)Hibernate Efetivo (QCONSP-2012)
Hibernate Efetivo (QCONSP-2012)
 
Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Lidando com o Caos: Testando Código PLSQL em um Projeto CriticoLidando com o Caos: Testando Código PLSQL em um Projeto Critico
Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
 
Como Apresentar Codigo em Slides - Javou #7 - 2016
Como Apresentar Codigo em Slides - Javou #7 - 2016Como Apresentar Codigo em Slides - Javou #7 - 2016
Como Apresentar Codigo em Slides - Javou #7 - 2016
 

Similar to Migrations for Java (QCONSP2013)

Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlDiego Tremper
 
InterCon 2017 - Segredos não ditos de PWA - muito além do Web App Manifest - ...
InterCon 2017 - Segredos não ditos de PWA - muito além do Web App Manifest - ...InterCon 2017 - Segredos não ditos de PWA - muito além do Web App Manifest - ...
InterCon 2017 - Segredos não ditos de PWA - muito além do Web App Manifest - ...iMasters
 
Segredos não ditos de PWA - muito além do Web App Manifest
Segredos não ditos de PWA - muito além do Web App ManifestSegredos não ditos de PWA - muito além do Web App Manifest
Segredos não ditos de PWA - muito além do Web App ManifestEduardo Matos
 
Desenvolvendo para WordPress com Docker, Git e WP-CLI
Desenvolvendo para WordPress com Docker, Git e WP-CLIDesenvolvendo para WordPress com Docker, Git e WP-CLI
Desenvolvendo para WordPress com Docker, Git e WP-CLIRudá Almeida
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlManuel Lemos
 
Integracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControlIntegracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControlDiego Tremper
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlDiego Tremper
 
Desenvolvimento em .Net - Estruturas Basicas
Desenvolvimento em .Net - Estruturas BasicasDesenvolvimento em .Net - Estruturas Basicas
Desenvolvimento em .Net - Estruturas BasicasVitor Silva
 
Offline Web com Service Workers - Sérgio Lopes
Offline Web com Service Workers - Sérgio LopesOffline Web com Service Workers - Sérgio Lopes
Offline Web com Service Workers - Sérgio LopesCaelum
 
Palestra Teched Brasil 2010 - Sessão SRV307 - Dicas e Truques de Windows Serv...
Palestra Teched Brasil 2010 - Sessão SRV307 - Dicas e Truques de Windows Serv...Palestra Teched Brasil 2010 - Sessão SRV307 - Dicas e Truques de Windows Serv...
Palestra Teched Brasil 2010 - Sessão SRV307 - Dicas e Truques de Windows Serv...GBanin
 
UNIFAL - MySQL 5.6 - Replicação
UNIFAL - MySQL 5.6 - ReplicaçãoUNIFAL - MySQL 5.6 - Replicação
UNIFAL - MySQL 5.6 - ReplicaçãoWagner Bianchi
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoFreedom DayMS
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...Frederico Garcia Costa
 
MySQL 5.7 - 
Tirando o Máximo Proveito
MySQL 5.7 - 
Tirando o Máximo ProveitoMySQL 5.7 - 
Tirando o Máximo Proveito
MySQL 5.7 - 
Tirando o Máximo ProveitoGabriela Ferrara
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformanceFelipe Ribeiro
 
Manual Kikrotik Completo
Manual Kikrotik CompletoManual Kikrotik Completo
Manual Kikrotik CompletoPortal GSTI
 
Project HA
Project HAProject HA
Project HAKarpv
 

Similar to Migrations for Java (QCONSP2013) (20)

Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControl
 
InterCon 2017 - Segredos não ditos de PWA - muito além do Web App Manifest - ...
InterCon 2017 - Segredos não ditos de PWA - muito além do Web App Manifest - ...InterCon 2017 - Segredos não ditos de PWA - muito além do Web App Manifest - ...
InterCon 2017 - Segredos não ditos de PWA - muito além do Web App Manifest - ...
 
Segredos não ditos de PWA - muito além do Web App Manifest
Segredos não ditos de PWA - muito além do Web App ManifestSegredos não ditos de PWA - muito além do Web App Manifest
Segredos não ditos de PWA - muito além do Web App Manifest
 
Desenvolvendo para WordPress com Docker, Git e WP-CLI
Desenvolvendo para WordPress com Docker, Git e WP-CLIDesenvolvendo para WordPress com Docker, Git e WP-CLI
Desenvolvendo para WordPress com Docker, Git e WP-CLI
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
 
Integracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControlIntegracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControl
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
 
Desenvolvimento em .Net - Estruturas Basicas
Desenvolvimento em .Net - Estruturas BasicasDesenvolvimento em .Net - Estruturas Basicas
Desenvolvimento em .Net - Estruturas Basicas
 
Offline Web com Service Workers - Sérgio Lopes
Offline Web com Service Workers - Sérgio LopesOffline Web com Service Workers - Sérgio Lopes
Offline Web com Service Workers - Sérgio Lopes
 
Palestra Teched Brasil 2010 - Sessão SRV307 - Dicas e Truques de Windows Serv...
Palestra Teched Brasil 2010 - Sessão SRV307 - Dicas e Truques de Windows Serv...Palestra Teched Brasil 2010 - Sessão SRV307 - Dicas e Truques de Windows Serv...
Palestra Teched Brasil 2010 - Sessão SRV307 - Dicas e Truques de Windows Serv...
 
UNIFAL - MySQL 5.6 - Replicação
UNIFAL - MySQL 5.6 - ReplicaçãoUNIFAL - MySQL 5.6 - Replicação
UNIFAL - MySQL 5.6 - Replicação
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com Django
 
Python Para Maemo
Python Para MaemoPython Para Maemo
Python Para Maemo
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...
 
MySQL 5.7 - 
Tirando o Máximo Proveito
MySQL 5.7 - 
Tirando o Máximo ProveitoMySQL 5.7 - 
Tirando o Máximo Proveito
MySQL 5.7 - 
Tirando o Máximo Proveito
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
Manual Kikrotik Completo
Manual Kikrotik CompletoManual Kikrotik Completo
Manual Kikrotik Completo
 
Project HA
Project HAProject HA
Project HA
 

More from Rafael Ponte

TechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSE
TechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSETechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSE
TechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSERafael Ponte
 
TechDay Retrospectiva 2018
TechDay Retrospectiva 2018TechDay Retrospectiva 2018
TechDay Retrospectiva 2018Rafael Ponte
 
Arquitetura Java - Escalando além do Hype
Arquitetura Java - Escalando além do HypeArquitetura Java - Escalando além do Hype
Arquitetura Java - Escalando além do HypeRafael Ponte
 
Como treinar seu estagiario
Como treinar seu estagiarioComo treinar seu estagiario
Como treinar seu estagiarioRafael Ponte
 
Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015
Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015
Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015Rafael Ponte
 
Importância dos testes automatizados no dia a dia
Importância dos testes automatizados no dia a diaImportância dos testes automatizados no dia a dia
Importância dos testes automatizados no dia a diaRafael Ponte
 
Migrations for Java
Migrations for JavaMigrations for Java
Migrations for JavaRafael Ponte
 
Importância dos testes automatizadoss
Importância dos testes automatizadossImportância dos testes automatizadoss
Importância dos testes automatizadossRafael Ponte
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaRafael Ponte
 
Desafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFDesafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFRafael Ponte
 
Curso de Java server faces (JSF)
Curso de Java server faces (JSF)Curso de Java server faces (JSF)
Curso de Java server faces (JSF)Rafael Ponte
 
Boas Práticas com JavaServer Faces (Jsf)
Boas Práticas com JavaServer Faces (Jsf)Boas Práticas com JavaServer Faces (Jsf)
Boas Práticas com JavaServer Faces (Jsf)Rafael Ponte
 
JavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividadeJavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividadeRafael Ponte
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven DesignRafael Ponte
 
Anatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesAnatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesRafael Ponte
 

More from Rafael Ponte (15)

TechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSE
TechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSETechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSE
TechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSE
 
TechDay Retrospectiva 2018
TechDay Retrospectiva 2018TechDay Retrospectiva 2018
TechDay Retrospectiva 2018
 
Arquitetura Java - Escalando além do Hype
Arquitetura Java - Escalando além do HypeArquitetura Java - Escalando além do Hype
Arquitetura Java - Escalando além do Hype
 
Como treinar seu estagiario
Como treinar seu estagiarioComo treinar seu estagiario
Como treinar seu estagiario
 
Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015
Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015
Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015
 
Importância dos testes automatizados no dia a dia
Importância dos testes automatizados no dia a diaImportância dos testes automatizados no dia a dia
Importância dos testes automatizados no dia a dia
 
Migrations for Java
Migrations for JavaMigrations for Java
Migrations for Java
 
Importância dos testes automatizadoss
Importância dos testes automatizadossImportância dos testes automatizadoss
Importância dos testes automatizadoss
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresa
 
Desafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFDesafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSF
 
Curso de Java server faces (JSF)
Curso de Java server faces (JSF)Curso de Java server faces (JSF)
Curso de Java server faces (JSF)
 
Boas Práticas com JavaServer Faces (Jsf)
Boas Práticas com JavaServer Faces (Jsf)Boas Práticas com JavaServer Faces (Jsf)
Boas Práticas com JavaServer Faces (Jsf)
 
JavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividadeJavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividade
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven Design
 
Anatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesAnatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer Faces
 

Migrations for Java (QCONSP2013)