SlideShare a Scribd company logo
1 of 147
Download to read offline
EVOLUINDOSEUBANCODEMANEIRAINCREMENTAL
RafaelPonte
Javou#4-2015
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
Fortaleza - Terra do Sol
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
Flyway
> Plain SQL migrations
> Java migrations
Flyway
> Plain SQL migrations
> Java migrations
> Convention over Configuration
Flyway
> Plain SQL migrations
> Java migrations
> Convention over Configuration
> SQL Parser
Flyway
> Plain SQL migrations
> Java migrations
> Convention over Configuration
> SQL Parser
> Java API - Ant - Maven - Gradle
FLYWAY LIQUIBASE MYBATIS
MIGRATIONS
Liquibase
Liquibase
> XML migrations
Liquibase
> XML migrations
> Plain SQL migrations
Liquibase
> XML migrations
> Plain SQL migrations
> Multiple Databases
Liquibase
> XML migrations
> Plain SQL migrations
> Multiple Databases
> Rollback support
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
MyBatisSchemaMigrations
> Plain SQL migrations
> Maven
MyBatisSchemaMigrations
> Plain SQL migrations
> Rollback support
> Maven
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
-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
BANC
APP
BANC
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
BANC
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
Original Transição Resultado
modifica o
banco
{
Original Transição Resultado
modifica o
banco
período de
transição
(antigo e novo)
{
{
Original Transição Resultado
modifica o
banco
período de
transição
(antigo e novo)
finaliza a
modificação
{
{
{
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
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
Obrigado!
One more thing…
http://
promo.triadworks.com.br
One more thing…
Tenho um amigo que tem
um sonho…
RommelCosta
Rafael Ponte
rponte@gmail.com

More Related Content

What's hot

Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Webantonio sérgio nogueira
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - BrazilStephen Chin
 
XML Free Programming - Brazil
XML Free Programming - BrazilXML Free Programming - Brazil
XML Free Programming - BrazilStephen Chin
 
Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6danielfcampos
 
WEB 2 - Aula 01 - 02.08
WEB 2 - Aula 01 - 02.08WEB 2 - Aula 01 - 02.08
WEB 2 - Aula 01 - 02.08Gilson Silva
 
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
 
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...As Zone
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorAllyson Barros
 
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
 
Zend Framework 1.11
Zend Framework 1.11Zend Framework 1.11
Zend Framework 1.11Cezar Souza
 
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasRodrigo Branas
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Helder da Rocha
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer FacesEduardo Bregaida
 
don't repeat yourself front-ender
don't repeat yourself front-enderdon't repeat yourself front-ender
don't repeat yourself front-endertdc-globalcode
 
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
 

What's hot (20)

Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 
XML Free Programming - Brazil
XML Free Programming - BrazilXML Free Programming - Brazil
XML Free Programming - Brazil
 
Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6
 
WEB 2 - Aula 01 - 02.08
WEB 2 - Aula 01 - 02.08WEB 2 - Aula 01 - 02.08
WEB 2 - Aula 01 - 02.08
 
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
 
Web Offline
Web OfflineWeb Offline
Web Offline
 
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
 
Mean Stack
Mean StackMean Stack
Mean Stack
 
Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)
 
Zend Framework 1.11
Zend Framework 1.11Zend Framework 1.11
Zend Framework 1.11
 
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer Faces
 
don't repeat yourself front-ender
don't repeat yourself front-enderdon't repeat yourself front-ender
don't repeat yourself front-ender
 
ASP.NET MVC 5.x
ASP.NET MVC 5.xASP.NET MVC 5.x
ASP.NET MVC 5.x
 
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
 

Viewers also liked

NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?Nico Steppat
 
Java User Group - O que é e como eu faço para participar?
Java User Group - O que é e como eu faço para participar?Java User Group - O que é e como eu faço para participar?
Java User Group - O que é e como eu faço para participar?jeffersonmoreirati
 
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
 
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
 
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
 
Usando Python na Google App Engine
Usando Python na Google App EngineUsando Python na Google App Engine
Usando Python na Google App EngineLuiz Cláudio Silva
 
Gaelyk: Desenvolvimento Ágil em Groovy nas Nuvens da Google
Gaelyk: Desenvolvimento Ágil em Groovy nas Nuvens da GoogleGaelyk: Desenvolvimento Ágil em Groovy nas Nuvens da Google
Gaelyk: Desenvolvimento Ágil em Groovy nas Nuvens da GoogleSerge Rehem
 
Coding Dojo em 5 Minutos
Coding Dojo em 5 MinutosCoding Dojo em 5 Minutos
Coding Dojo em 5 MinutosSerge Rehem
 
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
 
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
 
What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)Rudy De Busscher
 
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 (19)

Palestra Carreira Java Bahia Meeting
Palestra Carreira Java Bahia MeetingPalestra Carreira Java Bahia Meeting
Palestra Carreira Java Bahia Meeting
 
NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?
 
Java User Group - O que é e como eu faço para participar?
Java User Group - O que é e como eu faço para participar?Java User Group - O que é e como eu faço para participar?
Java User Group - O que é e como eu faço para participar?
 
Jpa de a à z por que conhecer jpa
Jpa de a à z  por que conhecer jpa Jpa de a à z  por que conhecer jpa
Jpa de a à z por que conhecer jpa
 
Spring Data Jpa
Spring Data JpaSpring Data Jpa
Spring Data Jpa
 
Spring Data Jpa
Spring Data JpaSpring Data Jpa
Spring Data Jpa
 
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
 
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
 
Curso de Java server faces (JSF)
Curso de Java server faces (JSF)Curso de Java server faces (JSF)
Curso de Java server faces (JSF)
 
Tdd principios oo
Tdd principios oo Tdd principios oo
Tdd principios oo
 
Usando Python na Google App Engine
Usando Python na Google App EngineUsando Python na Google App Engine
Usando Python na Google App Engine
 
Gaelyk: Desenvolvimento Ágil em Groovy nas Nuvens da Google
Gaelyk: Desenvolvimento Ágil em Groovy nas Nuvens da GoogleGaelyk: Desenvolvimento Ágil em Groovy nas Nuvens da Google
Gaelyk: Desenvolvimento Ágil em Groovy nas Nuvens da Google
 
Google Maps API V3
Google Maps API V3Google Maps API V3
Google Maps API V3
 
Coding Dojo em 5 Minutos
Coding Dojo em 5 MinutosCoding Dojo em 5 Minutos
Coding Dojo em 5 Minutos
 
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
 
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)
 
What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)
 
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 (Javou #4 - JavaCE)

Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
UNIFAL - MySQL 5.6 - Replicação
UNIFAL - MySQL 5.6 - ReplicaçãoUNIFAL - MySQL 5.6 - Replicação
UNIFAL - MySQL 5.6 - ReplicaçãoWagner Bianchi
 
Livropythonmysql 091022073751-phpapp01
Livropythonmysql 091022073751-phpapp01Livropythonmysql 091022073751-phpapp01
Livropythonmysql 091022073751-phpapp01julianabdpaiva
 
Relato Sobre a Migração de uma Aplicação Legada para Rails
Relato Sobre a Migração de uma Aplicação Legada para RailsRelato Sobre a Migração de uma Aplicação Legada para Rails
Relato Sobre a Migração de uma Aplicação Legada para RailsCássio Marques
 
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresTDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresFernando Franquini
 
Persistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPAPersistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPACaelum
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
BluDotNet - Entity Framework Code First Migrations
BluDotNet - Entity Framework Code First MigrationsBluDotNet - Entity Framework Code First Migrations
BluDotNet - Entity Framework Code First MigrationsRafael Leonhardt
 
Plataforma java: detalhes da JVM
Plataforma java: detalhes da JVMPlataforma java: detalhes da JVM
Plataforma java: detalhes da JVMCaelum
 
SOLID através de BDD: um guia prático para rubistas
SOLID através de BDD: um guia prático para rubistasSOLID através de BDD: um guia prático para rubistas
SOLID através de BDD: um guia prático para rubistaslucashungaro
 
Apache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesApache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesCI&T
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeRafael Benevides
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Cristiano Rafael Steffens
 
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEEAppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEEMagno Logan
 
Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaNavegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaAndrei Tognolo
 

Similar to Migrations for Java (Javou #4 - JavaCE) (20)

Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
Apache Wicket
Apache WicketApache Wicket
Apache Wicket
 
UNIFAL - MySQL 5.6 - Replicação
UNIFAL - MySQL 5.6 - ReplicaçãoUNIFAL - MySQL 5.6 - Replicação
UNIFAL - MySQL 5.6 - Replicação
 
Acessando o MySql com o Python
Acessando o MySql com o PythonAcessando o MySql com o Python
Acessando o MySql com o Python
 
Livropythonmysql 091022073751-phpapp01
Livropythonmysql 091022073751-phpapp01Livropythonmysql 091022073751-phpapp01
Livropythonmysql 091022073751-phpapp01
 
Relato Sobre a Migração de uma Aplicação Legada para Rails
Relato Sobre a Migração de uma Aplicação Legada para RailsRelato Sobre a Migração de uma Aplicação Legada para Rails
Relato Sobre a Migração de uma Aplicação Legada para Rails
 
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresTDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
 
Persistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPAPersistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPA
 
Vb
VbVb
Vb
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
 
BluDotNet - Entity Framework Code First Migrations
BluDotNet - Entity Framework Code First MigrationsBluDotNet - Entity Framework Code First Migrations
BluDotNet - Entity Framework Code First Migrations
 
Plataforma java: detalhes da JVM
Plataforma java: detalhes da JVMPlataforma java: detalhes da JVM
Plataforma java: detalhes da JVM
 
SOLID através de BDD: um guia prático para rubistas
SOLID através de BDD: um guia prático para rubistasSOLID através de BDD: um guia prático para rubistas
SOLID através de BDD: um guia prático para rubistas
 
Apache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesApache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentes
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)
 
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEEAppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
 
Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaNavegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo java
 

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
 
Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)Rafael Ponte
 
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
 
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
 
Hibernate Efetivo (QCONSP-2012)
Hibernate Efetivo (QCONSP-2012)Hibernate Efetivo (QCONSP-2012)
Hibernate Efetivo (QCONSP-2012)Rafael Ponte
 
Migrations for Java
Migrations for JavaMigrations for Java
Migrations for JavaRafael 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 (12)

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
 
Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)
 
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)
 
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
 
Hibernate Efetivo (QCONSP-2012)
Hibernate Efetivo (QCONSP-2012)Hibernate Efetivo (QCONSP-2012)
Hibernate Efetivo (QCONSP-2012)
 
Migrations for Java
Migrations for JavaMigrations for Java
Migrations for Java
 
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 (Javou #4 - JavaCE)