poniedziałek, 2 lipca 2018

How to deploy Spring Boot, JHipster app to tomcat 8 and redirect domain to this app

This is, how to do it on Ubuntu 16 on AWS EC2.


  1. In /opt/tomcat/webapps/ create myApp folder [assuming you have myApp.war file to deploy]
  2. Redirect your domain to ip of your server.
  3. Redirect port 8080 to 80:
    sudo iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-ports 8080
    
    And make it persistent:
    sudo apt-get install iptables-persistent
    
  4. For now, copy to /opt/tomcat/webapps/myApp index.jsp from /opt/tomcat/webapps/ROOT.
  5. Change ownership of /opt/tomcat/webapps/myApp and its content to tomcat
  6. In /opt/tomcat/conf/server.xml, before </Engine> tag, add:
     <Host name="myApp.com" appBase="webapps" unpackWARs="false" autoDeploy="false">
    <Alias>www.myApp.com</Alias>
    <Context path="" docBase="/opt/tomcat/webapps/myApp" debug="0" privileged="true" />
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
    prefix="myApp_access_log." suffix=".txt" 
    pattern="%h %l %u %t &quot;%r&quot; %s %b" resolveHosts="false" />
    </Host>
    
  7. sudo systemctl restart tomcat
  8. Go to www.myApp.com and you should see tomcat home page, as it was copied in point 5.
  9. Copy myApp.war to /opt/tomcat/webapps/ - it will override existing files and deploy your app


Points 5-10 are necessarily, because tomcat seeing your app in server.xml Host section, trying to redeploy it, causing hang.

czwartek, 28 czerwca 2018

How to update database in JHipster

After entity update, run:

./mvnw liquibase:diff

then

for dev database:

./mvnw liquibase:clearCheckSums



for prod database find in pom.xml:

<changeLogFile>src/main/resources/config/liquibase/master.xml</changeLogFile>
                    <diffChangeLogFile>src/main/resources/config/liquibase/changelog/${maven.build.timestamp}_changelog.xml</diffChangeLogFile>
                    <driver>com.mysql.jdbc.Driver</driver>
                    <url>jdbc:mysql://xxxxxxxxx.com:3306/dbase-dev</url>
                    <defaultSchemaName>dbase-dev</defaultSchemaName> 


change <url> and <defaultSchemaName> to production database:


<changeLogFile>src/main/resources/config/liquibase/master.xml</changeLogFile>
                    <diffChangeLogFile>src/main/resources/config/liquibase/changelog/${maven.build.timestamp}_changelog.xml</diffChangeLogFile>
                    <driver>com.mysql.jdbc.Driver</driver>
                    <url>jdbc:mysql://xxxxxxxxx.com:3306/dbase-prod</url>
                    <defaultSchemaName>dbase-prod</defaultSchemaName> 

and run:

./mvnw liquibase:clearCheckSums


After all change pom.xml to dev.

czwartek, 7 czerwca 2018

Recenzja drzwi DRE Modern zakupionych w sklepie Bel-Pol

W grudniu 2017r. wybraliśmy z katalogu białe drzwi DRE Modern. Projektantka, z którą współpracowaliśmy miała pozytywną opinię o drzwiach DRE i sklepie Bel-pol. Drzwi mają całkiem ładny kształt, a ogólnie nie ma zbyt dużej oferty na drzwi w kolorze białym. Nie widzieliśmy ich na żywo, ale założyliśmy, że ich jakość będzie podobna do innych drzwi DRE prezentowanych w sklepie.

Rzeczywiście, po montażu ładnie wyglądają. Z daleka.

Z bliska okazało się, że okleina krawędzi bocznej nie jest połączona z okleiną frontu, tylko jest naklejona oddzielnie. Drzwi są białe i patrząc od frontu widać wyraźnie krawędź okleiny wraz z klejem, które nie są białe a brązowe, odznaczając się na białym otoczeniu. Dodatkowo okleina jest pod kątem prostym w stosunku do frontu, a nie zaokrąglona jak w drzwiach prezentowanych w sklepie. 









Kolejną rzeczą są ramki przyszybowe, które nie przylegają do frontu – widoczne są wyraźne szpary.




Złożyliśmy reklamację w sklepie Bel-Pol, która została od razu odrzucona, mimo że przyznano nam rację, że okleina i ramki są wykonane nieestetycznie.



Niestety, nie mogliśmy sobie pozwolić na mieszkanie bez drzwi, aby producent przez 3 tygodnie dokonywał oględzin drzwi, które sam wyprodukował. Widać oględziny nie są możliwe na miejscu bez mikroskopu i tunelu aerodynamicznego.




poniedziałek, 14 maja 2018

How to compare entity id and route param in angular.

Get param from url:


1
2
3
    this.subscription = this.route.params.subscribe((params) => {
      this.deskId = params['id'];
    });

