æ°ããã·ãªãŒãºã®èšäºã¯VaadinãšLiquibaseã«æ§ããããŸãã
æåã®èšäºã§ã¯ããã®FrameWorkïŒVaadinïŒãéå§ããããã®ããã€ãã®ã¹ãããã«ã€ããŠèª¬æããŸãã ãã³ãã¬ãŒãã®ãããŒãããšãæåã®ãã¬ã€ã¢ãŠãããžã®èŠçŽ ã®è¿œå ã«ã€ããŠèª¬æããŸãã Liquibaseã«ã€ããŠå°ã話ããŸãããã 次ã®èšäºã§ã¯ãxmlãã¡ã€ã«ã®åŠçãè¿œå ããäºå®ã§ãã
ãŽã¡ãŒãã£ã³
ç§ã«ãšã£ãŠãããã¯ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®Javaã³ãŒãã®ãã€ã³ã¿ãŒããªã¿ãŒãã§ãã å®éãç§ã¯éçºãJavaã¬ã€ã€ãŒã®å¶åŸ¡ã¬ãã«ãŸã§æžãããŠããŸãã JavaEEã«åºã¥ãããµãŒããŒæåã¢ãŒããã¯ãã£ã®ãããã§ãåã ã®ããŒãã®èšå®ã倱ãããšãªããè€éãªããžãã¯ã®ã¬ã€ã€ãŒãäœæã§ããŸãã ãããŠãæ¢ã«æºåãããŠãããã©ãŠã¶ãŒã®æé©åïŒãã©ãŠã¶ãŒéã®äºææ§ã«ã€ããŠè©±ããŠããïŒã¯ãäœæ¥ã®ãã®éšåãæå°éã«æããŸãã
ãµãŒããŒæåã¢ãã«ã䜿çšãããšãé«å質ã®ã¢ããªã±ãŒã·ã§ã³ãè¿ éã«ïŒåŸã§åç §ïŒäœæããç¹å®ã®æ®µéã§ãè¡ãè©°ãŸãããªã¹ã¯ãæžããããšãã§ããŸãã Javaã§éçºããŠãããã¯ã©ã€ã¢ã³ãã«ã¯JavaScriptã衚瀺ãããŸãã
ããã«ãAJAXã䜿çšãããšãã€ã³ã¿ãŒãã§ãŒã¹ã®çºæ¿ã¬ãŒããå¢å ããããšãçŽæããå¿ èŠããããŸãã
å€ãã®ãœãããŠã§ã¢è£œåããã®æ¹åã§éçºãããŠããŸãã ãããã®ããã€ãã¯ã以äžã®ç¬¬1ããã³ç¬¬4ã®èšäºã§èª¬æãããŠããŸãã
䜿çšã«ã€ããŠè©±ãå ŽåãäžèŠæš¡ããã³å€§èŠæš¡äŒæ¥åã-ããã¯çŽ æŽãããéžæè¢ã§ãïŒIMHOïŒã
Vaadinã«é¢ããéèŠãªæ å ±ã
Vaadinã®å ¬åŒãŠã§ããµã€ã
以äžã¯ãããªãžã®ããã€ãã®ãªã³ã¯ã§ãã ã芧ã«ãªãããšã匷ããå§ãããŸãã
ãã·ã¢èªã§ ã å°ããªã¢ããªã±ãŒã·ã§ã³ã®èŠèŠçãªäœæã«é¢ããã¹ããŒãªãŒãå«ãŸããŠããŸãã
å€åœèªã§ ã ãã¹ããã©ã¯ãã£ã¹ã¯ãã€ã³ã¿ãŒãã§ã€ã¹ã®äžéšãé©åã«äœæããæ¹æ³ã«é¢ããéåžžã«åªããã¹ããŒãªãŒã§ãã
FrameWorkã®èšäº ã
æåã®èšäºãžã®ãªã³ã¯ ã Vaadinãšãã®ãå åŒãã®éãã«é¢ããå°ããªèšäºã
2çªç®ã®èšäºãžã®ãªã³ã¯ ã FrameWorkæ©èœã®æŠèŠã
3çªç®ã®èšäºãžã®ãªã³ã¯ ã 䟿å©ãªæ©èœã
4çªç®ã®èšäºãžã®ãªã³ã¯ ã GWTãšVaadinã«ã€ããŠã 埩ç¿
æåã®ãã³ãã¬ãŒããäœæããã«ã¯ã次ã®ããšãã§ããŸãã
1ã€ç®ã¯ãé©åãªéçºã®ããã«ããã€ãã®ããŒããã€ã³ã¹ããŒã«ããŠæ§æããããšã§ãã ããšãã°ã IntelliJ IDEAã䜿çšããå Žåãæ°ãããããžã§ã¯ããäœæãããšãã«ããAdditional Libraries and FrameWorksãã»ã¯ã·ã§ã³ã§ãVaadinããéžæããŸãã ãã®åŸããVaadin Distributionããæå®ããããæ±ããããŸããããã«ããããã®æé ã®åã«ãCreate sample applicationããé 眮ã§ããŸããProjectSDKãšApplication Serverãžã®ãã¹ãæå®ããŠãã ããïŒãããã®èšå®ã¯ãã¹ãŠ1ã€ã®ãŠã£ã³ããŠã§è¡ãããŸãïŒã
ãšããã§ãä»ã®IDEçšã®ãã³ãã¬ãŒãããããŸãã
ãã³ãã¬ãŒããžã®ãªã³ã¯ ã
EclipseçšVaadinãã©ã°ã€ã³ ã
NetBeansçšVaadinãã©ã°ã€ã³ ã
ãã®ãããžã§ã¯ãã§ã¯ãTomCatãèµ·åãããšããã®ãããªç¢æãHello Worldãã衚瀺ãããŸãã ãã®ãªã³ã¯ã䜿çšãããšãããã»ã¹ãå床衚瀺ã§ããŸãã
Liquibaseãšã¯äœã§ããããªããããå¿ èŠãªã®ã§ããïŒ
LiquibaseãŠã§ããµã€ããžã®ãªã³ã¯ ã
äœåã®ç¹åŸŽã«é¢ããè¯ãèšäº ã
å¥ã®ããæžãããè³æã
liquibaseãšã¯äœã§ããïŒ ç§ã«ãšã£ãŠãããã¯ç°ãªãããŒã¿ããŒã¹ïŒOracleãPostgreSQLãªã©ïŒã«åãã¿ã€ãã®ãªããžã§ã¯ããäœæããããã®äŸ¿å©ãªã¡ã«ããºã ã§ãã ãœãããŠã§ã¢ãéçºããäŒæ¥ã«ãšã£ãŠéåžžã«è¯ãéžæã§ãã
éåžžã«ç°¡æœã«èª¬æããããšãããšãxmlã§ããŒãã«ãã·ãŒã±ã³ã¹ãããã³ãã®ä»ã®ãªããžã§ã¯ãã説æããŸãã ããã«ãåããã¡ã€ã«ãããŸããŸãªçš®é¡ã®ããŒã¿ããŒã¹ãžã®ã€ã³ã¹ããŒã«ã«äœ¿çšã§ããŸãïŒç¹å®ã®å¶éããããŸãïŒã
ãã®èšäºã§ã¯ãäŸãã°Liquibaseãã¡ã€ã«ãäœæããããã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®äœæãéå§ããŸãïŒxmlãªãã·ã§ã³ã«å¶éãããŠããŸãïŒã
å€ãã®ããŒã¿ããŒã¹ã®ãµããŒãã®ãããã§ããã®æ©äŒãç 究ããé©çšããããšããŸã
Apache Tomcatã«ã€ããŠèšåããã®ãå¿ããŸããã Tomcat Webãµã€ããžã®ãªã³ã¯ ã
ãã¹ãã§ææ¡ããããŒãžã§ã³ã§ã¯ãçµã¿èŸŒã¿æ©èœã䜿çšããŠãéçºç°å¢ããçŽæ¥å®è¡ã§ããŸãã
Vaadinã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ããå§ããŸãããã
ãšããã§ããµã€ãèªäœã«ã¯ã ãã¢ãã¬ã¹åž³ããæ§ç¯ããäŸããããŸãã
ç¬èªã®æ¹æ³ã§ãåæ§ã®ããŸã ãã¢ããªã±ãŒã·ã§ã³ãäœæããããšããŸãã
å§ããŸãããã
ãã³ãã¬ãŒããããŒãã§ããå Žåã次ã®ããã«ãªããŸãã
package com; import com.vaadin.server.VaadinRequest; import com.vaadin.ui.*; /** * Created by Terran on 20.01.2016. */ public class MyVaadinApplication extends UI { @Override public void init(VaadinRequest request) { VerticalLayout layout = new VerticalLayout(); setContent(layout); layout.addComponent(new Label("Hello, world!")); } }
ã³ãŒãã§æ¬¡ã®è¡ã確èªã§ããŸãã
final VerticalLayout layout = new VerticalLayout();
å®éãããã¯èŠçŽ ãè¿œå ãããã¬ã€ã¢ãŠããã§ãïŒãµã€ãã®äž»èŠèŠçŽ ã«å ããŠãèšå€§ãªæ°ã®è¿œå èŠçŽ ãèŠã€ããããšãã§ããŸãïŒã
å°æ¥ã®ãŠãŒã¶ãŒã«2ã€ã®ãªãã·ã§ã³ãæäŸããŸãã1ã€ç®ã¯èŠçŽ ã®äœæã«é²ãããšã2ã€ç®ã¯habrahabr.ruãžã®ãªã³ã¯ã«åŸãããšã§ã ã ããã§ã¯ãå®éã®ã¢ããªã±ãŒã·ã§ã³ã§ä»»æã®ãªãœãŒã¹ãèªç±ã«äœ¿çšã§ããŸã-ãã¯ãã«ã«ãµããŒããµã€ãã§ããå ŽåããããŸãã
ãããè¡ãã«ã¯ãããã€ãã®èŠçŽ ãè¿œå ããŸãã ããã«ãããŸãïŒ
final Label startVariant = new Label(); startVariant.setValue("Choose button"); layout.addComponent(startVariant); Button buttonClick = new Button("The option to create"); buttonClick.setStyleName(ValoTheme.BUTTON_TINY); layout.addComponent(buttonClick); Button buttonHabrahabr = new Button("Go habrahabr.ru"); buttonHabrahabr.setStyleName(ValoTheme.BUTTON_DANGER); layout.addComponent(buttonHabrahabr);
èµ·åæã«ïŒTomcatããŒãžã§ã³7.0.65ã§èµ·åããŠããŸãïŒã次ã®ãã®ããããŸãã
å°æ¥ã®ãŠãŒã¶ãŒã¯2ã€ã®ãªãã·ã§ã³ã䜿çšã§ããŸãã1ã€ç®ã¯ãªããžã§ã¯ãã®äœæã«é²ã¿ã2ã€ç®ã¯habrahabr.ruã«é²ã¿ãŸãã
ãããã£ãŠããŠãŒã¶ãŒã¯ãäœæãããªãã·ã§ã³ããã¿ã³ãã¯ãªãã¯ããŸãã éžæè¢ããããŸãã ãããè¡ãã«ã¯ãã¢ã¯ã·ã§ã³ã«addClickListenerãè¿œå ããŸãã ãã®ãããªãã®ïŒ
buttonHabrahabr.addClickListener(new Button.ClickListener() { @Override public void buttonClick(Button.ClickEvent clickEvent) { } });
ãªããªã LambdaåŒã䜿çšããæ¹ã䟿å©ã§ã;以äžã®ãã¹ãŠã®ãã³ãã©ãŒã¯ããããã䜿çšããŠèšè¿°ãããŸãã ->
buttonHabrahabr.addClickListener((Button.ClickListener) clickEvent -> { });
次ã«ãåŠçãè¡ãããªã¹ããŒãïŒbuttonClickïŒãã¿ã³ã«è¿œå ããã¯ãªãã¯ããããå¥ã®ComboBoxèŠçŽ ãæç»ããŸãã
buttonClick.addClickListener((Button.ClickListener) clickEvent -> { final ComboBox boxChange; layout.addComponent(boxChange = new ComboBox("Choose creation variant ")); boxChange.addItems("Create Table", "Create PrimaryKey");
TomCatãåèµ·åãããšã次ã®çµæãåŸãããŸãã
ããã§ã¯ããã¿ã³ã®å ŽæïŒãäœæãããªãã·ã§ã³ããšãhabrahabr.ruãå®è¡ãããïŒãããã«ããããŸãã ç§ã®æèŠã§ã¯ããããã¯éåžžã«è¿ããã®ã§ãã
ããã¯ç°¡åã«ä¿®æ£ã§ããŸãã
èŠçŽ ã®è¿œå ãåé€ããæ°ããæ°Žå¹³ã¬ã€ã€ãŒïŒãã¬ã€ã¢ãŠããïŒãè¿œå ããããã«ãã¿ã³ãè¿œå ããå ã®ã¬ã€ã¢ãŠãã«æ°ããã¬ã€ã€ãŒãè¿œå ããŸãã
layout.addComponent(buttonClick); layout.addComponent(buttonHabrahabr); final HorizontalLayout horizontalLayoutForButton = new HorizontalLayout(); horizontalLayoutForButton.addComponents(buttonClick,buttonHabrahabr); horizontalLayoutForButton.setSpacing(true); layout.addComponent(horizontalLayoutForButton);
ããã¯ãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒïŒTomCatïŒãåèµ·åããåŸã«åŸããããã®ã§ãã
ãããŒãã«ã®äœæãã§ã次ã®éšåãè¿œå ããŸãã
boxChange.addValueChangeListener((Property.ValueChangeListener) valueChangeEvent -> { if (Objects.equals(boxChange.getValue(), "Create Table")) { } else if (Objects.equals(boxChange.getValue(), "Create PrimaryKey")) { } }
å°ããªå€æŽãå ããŸãã ããšãã°ãäžåºŠéžæãããšãã¢ã€ãã ã¯èªã¿åãå°çšã«ãªããŸãã ããŒãã«ã®ååãšå°æ¥ã®ãã¡ã€ã«ã®äœæè ãå ¥åãããã£ãŒã«ããè¿œå ããŸãã
boxChange.addValueChangeListener((Property.ValueChangeListener) valueChangeEvent -> { if (Objects.equals(boxChange.getValue(), "Create Table")) { boxChange.setReadOnly(true); final TextField tableName = new TextField("Enter table name"); tableName.setWidth("300px"); tableName.setRequired(true); tableName.addValueChangeListener(event -> { String value = (String) event.getProperty().getValue(); Notification.show("Value is: " + value); }); tableName.setImmediate(true); final TextField authorName = new TextField("Enter author name"); authorName.setWidth("300px"); authorName.setRequired(true); authorName.addValueChangeListener(event -> { String authorNameValue = (String) event.getProperty().getValue(); Notification.show("Value is: " + authorNameValue); }); authorName.setImmediate(true); layout.addComponent(tableName); layout.addComponent(authorName);
çµæãååŸããŸããããã¯ãéžæåŸãããŒãã«ã®ååãšå€æŽã®äœæè ãå ¥åããæ©äŒããã£ãããšã瀺ããŠããŸãã å ¥åå€ã®é·ãããã³ãã®ä»ã®ãã©ã¡ãŒã¿ãŒã¯ãå¶éãŸãã¯å€æŽã§ããŸãã
ããã§ã¯ãå°èšãèŠçŽããããã®æšè«ãšã³ãŒãã®èšè¿°ã«ã€ããŠèª¬æããŸãã æåã®Vaadinã¬ã€ã¢ãŠããå°ãæŽçããããã€ãã®èŠçŽ ãäœæããŠã¿ãŠããã®åŠçãè¿œå ããŸããã
ããããã Liquibaseãå°ãæãäžããŠãã ãã ã æå§ãã«ãäŸãšã®ãªã³ã¯ãèŠã䟡å€ããããŸãã
ããŒãã«ã®äœæ-ãå€æŽïŒ 'createTable'ã
äœæäŸã
<?xml version="1.0" encoding="UTF-8"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"> <changeSet id="1" author="bob"> <createTable tableName="department"> <column name="id" type="int"> <constraints primaryKey="true" nullable="false"/> </column> <column name="name" type="varchar(50)"> <constraints nullable="false"/> </column> <column name="active" type="boolean" defaultValueBoolean="true"/> </createTable> </changeSet> </databaseChangeLog>
ãã¡ã€ã«ãäœæããã«ã¯ãïŒidãauthorãtableNameãnameãtypeïŒã«ããŒã¿ãè¿œå /æžã蟌ã¿ããŠãããåå¥ã®ãããŒã¹ãã1ã€ã®ãã¡ã€ã«ã«åéããå¿ èŠããããŸãã å®éã®ç¶æ³ã§ã¯ãããŸããŸãªãã£ãŒã«ãã䜿çšã§ããŸãã
ãããã©ã®ããã«è¡ããŸããïŒ ããã€ãã®ãªãã·ã§ã³ããããŸãã 次ã®èšäºã§ãããã®è§£æãè©Šã¿ãŸãã
ç¶ç¶ãã...