Compare it with some other id like:


1
this.desks[i].id


1
2
3
4
5
if (this.desks[i].id === this.deskId) {
 console.log('true');
} else {
console.log('false');
}

- suprisingly got false.


Cast param to number:

1
this.deskId*1


then


1
2
3
4
5
if (this.desks[i].id === (this.deskId*1)) {
 console.log('true');
} else {
console.log('false');
}

got true.

piątek, 11 maja 2018

How to create responsible equal height tiles in Angular 5 and Bootstrap 4


1
2
3
4
5
6
7
8
    <div class="row">
        <div *ngFor="let desk of subDesks | orderBy : 'description'; trackBy: trackId"  
         class="col-sm-6 col-md-4 col-lg-2 py-2">
            <div class="card card-body h-100 d-flex justify-content-center align-items-center bg-success text-white">
                 <h5 class="card-title text-center d-flex">{{desk.description}}</h5>
            </div>
        </div>
    </div>

How to include <jhi-*></jhi-*> selector on home page in JHipster 4

Create panel.component.html:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 <div class="row">
  <div class="col-sm-6 col-md-4 col-lg-2">
   <div class="card bg-success text-white">
    <div class="card-body">
     <h5 class="card-title text-center">Card 1</h5>
    </div>
   </div><br>
  </div>
  <div class="col-sm-6 col-md-4 col-lg-2">
   <div class="card bg-success text-white">
    <div class="card-body">
     <h5 class="card-title text-center">Card 1</h5>
    </div>
   </div><br>
  </div>
  <div class="col-sm-6 col-md-4 col-lg-2">
   <div class="card bg-success text-white">
    <div class="card-body">
     <h5 class="card-title text-center">Card 1</h5>
    </div>
   </div><br>
  </div>
  <div class="col-sm-6 col-md-4 col-lg-2">
   <div class="card bg-success text-white">
    <div class="card-body">
     <h5 class="card-title text-center">Card 1</h5>
    </div>
   </div><br>
  </div>
  <div class="col-sm-6 col-md-4 col-lg-2">
   <div class="card bg-success text-white">
    <div class="card-body">
     <h5 class="card-title text-center">Card 1</h5>
    </div>
   </div><br>
  </div>
  <div class="col-sm-6 col-md-4 col-lg-2">
   <div class="card bg-success text-white">
    <div class="card-body">
     <h5 class="card-title text-center">Card 1</h5>
    </div>
   </div><br>
  </div>
  <div class="col-sm-6 col-md-4 col-lg-2">
   <div class="card bg-success text-white">
    <div class="card-body">
     <h5 class="card-title text-center">Card 1</h5>
    </div>
   </div><br>
  </div>
  <div class="col-sm-6 col-md-4 col-lg-2">
   <div class="card bg-success text-white">
    <div class="card-body">
     <h5 class="card-title text-center">Card 1</h5>
    </div>
   </div><br>
  </div>
  <div class="col-sm-6 col-md-4 col-lg-2">
   <div class="card bg-success text-white">
    <div class="card-body">
     <h5 class="card-title text-center">Card 1</h5>
    </div>
   </div><br>
  </div>
  <div class="col-sm-6 col-md-4 col-lg-2">
   <div class="card bg-success text-white">
    <div class="card-body">
     <h5 class="card-title text-center">Card 1</h5>
    </div>
   </div><br>
  </div>
  <div class="col-sm-6 col-md-4 col-lg-2">
   <div class="card bg-success text-white">
    <div class="card-body">
     <h5 class="card-title text-center">Card 1</h5>
    </div>
   </div><br>
  </div>
  <div class="col-sm-6 col-md-4 col-lg-2">
   <div class="card bg-success text-white">
    <div class="card-body">
     <h5 class="card-title text-center">Card 1</h5>
    </div>
   </div><br>
  </div>
 </div>


Create panel.component.ts:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import { Component, OnDestroy, OnInit } from '@angular/core';

@Component({
    selector: 'jhi-panel',
  templateUrl: './panel.component.html',
})
export class PanelComponent implements OnInit, OnDestroy {
    alerts: any[];

    constructor() { }

    ngOnInit() {
    }

    ngOnDestroy() {
    }

}


Add PanelComponent to app/shared/shared.common.module.ts in:

  • declarations
  • exports


Add 

    <jhi-panel></jhi-panel>

anywhere in home.component.html.



piątek, 20 kwietnia 2018

How to determine user browser language in JHipster

In navbar.component.ts add:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
findBrowserLanguage() {
    let browserLang = navigator.language;
      switch (browserLang) {
        case 'pl-PL': {
          browserLang = 'pl';
          this.changeLanguage(browserLang);
          break;
        }
       }
  }

and in ngOnInit() fuction add:

1
this.findBrowserLanguage();