├── src ├── main │ ├── webapp │ │ ├── img │ │ │ ├── 1.jpg │ │ │ ├── 2.jpg │ │ │ ├── 3.jpg │ │ │ ├── 4.jpg │ │ │ ├── 5.jpg │ │ │ └── appIcon.png │ │ ├── WEB-INF │ │ │ └── web.xml │ │ ├── top.js │ │ ├── index.jsp │ │ └── index.html │ ├── resources │ │ ├── application.properties │ │ ├── log4j.properties │ │ └── spring-config.xml │ └── java │ │ ├── io │ │ └── bit_tiger │ │ │ ├── api │ │ │ ├── API.java │ │ │ └── dao │ │ │ │ ├── AppDAO.java │ │ │ │ └── impl │ │ │ │ └── AppImpl.java │ │ │ ├── webapi │ │ │ ├── WebApi.java │ │ │ └── service │ │ │ │ ├── AppService.java │ │ │ │ └── impl │ │ │ │ └── AppServiceImpl.java │ │ │ ├── AppstoreJavaApplication.java │ │ │ ├── entity │ │ │ └── App_Info.java │ │ │ └── controller │ │ │ └── AppController.java │ │ └── spring_boot_style │ │ ├── models │ │ ├── AppRepo.java │ │ └── App.java │ │ ├── AppStoreBoot.java │ │ └── controller │ │ └── AppController.java └── test │ └── java │ └── io │ └── bit_tiger │ └── AppstoreJavaApplicationTests.java ├── .github └── ISSUE_TEMPLATE.md ├── LICENSE.md ├── README.md ├── proposal.md ├── pom.xml ├── Resource.md ├── mvnw.cmd ├── mvnw ├── appstore-java.iml └── issues └── heroku-error.md /src/main/webapp/img/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JesseZhuang/Tiger-AppStore/HEAD/src/main/webapp/img/1.jpg -------------------------------------------------------------------------------- /src/main/webapp/img/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JesseZhuang/Tiger-AppStore/HEAD/src/main/webapp/img/2.jpg -------------------------------------------------------------------------------- /src/main/webapp/img/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JesseZhuang/Tiger-AppStore/HEAD/src/main/webapp/img/3.jpg -------------------------------------------------------------------------------- /src/main/webapp/img/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JesseZhuang/Tiger-AppStore/HEAD/src/main/webapp/img/4.jpg -------------------------------------------------------------------------------- /src/main/webapp/img/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JesseZhuang/Tiger-AppStore/HEAD/src/main/webapp/img/5.jpg -------------------------------------------------------------------------------- /src/main/webapp/img/appIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JesseZhuang/Tiger-AppStore/HEAD/src/main/webapp/img/appIcon.png -------------------------------------------------------------------------------- /src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.datasource.url=jdbc:mysql://localhost/appstore 2 | spring.datasource.username=zexi 3 | spring.datasource.password=zz123 -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ### Expected behavior and actual behavior 2 | 3 | 4 | ### Steps to reproduce the problem 5 | 6 | 7 | ### Specifications like the version of the project, operating system, or hardware 8 | 9 | 10 | ### Link to the error or exception report 11 | -------------------------------------------------------------------------------- /src/main/java/io/bit_tiger/api/API.java: -------------------------------------------------------------------------------- 1 | package io.bit_tiger.api; 2 | 3 | import io.bit_tiger.api.dao.AppDAO; 4 | 5 | public class API { 6 | 7 | public AppDAO appDao; 8 | 9 | public void setAppDao(AppDAO appDao) { 10 | this.appDao = appDao; 11 | } 12 | 13 | public AppDAO getAppDao() { 14 | return appDao; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/spring_boot_style/models/AppRepo.java: -------------------------------------------------------------------------------- 1 | package spring_boot_style.models; 2 | 3 | 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | 6 | import java.util.List; 7 | 8 | public interface AppRepo extends JpaRepository { 9 | 10 | // List selectTop5AppsByAppid(String appid); 11 | 12 | List findTop20ByOrderByScoreDesc(); 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/spring_boot_style/AppStoreBoot.java: -------------------------------------------------------------------------------- 1 | package spring_boot_style; 2 | 3 | 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | 7 | @SpringBootApplication 8 | public class AppStoreBoot { 9 | public static void main(String[] args) { 10 | SpringApplication.run(AppStoreBoot.class, args); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/io/bit_tiger/webapi/WebApi.java: -------------------------------------------------------------------------------- 1 | package io.bit_tiger.webapi; 2 | 3 | import io.bit_tiger.webapi.service.AppService; 4 | 5 | //@Configuration 6 | public class WebApi { 7 | 8 | //@Autowired 9 | private AppService appService; 10 | 11 | //@Bean 12 | public AppService getAppService() { 13 | return appService; 14 | } 15 | public void setAppService(AppService appService) { 16 | this.appService = appService; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/io/bit_tiger/AppstoreJavaApplication.java: -------------------------------------------------------------------------------- 1 | package io.bit_tiger; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.context.annotation.ImportResource; 6 | 7 | @SpringBootApplication 8 | @ImportResource("spring-config.xml") 9 | public class AppstoreJavaApplication { 10 | 11 | public static void main(String[] args) { 12 | SpringApplication.run(AppstoreJavaApplication.class, args); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/test/java/io/bit_tiger/AppstoreJavaApplicationTests.java: -------------------------------------------------------------------------------- 1 | package io.bit_tiger; 2 | 3 | import org.junit.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.boot.test.SpringApplicationConfiguration; 6 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 7 | import org.springframework.test.context.web.WebAppConfiguration; 8 | 9 | @RunWith(SpringJUnit4ClassRunner.class) 10 | @SpringApplicationConfiguration(classes = AppstoreJavaApplication.class) 11 | @WebAppConfiguration 12 | public class AppstoreJavaApplicationTests { 13 | 14 | @Test 15 | public void contextLoads() { 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/io/bit_tiger/api/dao/AppDAO.java: -------------------------------------------------------------------------------- 1 | package io.bit_tiger.api.dao; 2 | 3 | import io.bit_tiger.entity.App_Info; 4 | 5 | import java.util.List; 6 | 7 | public interface AppDAO { 8 | public App_Info createApp(App_Info appInfoObj); 9 | public App_Info deleteApp(App_Info appInfoObj); 10 | public App_Info updateApp(App_Info appInfoObj); 11 | public App_Info readApp(String appID); 12 | 13 | public List readAppByCatalog(String catalogID); 14 | public List readAppByUser(String userID); 15 | public List readTopApps(int topN); 16 | 17 | public boolean isAppExist(App_Info appInfo); 18 | public List readRecomApps(List appIDs); 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/io/bit_tiger/webapi/service/AppService.java: -------------------------------------------------------------------------------- 1 | package io.bit_tiger.webapi.service; 2 | 3 | import io.bit_tiger.entity.App_Info; 4 | 5 | import java.util.List; 6 | 7 | public interface AppService { 8 | public App_Info createApp(App_Info obj); 9 | public App_Info readApp(String appId); 10 | public App_Info updateApp(App_Info obj); 11 | public App_Info deleteApp(App_Info obj); 12 | 13 | public List readAppByUser(String userId); 14 | public List readAppbyCatalog(String catalogId); 15 | public List readTopApps(int topN); 16 | 17 | public boolean isExist(App_Info appInfo); 18 | public List readRecomApps(List appIDs); 19 | } 20 | -------------------------------------------------------------------------------- /src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | # Root logger option 2 | 3 | log4j.rootLogger=INFO, file, stdout 4 | 5 | #log4j.logger.org.quartz=DEBUG 6 | 7 | # Direct log messages to a log file 8 | log4j.appender.file=org.apache.log4j.RollingFileAppender 9 | log4j.appender.file.File=J\:/Workspaces/MyEclipse Professional 2014/AppStore_12_28/src/main/resources/app_log.log 10 | log4j.appender.file.MaxFileSize=100MB 11 | log4j.appender.file.MaxBackupIndex=7 12 | log4j.appender.file.layout=org.apache.log4j.PatternLayout 13 | log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 14 | 15 | # Direct log messages to stdout 16 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 17 | log4j.appender.stdout.Target=System.out 18 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 19 | log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 20 | -------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | App Store For Student 7 | 8 | index.jsp 9 | 10 | 11 | 12 | mvc-dispatcher 13 | org.springframework.web.servlet.DispatcherServlet 14 | 15 | contextConfigLocation 16 | /WEB-INF/spring-config.xml 17 | 18 | 1 19 | 20 | 21 | 22 | mvc-dispatcher 23 | / 24 | 25 | 26 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011-2016 GitHub Inc. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TigerX Mini Projects Session 4 Group 9 Java Appstore 2 | 3 | ## Description 4 | 5 | App data was crawled from [Huawei appstore](http://appstore.huawei.com/soft/list) and our application is a single page application (SPA) that displays the top 20 applications from the appstore. When a user clicks on a specific app, the detailed app information and 5 related recommended apps are displayed. Visit our [heroku deployment demo here](http://bittigerx-java-appstore.herokuapp.com/). Note the app currently only works on http not https. 6 | 7 | # Usage 8 | 9 | - Generate jar with Maven. Use `java -jar target/jar-filename.jar` from command line. This is the method used for our heroku deployment. 10 | - We have not tested the war file deployment yet. 11 | - Use an IDE like eclipse or IntelliJ IDEA. 12 | 13 | # Components/Structure 14 | 15 | - Spring-Boot, Hibernate ORM, Spring Data JPA, Lombok. 16 | - MySQL (data storage) 17 | - Tomcat 8.0 (web server) 18 | - Front end: BootStrap, Jquery, and AngularJS (UX). 19 | - Built with Maven. 20 | 21 | # Team 22 | 23 | - [Zexi Jesse Zhuang](http://jessezhuang.github.io/) 24 | - [Zhihao Wu](https://github.com/ttylcc) 25 | 26 | # Acknowledgment 27 | 28 | Thank [Qun Wu](https://github.com/QunWu) for the guidance in the project and [Jerry Yang](https://github.com/imjerryyang) for organizing and encouragements. 29 | 30 | -------------------------------------------------------------------------------- /src/main/java/spring_boot_style/models/App.java: -------------------------------------------------------------------------------- 1 | package spring_boot_style.models; 2 | 3 | import lombok.Data; 4 | 5 | import javax.persistence.Entity; 6 | import javax.persistence.Id; 7 | import javax.persistence.Table; 8 | import javax.persistence.Transient; 9 | import javax.validation.constraints.NotNull; 10 | 11 | /** 12 | * A java class representing an App_Info in the HUAWEI app store. 13 | */ 14 | @Entity 15 | @Table(name = "app_info") //if omitted, will try to match same name table of this class 16 | @Data //getter and setters generated by lombok, hibernate and jackson will use these to hydrate objects from database 17 | public class App { 18 | 19 | @Id 20 | @NotNull 21 | private String appid; //C10000291, 8 digits 22 | private int score; 23 | private String title; 24 | private String url; 25 | private String thumbnailUrl; 26 | private String intro; 27 | private String developer; 28 | 29 | private String top5App; 30 | 31 | @Transient 32 | private String[] top5AppsArr; 33 | @Transient 34 | public String[] getTop5AppsArray() { 35 | 36 | if(this.top5App != null && this.top5App.length() > 0){ 37 | this.top5App = this.top5App.substring(1, this.top5App.length()-1); 38 | 39 | String[] appIDs = this.top5App.split(","); 40 | this.top5AppsArr = new String[5]; 41 | 42 | for(int i = 0 ; i < appIDs.length; i++) 43 | this.top5AppsArr[i] = appIDs[i].trim(); 44 | }else 45 | return new String[]{}; 46 | 47 | return top5AppsArr; 48 | } 49 | 50 | // default constructor necessary for hibernate to connect class with mysql database, avoid overriden 51 | public App(){} 52 | 53 | public App(String appid){this.appid = appid;} 54 | 55 | 56 | } 57 | -------------------------------------------------------------------------------- /proposal.md: -------------------------------------------------------------------------------- 1 | # BitTigerX-AppStore with Java (4th Session Team 9) 太阁X项目四期9组-AppStore项目 2 | 3 | ## Description 4 | Create a simple app store web application. For your stack we suggest using the Spring-MVC framework along with: Hibernate ORM as an intermediary between Java and MySQL, MySQL for data storage, Tomcat 8.0 for your web server, and Angular JS for the front end. 5 | 6 | ## Plan 7 | 8 | ### Todo List 9 | - [x] Feature 1 10 | - [ ] Feature 2 11 | - [ ] Feature 3 12 | 13 | ### Time Schedule 14 | Use securing confined his shutters. Delightful as he it acceptance an solicitude discretion reasonably. Carriage we husbands advanced an perceive greatest. Totally dearest expense on demesne ye he. 15 | 16 | | Stage | Start | End | Goals | 17 | | ------------- | ------------- | ------------- | ------------- | 18 | | 1 | 02/01/16 | 02/07/16 | Project Selection, Plan Discussion, and Proposal Draft Writing | 19 | | 2 | 02/08/16 | 02/24/16 | System Design, Resource Discovery, Project Implementation, Document Writing | 20 | | 3 | 02/25/16 | 02/29/16 | User Manual Writing and Presentation Making | 21 | 22 | ## Resource 23 | - [BitTiger Project: AppStore - Crawler](https://slack-files.com/T0GUEMKEZ-F0J4G9QTT-274d3bc97e) 24 | - [Awesome Resource](https://www.google.com/) 25 | 26 | ## License 27 | See the [LICENSE](LICENSE.md) file for license rights and limitations (MIT). 28 | 29 | ## Project Information 30 | - category: full stack 31 | - team: Awesome Team 32 | - description: One sentence description for your awesome project. 33 | - stack: angular, firebase 34 | 35 | > **Note:** 我们使用[爬虫](https://github.com/hackjustu/Project-Markdown-Table-Generator)爬取 `Project Information` 部分的内容并生成项目统计数据。为了方便系统识别,建议`category`和`stack`部分使用下面列举的选项。 如果发现需要别的选项不在列表中,请和我们联系^^ 36 | > 37 | >**category options:** 38 | >full stack, big data, mobile 39 | > 40 | > **stack options:** 41 | > android angular aws big_data boostrap cordova css docker firebase flask github grunt html5 ios java javascript jquery meteor mongodb mysql nodejs python react reddis ruby_on_rails ruby spark spring_mvc tomcat windows 42 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | io.bit_tiger 7 | appstore-java 8 | 0.0.1-SNAPSHOT 9 | jar 10 | 11 | appstore-java 12 | Appstore with Java Sprint Boot 13 | 14 | 15 | org.springframework.boot 16 | spring-boot-starter-parent 17 | 1.3.5.RELEASE 18 | 19 | 20 | 21 | 22 | UTF-8 23 | 1.8 24 | 25 | 26 | 27 | 28 | org.springframework.boot 29 | spring-boot-starter-actuator 30 | 31 | 32 | org.springframework.boot 33 | spring-boot-starter-data-jpa 34 | 35 | 36 | org.projectlombok 37 | lombok 38 | 1.16.6 39 | 40 | 41 | org.springframework.boot 42 | spring-boot-starter-web 43 | 44 | 45 | 46 | mysql 47 | mysql-connector-java 48 | runtime 49 | 50 | 51 | org.springframework.boot 52 | spring-boot-starter-test 53 | test 54 | 55 | 56 | 57 | 58 | 59 | 60 | org.springframework.boot 61 | spring-boot-maven-plugin 62 | 63 | 64 | 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /src/main/java/io/bit_tiger/webapi/service/impl/AppServiceImpl.java: -------------------------------------------------------------------------------- 1 | package io.bit_tiger.webapi.service.impl; 2 | 3 | import io.bit_tiger.api.API; 4 | import io.bit_tiger.entity.App_Info; 5 | import io.bit_tiger.webapi.service.AppService; 6 | import org.springframework.transaction.annotation.Transactional; 7 | 8 | import java.util.List; 9 | 10 | public class AppServiceImpl implements AppService{ 11 | 12 | private API api; 13 | 14 | @Override 15 | @Transactional 16 | public App_Info createApp(App_Info obj) { 17 | // TODO Auto-generated method stub 18 | return this.api.getAppDao().createApp(obj); 19 | } 20 | 21 | @Override 22 | @Transactional 23 | public App_Info readApp(String appId) { 24 | // TODO Auto-generated method stub 25 | return this.api.getAppDao().readApp(appId); 26 | } 27 | 28 | @Override 29 | @Transactional 30 | public App_Info updateApp(App_Info obj) { 31 | // TODO Auto-generated method stub 32 | return this.api.getAppDao().updateApp(obj); 33 | } 34 | 35 | @Override 36 | @Transactional 37 | public App_Info deleteApp(App_Info obj) { 38 | // TODO Auto-generated method stub 39 | return this.api.getAppDao().deleteApp(obj); 40 | } 41 | 42 | @Override 43 | @Transactional 44 | public List readAppByUser(String userId) { 45 | // TODO Auto-generated method stub 46 | return this.api.getAppDao().readAppByUser(userId); 47 | } 48 | 49 | @Override 50 | @Transactional 51 | public List readAppbyCatalog(String catalogId) { 52 | // TODO Auto-generated method stub 53 | return this.api.getAppDao().readAppByCatalog(catalogId); 54 | } 55 | 56 | @Override 57 | @Transactional 58 | public List readTopApps(int topN) { 59 | // TODO Auto-generated method stub 60 | return this.api.getAppDao().readTopApps(topN); 61 | } 62 | 63 | public API getApi() { 64 | return api; 65 | } 66 | 67 | public void setApi(API api) { 68 | this.api = api; 69 | } 70 | 71 | @Override 72 | @Transactional 73 | public boolean isExist(App_Info appInfo) { 74 | // TODO Auto-generated method stub 75 | return this.api.getAppDao().isAppExist(appInfo); 76 | 77 | } 78 | 79 | @Override 80 | @Transactional 81 | public List readRecomApps(List appIDs) { 82 | // TODO Auto-generated method stub 83 | return this.api.getAppDao().readRecomApps(appIDs); 84 | } 85 | 86 | } 87 | -------------------------------------------------------------------------------- /src/main/java/io/bit_tiger/entity/App_Info.java: -------------------------------------------------------------------------------- 1 | package io.bit_tiger.entity; 2 | 3 | import javax.persistence.Entity; 4 | import javax.persistence.Id; 5 | import javax.persistence.Table; 6 | import javax.persistence.Transient; 7 | 8 | @Entity 9 | @Table(name = "app_info") 10 | public class App_Info { 11 | private String title; 12 | private String appid; 13 | private String thumbnail_url; 14 | private String intro; 15 | private String url; 16 | private String developer; 17 | private String top5App; 18 | private int score = 0; 19 | 20 | private String[] top5AppsArr; 21 | @Transient 22 | public String[] getTop5AppsArray() { 23 | 24 | if(this.top5App != null && this.top5App.length() > 0){ 25 | this.top5App = this.top5App.substring(1, this.top5App.length()-1); 26 | 27 | String[] appIDs = this.top5App.split(","); 28 | this.top5AppsArr = new String[5]; 29 | 30 | for(int i = 0 ; i < appIDs.length; i++) 31 | this.top5AppsArr[i] = appIDs[i].trim(); 32 | }else 33 | return new String[]{}; 34 | 35 | return top5AppsArr; 36 | } 37 | 38 | @Id 39 | public String getAppid() { 40 | return appid; 41 | } 42 | 43 | public String getTitle() { 44 | return title; 45 | } 46 | 47 | public void setTitle(String title) { 48 | this.title = title; 49 | } 50 | 51 | public String getThumbnail_url() { 52 | return thumbnail_url; 53 | } 54 | 55 | public void setThumbnail_url(String thumbnail_url) { 56 | this.thumbnail_url = thumbnail_url; 57 | } 58 | 59 | public String getIntro() { 60 | return intro; 61 | } 62 | 63 | public void setIntro(String intro) { 64 | this.intro = intro; 65 | } 66 | 67 | public String getUrl() { 68 | return url; 69 | } 70 | 71 | public void setUrl(String url) { 72 | this.url = url; 73 | } 74 | 75 | public String getDeveloper() { 76 | return developer; 77 | } 78 | 79 | public void setDeveloper(String developer) { 80 | this.developer = developer; 81 | } 82 | 83 | public String getTop5App() { 84 | return top5App; 85 | } 86 | 87 | public void setTop5App(String top5App) { 88 | this.top5App = top5App; 89 | } 90 | 91 | public int getScore() { 92 | return score; 93 | } 94 | 95 | public void setScore(int score) { 96 | this.score = score; 97 | } 98 | 99 | public void setAppid(String appid) { 100 | this.appid = appid; 101 | } 102 | 103 | } 104 | -------------------------------------------------------------------------------- /Resource.md: -------------------------------------------------------------------------------- 1 | # Resource 2 | 3 | ### Project Videos and Description on BitTiger 4 | 5 | - [本项目介绍](https://www.bittiger.io/microproject/2Ln4gW4vs9xCRc5qG) 6 | - [太阁x直播 新兵训练营](https://www.bittiger.io/classpage/H9PG262bx3QTEbP5T) 7 | - [太阁x新兵训练营第二期](https://www.bittiger.io/classpage/FqdBEQdviJz4jtX2z) 8 | - [太阁微项目8 AppStore之Java前端(一)](https://www.bittiger.io/videos/Qfr9wdaKhztn2JaJj/pZZmpXCYiQ6c6ZRdm) 9 | - [太阁微项目8 AppStore之Java前端(二)](https://www.bittiger.io/videos/25c2nRbATxnd8FHbo/pZZmpXCYiQ6c6ZRdm) 10 | - [太阁微项目8 AppStore之Java前端(三)](https://www.bittiger.io/classpage/Acof4XCZC98BFHrhQ) 11 | - [太阁x多伦多 爱上Java&Spring](https://www.bittiger.io/classpage/eg2b34sYEyzok6AnN) 12 | 13 | ### Spring Framework (MVC, Boot) 14 | 15 | - [Spring Boot HelloWorld](https://spring.io/guides/gs/spring-boot/) 16 | - [Spring JPA Guide](https://spring.io/guides/gs/accessing-data-jpa/) 17 | - [Spring Data JPA Docs](http://docs.spring.io/spring-data/jpa/docs/1.10.1.RELEASE/reference/html/) 18 | - [Spring Boot Docs](http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/) 19 | - [Spring MVC tutorial](https://docs.spring.io/docs/Spring-MVC-step-by-step/) 20 | - [Spring MVC starter](https://spring.io/guides/gs/serving-web-content/) 21 | 22 | ### Hibernate and MySQL 23 | 24 | - [Hibernate docs](http://hibernate.org/orm/) 25 | - [MySQL tutorial](http://dev.mysql.com/doc/refman/5.7/en/tutorial.html) 26 | 27 | ### Tomcat 28 | 29 | - [Tomcat 8.0 setup](https://tomcat.apache.org/tomcat-8.0-doc/setup.html) 30 | 31 | ### Front End 32 | 33 | - [AngularJS](https://angularjs.org/) 34 | - [Bootstrap tool](http://www.runoob.com/try/bootstrap/layoutit/) 35 | - [Bootstrap中文教程](http://www.w3cschool.cc/bootstrap/bootstrap-tutorial.html) 36 | 37 | ### Other Resources 38 | 39 | **About README** 40 | 41 | - https://github.com/matiassingers/awesome-readme 42 | - https://gist.github.com/PurpleBooth/109311bb0361f32d87a2 43 | 44 | **About Badges** 45 | 46 | - http://shields.io/ 47 | 48 | **About Screenshot** 49 | 50 | - iOS: http://mockuphone.com/ 51 | - Android: https://developer.android.com/distribute/tools/promote/device-art.html 52 | 53 | **About Demo GIF** 54 | 55 | - Cross-platforms: https://ffmpeg.org/ 56 | - OS X: https://github.com/dergachev/screengif 57 | 58 | **About License** 59 | 60 | - https://github.com/blog/1530-choosing-an-open-source-license 61 | 62 | 63 | **About Markdown Syntax** 64 | 65 | - [Markdown Cheatsheet](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) -------------------------------------------------------------------------------- /src/main/webapp/top.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | var homeApp = angular.module('top', []); 3 | 4 | homeApp.controller('appList',['$http','$window',function($http,$window){ 5 | this.appList = [];//jobs; 6 | this.showApp =false; 7 | 8 | this.appToShow = null; 9 | this.appToRecom = null; 10 | 11 | var container = this; 12 | 13 | var req = { 14 | method: 'GET', 15 | // url: "http://localhost:8080/AppStore_1_3/app/", 16 | url: "http://localhost:8080/app/", 17 | headers: { 18 | 'Content-Type': "application/json", 19 | 'dataType': 'json' 20 | } 21 | }; 22 | 23 | $http(req).then(function(data) { 24 | container.appList = data.data; 25 | container.appsToShow = container.appList[0]; 26 | 27 | console.log("receive array successfully"); 28 | }); 29 | 30 | this.selectApp = function(app){ 31 | container.appToShow = app; 32 | container.showApp =true; 33 | console.log(JSON.stringify(app.top5AppsArray)); 34 | var request = { 35 | method: 'POST', 36 | // url: "http://localhost:8080/AppStore_1_3/app/getRecom/similarapp/", 37 | // delete path getRecom to follow REST 38 | url: "http://localhost:8080/app/similarapp/", 39 | data: app.top5AppsArray, 40 | headers: { 41 | 'Accept': 'application/json', 42 | 'Content-Type': "application/json", 43 | 'dataType': 'json' 44 | } 45 | }; 46 | $http(request).then( 47 | function(data) { 48 | 49 | if(data.data.length>0){ 50 | container.appsToRecom = data.data; 51 | }else{ 52 | container.appsToRecom = []; 53 | } 54 | 55 | console.log("receive array successfully"); 56 | },function(data){ 57 | alert("Note: no recommendation for this app"); 58 | } 59 | ); 60 | // $http.get('http://localhost:8080/AppStore_1_3/app/getRecom/similarapp/') 61 | // .success(function(data,status){ 62 | // console.log(JSON.stringify(data)); 63 | // })//end-$http.get:success 64 | // .error(function(data){ 65 | // alert("Error Occurs"+JSON.stringify(data)); 66 | // })//end-$http.end:error 67 | // ;//end-call back definitions 68 | };//end-seleCate 69 | 70 | this.goBackToMain = function(){ 71 | container.showApp = false; 72 | }; 73 | 74 | }]);//end-Controller-initContainer 75 | 76 | })();//end-function 77 | -------------------------------------------------------------------------------- /src/main/java/spring_boot_style/controller/AppController.java: -------------------------------------------------------------------------------- 1 | package spring_boot_style.controller; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.http.HttpHeaders; 5 | import org.springframework.http.HttpStatus; 6 | import org.springframework.http.MediaType; 7 | import org.springframework.http.ResponseEntity; 8 | import org.springframework.web.bind.annotation.*; 9 | import spring_boot_style.models.App; 10 | import spring_boot_style.models.AppRepo; 11 | 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | @RestController 16 | @RequestMapping(value = "/app") 17 | public class AppController { 18 | 19 | @Autowired 20 | private AppRepo appRepo; 21 | 22 | @RequestMapping(value = "/", method = RequestMethod.GET) 23 | public List findTop20Apps(){return appRepo.findTop20ByOrderByScoreDesc();}; 24 | 25 | // C268 chu bao dianhua 26 | @RequestMapping(value = "/getRecom/{appid}", method = RequestMethod.GET) 27 | public List getRecommendedAppsJson(@PathVariable String appid) { 28 | return appRepo.findAll(); 29 | // return appRepo.findAll().sort(Comparator.comparing()); 30 | 31 | // String[] recomList = app.getTop5App(); 32 | // return appRepo.selectTop5AppsByAppid(appid); 33 | 34 | } 35 | 36 | @RequestMapping(value = "/similarapp/", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) 37 | public ResponseEntity> getRecommendedApps(@RequestBody List appIds) { 38 | List recomApps = new ArrayList<>(appIds.size()); 39 | for (String appid : appIds) { 40 | recomApps.add(findApp(appid)); 41 | } 42 | if (recomApps == null || recomApps.size() == 0) { 43 | System.out.println("AppController 65: no recommandation appInfos found"); 44 | return new ResponseEntity>(HttpStatus.NOT_FOUND); 45 | } 46 | System.out.println("/****************************************************/" + "\r\n" + 47 | " Retrievw 5 Recom Apps " + "\r\n" + 48 | "/****************************************************/"); 49 | HttpHeaders headers = new HttpHeaders(); 50 | return new ResponseEntity>(recomApps, headers, HttpStatus.OK); 51 | } 52 | 53 | @RequestMapping(value = "/{appid}", method = RequestMethod.GET) 54 | public App findApp(@PathVariable String appid) { 55 | return appRepo.findOne(appid); 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /src/main/java/io/bit_tiger/api/dao/impl/AppImpl.java: -------------------------------------------------------------------------------- 1 | package io.bit_tiger.api.dao.impl; 2 | 3 | import io.bit_tiger.api.dao.AppDAO; 4 | import io.bit_tiger.entity.App_Info; 5 | import org.hibernate.Query; 6 | import org.hibernate.Session; 7 | import org.hibernate.SessionFactory; 8 | 9 | import java.util.ArrayList; 10 | import java.util.List; 11 | 12 | public class AppImpl implements AppDAO{ 13 | private SessionFactory sessionFactory; 14 | 15 | @Override 16 | /* 17 | * Problem: App's coms and cata are both fetchType.EAGER, but when read, they are loaded. 18 | * @see com.appstore.api.dao.AppDAO#createApp(com.appstore.entity.App) 19 | */ 20 | public App_Info createApp(App_Info appInfoObj) { 21 | // TODO Auto-generated method stub 22 | Object obj = this.getSession().save(appInfoObj); 23 | appInfoObj = this.readApp(obj.toString()); 24 | return appInfoObj; 25 | } 26 | 27 | @Override 28 | public App_Info deleteApp(App_Info appInfoObj) { 29 | // TODO Auto-generated method stub 30 | this.getSession().delete(appInfoObj); 31 | return appInfoObj; 32 | } 33 | 34 | @Override 35 | public App_Info updateApp(App_Info appInfoObj) { 36 | // TODO Auto-generated method stub 37 | this.getSession().update(appInfoObj); 38 | return null; 39 | } 40 | 41 | @Override 42 | public App_Info readApp(String appID) { 43 | // TODO Auto-generated method stub 44 | App_Info appInfo = (App_Info) this.getSession().get(App_Info.class, appID); 45 | return appInfo; 46 | } 47 | 48 | @Override 49 | public List readAppByCatalog(String catalogID) { 50 | // TODO Auto-generated method stub 51 | return null; 52 | } 53 | 54 | @Override 55 | public List readAppByUser(String userID) { 56 | // TODO Auto-generated method stub 57 | return null; 58 | } 59 | 60 | @Override 61 | public boolean isAppExist(App_Info appInfo) { 62 | // TODO Auto-generated method stub 63 | String appid = appInfo.getAppid(); 64 | Query query = this.getSession().createQuery("select count(*) from App_Info appInfo where appInfo.appid = :appid").setString("appid", appid); 65 | long count = (long) query.uniqueResult(); 66 | return count == 1 ? true : false; 67 | } 68 | 69 | @Override 70 | public List readTopApps(int topN) { 71 | // TODO Auto-generated method stub 72 | Query query = this.getSession().createQuery("from App_Info appInfo order by appInfo.score desc").setMaxResults(topN); 73 | List appInfos = (List)query.list(); 74 | return appInfos; 75 | } 76 | 77 | public void setSessionFactory(SessionFactory sessionFactory) { 78 | this.sessionFactory = sessionFactory; 79 | } 80 | 81 | public SessionFactory getSessionFactory() { 82 | return sessionFactory; 83 | } 84 | 85 | public Session getSession() { 86 | return this.sessionFactory.getCurrentSession(); 87 | } 88 | 89 | @Override 90 | public List readRecomApps(List appIDs) { 91 | // TODO Auto-generated method stub 92 | if(appIDs == null) 93 | return new ArrayList<>(); 94 | 95 | List recomAppInfos = new ArrayList<>(appIDs.size()); 96 | for(String appid : appIDs){ 97 | App_Info appInfo = this.readApp(appid); 98 | if(appInfo != null) 99 | recomAppInfos.add(appInfo); 100 | else{ 101 | System.out.println("appImpl 104 returned appInfo with id: "+appid+" is null"); 102 | } 103 | } 104 | return recomAppInfos; 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /src/main/resources/spring-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | org.hibernate.dialect.MySQLDialect 33 | true 34 | 35 | 36 | 37 | 40 | 41 | 42 | io.bit_tiger.entity.App_Info 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 62 | 63 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /src/main/webapp/index.jsp: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 57 | 58 | 59 |
60 |
61 |
62 | 109 |
110 |
111 |
112 |
113 | 114 |
115 | 116 | Top 10 Apps 117 |
118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 |
{{app.appid}}app_img{{app.title}}
rate:{{app.score}}/10
129 |
130 | 131 |
132 | 133 |
134 |
135 | Go Back 136 |
137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 |
{{apps.appToShow.appid}}
{{apps.appToShow.title}}
rate: {{apps.appToShow.score}}/10
151 |
152 |
153 |

Customers Also Like:

154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 |
{{appToRecom.title}}
163 |
164 | 165 |
166 |

Description:

167 |
168 |

169 | {{apps.appToShow.intro}} 170 |

171 |
172 |
173 |
174 |
175 | 176 |
177 |
178 |
179 | 180 | -------------------------------------------------------------------------------- /mvnw.cmd: -------------------------------------------------------------------------------- 1 | @REM ---------------------------------------------------------------------------- 2 | @REM Licensed to the Apache Software Foundation (ASF) under one 3 | @REM or more contributor license agreements. See the NOTICE file 4 | @REM distributed with this work for additional information 5 | @REM regarding copyright ownership. The ASF licenses this file 6 | @REM to you under the Apache License, Version 2.0 (the 7 | @REM "License"); you may not use this file except in compliance 8 | @REM with the License. You may obtain a copy of the License at 9 | @REM 10 | @REM http://www.apache.org/licenses/LICENSE-2.0 11 | @REM 12 | @REM Unless required by applicable law or agreed to in writing, 13 | @REM software distributed under the License is distributed on an 14 | @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 | @REM KIND, either express or implied. See the License for the 16 | @REM specific language governing permissions and limitations 17 | @REM under the License. 18 | @REM ---------------------------------------------------------------------------- 19 | 20 | @REM ---------------------------------------------------------------------------- 21 | @REM Maven2 Start Up Batch script 22 | @REM 23 | @REM Required ENV vars: 24 | @REM JAVA_HOME - location of a JDK home dir 25 | @REM 26 | @REM Optional ENV vars 27 | @REM M2_HOME - location of maven2's installed home dir 28 | @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands 29 | @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending 30 | @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven 31 | @REM e.g. to debug Maven itself, use 32 | @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 33 | @REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files 34 | @REM ---------------------------------------------------------------------------- 35 | 36 | @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' 37 | @echo off 38 | @REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' 39 | @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% 40 | 41 | @REM set %HOME% to equivalent of $HOME 42 | if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") 43 | 44 | @REM Execute a user defined script before this one 45 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre 46 | @REM check for pre script, once with legacy .bat ending and once with .cmd ending 47 | if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" 48 | if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" 49 | :skipRcPre 50 | 51 | @setlocal 52 | 53 | set ERROR_CODE=0 54 | 55 | @REM To isolate internal variables from possible post scripts, we use another setlocal 56 | @setlocal 57 | 58 | @REM ==== START VALIDATION ==== 59 | if not "%JAVA_HOME%" == "" goto OkJHome 60 | 61 | echo. 62 | echo Error: JAVA_HOME not found in your environment. >&2 63 | echo Please set the JAVA_HOME variable in your environment to match the >&2 64 | echo location of your Java installation. >&2 65 | echo. 66 | goto error 67 | 68 | :OkJHome 69 | if exist "%JAVA_HOME%\bin\java.exe" goto init 70 | 71 | echo. 72 | echo Error: JAVA_HOME is set to an invalid directory. >&2 73 | echo JAVA_HOME = "%JAVA_HOME%" >&2 74 | echo Please set the JAVA_HOME variable in your environment to match the >&2 75 | echo location of your Java installation. >&2 76 | echo. 77 | goto error 78 | 79 | @REM ==== END VALIDATION ==== 80 | 81 | :init 82 | 83 | set MAVEN_CMD_LINE_ARGS=%* 84 | 85 | @REM Find the project base dir, i.e. the directory that contains the folder ".mvn". 86 | @REM Fallback to current working directory if not found. 87 | 88 | set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% 89 | IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir 90 | 91 | set EXEC_DIR=%CD% 92 | set WDIR=%EXEC_DIR% 93 | :findBaseDir 94 | IF EXIST "%WDIR%"\.mvn goto baseDirFound 95 | cd .. 96 | IF "%WDIR%"=="%CD%" goto baseDirNotFound 97 | set WDIR=%CD% 98 | goto findBaseDir 99 | 100 | :baseDirFound 101 | set MAVEN_PROJECTBASEDIR=%WDIR% 102 | cd "%EXEC_DIR%" 103 | goto endDetectBaseDir 104 | 105 | :baseDirNotFound 106 | set MAVEN_PROJECTBASEDIR=%EXEC_DIR% 107 | cd "%EXEC_DIR%" 108 | 109 | :endDetectBaseDir 110 | 111 | IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig 112 | 113 | @setlocal EnableExtensions EnableDelayedExpansion 114 | for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a 115 | @endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% 116 | 117 | :endReadAdditionalConfig 118 | 119 | SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" 120 | 121 | set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" 122 | set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain 123 | 124 | %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% 125 | if ERRORLEVEL 1 goto error 126 | goto end 127 | 128 | :error 129 | set ERROR_CODE=1 130 | 131 | :end 132 | @endlocal & set ERROR_CODE=%ERROR_CODE% 133 | 134 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost 135 | @REM check for post script, once with legacy .bat ending and once with .cmd ending 136 | if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" 137 | if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" 138 | :skipRcPost 139 | 140 | @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' 141 | if "%MAVEN_BATCH_PAUSE%" == "on" pause 142 | 143 | if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% 144 | 145 | exit /B %ERROR_CODE% -------------------------------------------------------------------------------- /src/main/webapp/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 58 | 59 | 60 |
61 | 62 |
63 |
64 | 111 |
112 |
113 |
114 |
115 | 116 | 117 |
118 | 119 | Top 20 Apps 120 |
121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 |
{{appInfo.appid}}app_img{{appInfo.title}}
rate:{{appInfo.score}}/10
133 |
134 | 135 |
136 | 137 |
138 |
139 | Go Back 140 |
141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 |
{{appInfos.appToShow.appid}}
{{appInfos.appToShow.title}}
rate: {{appInfos.appToShow.score}}/10
155 |
156 |
157 |

Customers Also Like:

158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 |
{{appToRecom.title}}
167 |
168 | 169 |
170 |
171 | 182 |
183 |
184 |

{{appInfos.appToShow.intro}}

185 |
186 |
187 |

{{appInfos.appToShow.developer}}

188 |
189 | 190 |
191 |
192 |
193 | 194 |
195 |
196 |
197 | 198 | -------------------------------------------------------------------------------- /src/main/java/io/bit_tiger/controller/AppController.java: -------------------------------------------------------------------------------- 1 | package io.bit_tiger.controller; 2 | 3 | 4 | import com.fasterxml.jackson.core.JsonGenerationException; 5 | import com.fasterxml.jackson.databind.JsonMappingException; 6 | import com.fasterxml.jackson.databind.ObjectMapper; 7 | import io.bit_tiger.entity.App_Info; 8 | import io.bit_tiger.webapi.WebApi; 9 | import org.springframework.http.HttpHeaders; 10 | import org.springframework.http.HttpStatus; 11 | import org.springframework.http.MediaType; 12 | import org.springframework.http.ResponseEntity; 13 | import org.springframework.web.bind.annotation.*; 14 | import org.springframework.web.util.UriComponentsBuilder; 15 | 16 | import javax.annotation.Resource; 17 | import java.io.IOException; 18 | import java.util.List; 19 | 20 | //import org.codehaus.jackson.JsonGenerationException; 21 | //import org.codehaus.jackson.map.JsonMappingException; 22 | //import org.codehaus.jackson.map.ObjectMapper; 23 | 24 | @RestController 25 | public class AppController { 26 | 27 | @Resource(name = "webapi") //@Autowired 28 | private WebApi api; 29 | 30 | //-------------------Retrieve Single App-------------------------------------------------------- 31 | @RequestMapping(value = "/app/{appid}", method = RequestMethod.GET) 32 | public ResponseEntity getApp(@PathVariable("appid") String appid) { 33 | System.out.println("Fetching appInfo with id " + appid); 34 | App_Info appInfo = this.api.getAppService().readApp(appid); 35 | if (appInfo == null) { 36 | System.out.println("appInfo with id " + appid + " not found"); 37 | return new ResponseEntity(HttpStatus.NOT_FOUND); 38 | } 39 | HttpHeaders headers = new HttpHeaders(); 40 | return new ResponseEntity(appInfo,headers, HttpStatus.OK); 41 | } 42 | 43 | //-------------------Retrieve Top 10 Apps-------------------------------------------------------- 44 | @RequestMapping(value = "/app/", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) 45 | public ResponseEntity> getTopApps() { 46 | int topN = 10; 47 | // AppService appService = this.api.getAppService(); 48 | // System.out.println("appservice is null: " + (appService == null)); 49 | List appInfos = this.api.getAppService().readTopApps(topN); 50 | if (appInfos == null) { 51 | System.out.println(" no appInfos found"); 52 | return new ResponseEntity>(HttpStatus.NOT_FOUND); 53 | } 54 | System.out.println("/****************************************************/"+"\r\n"+ 55 | " Retrievw top 10 Apps "+"\r\n"+ 56 | "/****************************************************/"); 57 | HttpHeaders headers = new HttpHeaders(); 58 | return new ResponseEntity>(appInfos, headers, HttpStatus.OK); 59 | } 60 | 61 | @RequestMapping(value = "/app/getRecom/similarapp/", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) 62 | public ResponseEntity> getRecomApps(@RequestBody List appIDs) { 63 | List appInfos = this.api.getAppService().readRecomApps(appIDs); 64 | if (appInfos == null|| appInfos.size()==0) { 65 | System.out.println("AppController 65: no recommandation appInfos found"); 66 | return new ResponseEntity>(HttpStatus.NOT_FOUND); 67 | } 68 | System.out.println("/****************************************************/"+"\r\n"+ 69 | " Retrievw 5 Recom Apps "+"\r\n"+ 70 | "/****************************************************/"); 71 | System.out.println(appInfos.size()+" "+(appInfos.size()==0?null: appInfos.get(0).getAppid())+" "+appIDs.get(0)+" "+appIDs.size()); 72 | HttpHeaders headers = new HttpHeaders(); 73 | return new ResponseEntity>(appInfos, headers, HttpStatus.OK); 74 | } 75 | 76 | //-------------------Create a App-------------------------------------------------------- 77 | 78 | @RequestMapping(value = "/appInfo/", method = RequestMethod.POST) 79 | public ResponseEntity createApp(@RequestBody App_Info appInfo, UriComponentsBuilder ucBuilder) { 80 | System.out.println("Creating App " + appInfo.getTitle()); 81 | 82 | if (this.api.getAppService().isExist(appInfo)) { 83 | System.out.println("A appInfo with name " + appInfo.getTitle() + " already exist"); 84 | return new ResponseEntity(HttpStatus.CONFLICT); 85 | } 86 | 87 | appInfo = this.api.getAppService().createApp(appInfo); 88 | 89 | HttpHeaders headers = new HttpHeaders(); 90 | headers.setLocation(ucBuilder.path("/appInfo/{appid}").buildAndExpand(appInfo.getAppid()).toUri()); 91 | 92 | ObjectMapper mapper=new ObjectMapper(); 93 | try { 94 | String jsonString=mapper.writeValueAsString(appInfo); 95 | System.out.print(jsonString); 96 | } catch (JsonGenerationException e) { 97 | e.printStackTrace(); 98 | } catch (JsonMappingException e) { 99 | e.printStackTrace(); 100 | } catch (IOException e) { 101 | e.printStackTrace(); 102 | } 103 | 104 | return new ResponseEntity(appInfo, headers, HttpStatus.CREATED); 105 | } 106 | 107 | 108 | //------------------- Update a App -------------------------------------------------------- 109 | 110 | @RequestMapping(value = "/appInfo/{appid}", method = RequestMethod.PUT) 111 | public ResponseEntity updateApp(@PathVariable("appid") String appid, @RequestBody App_Info appInfo) { 112 | System.out.println("Updating appInfo " + appid); 113 | 114 | App_Info currentAppInfo = this.api.getAppService().readApp(appid); 115 | 116 | if (currentAppInfo ==null) { 117 | System.out.println("App with id " + appid + " not found"); 118 | return new ResponseEntity(HttpStatus.NOT_FOUND); 119 | }else if(appid.equals(appInfo.getAppid())) 120 | return new ResponseEntity(HttpStatus.CONFLICT); 121 | 122 | this.api.getAppService().updateApp(appInfo); 123 | return new ResponseEntity(currentAppInfo, HttpStatus.OK); 124 | } 125 | 126 | //------------------- Delete a App -------------------------------------------------------- 127 | 128 | @RequestMapping(value = "/appInfo/{appid}", method = RequestMethod.DELETE) 129 | public ResponseEntity deleteApp(@RequestBody App_Info appInfo) {//@RequestBody App appInfo --> 400 bad request, instead please use @PathVariable("appid") String appid 130 | //App appInfo = new App(); 131 | //appInfo.setAppid(appid); 132 | System.out.println("\r\n"+ appInfo.getAppid()); 133 | String appid = appInfo.getAppid(); 134 | System.out.println("Fetching & Deleting App with appid " + appInfo.getAppid()); 135 | // 136 | appInfo = this.api.getAppService().deleteApp(appInfo); 137 | if (appInfo == null) { 138 | System.out.println("Unable to delete. App with id " + appid + " not found"); 139 | return new ResponseEntity(HttpStatus.NOT_FOUND); 140 | } 141 | 142 | return new ResponseEntity(HttpStatus.NO_CONTENT); 143 | } 144 | 145 | } 146 | -------------------------------------------------------------------------------- /mvnw: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # ---------------------------------------------------------------------------- 3 | # Licensed to the Apache Software Foundation (ASF) under one 4 | # or more contributor license agreements. See the NOTICE file 5 | # distributed with this work for additional information 6 | # regarding copyright ownership. The ASF licenses this file 7 | # to you under the Apache License, Version 2.0 (the 8 | # "License"); you may not use this file except in compliance 9 | # with the License. You may obtain a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, 14 | # software distributed under the License is distributed on an 15 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 | # KIND, either express or implied. See the License for the 17 | # specific language governing permissions and limitations 18 | # under the License. 19 | # ---------------------------------------------------------------------------- 20 | 21 | # ---------------------------------------------------------------------------- 22 | # Maven2 Start Up Batch script 23 | # 24 | # Required ENV vars: 25 | # ------------------ 26 | # JAVA_HOME - location of a JDK home dir 27 | # 28 | # Optional ENV vars 29 | # ----------------- 30 | # M2_HOME - location of maven2's installed home dir 31 | # MAVEN_OPTS - parameters passed to the Java VM when running Maven 32 | # e.g. to debug Maven itself, use 33 | # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 34 | # MAVEN_SKIP_RC - flag to disable loading of mavenrc files 35 | # ---------------------------------------------------------------------------- 36 | 37 | if [ -z "$MAVEN_SKIP_RC" ] ; then 38 | 39 | if [ -f /etc/mavenrc ] ; then 40 | . /etc/mavenrc 41 | fi 42 | 43 | if [ -f "$HOME/.mavenrc" ] ; then 44 | . "$HOME/.mavenrc" 45 | fi 46 | 47 | fi 48 | 49 | # OS specific support. $var _must_ be set to either true or false. 50 | cygwin=false; 51 | darwin=false; 52 | mingw=false 53 | case "`uname`" in 54 | CYGWIN*) cygwin=true ;; 55 | MINGW*) mingw=true;; 56 | Darwin*) darwin=true 57 | # 58 | # Look for the Apple JDKs first to preserve the existing behaviour, and then look 59 | # for the new JDKs provided by Oracle. 60 | # 61 | if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then 62 | # 63 | # Apple JDKs 64 | # 65 | export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home 66 | fi 67 | 68 | if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then 69 | # 70 | # Apple JDKs 71 | # 72 | export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home 73 | fi 74 | 75 | if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then 76 | # 77 | # Oracle JDKs 78 | # 79 | export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home 80 | fi 81 | 82 | if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then 83 | # 84 | # Apple JDKs 85 | # 86 | export JAVA_HOME=`/usr/libexec/java_home` 87 | fi 88 | ;; 89 | esac 90 | 91 | if [ -z "$JAVA_HOME" ] ; then 92 | if [ -r /etc/gentoo-release ] ; then 93 | JAVA_HOME=`java-config --jre-home` 94 | fi 95 | fi 96 | 97 | if [ -z "$M2_HOME" ] ; then 98 | ## resolve links - $0 may be a link to maven's home 99 | PRG="$0" 100 | 101 | # need this for relative symlinks 102 | while [ -h "$PRG" ] ; do 103 | ls=`ls -ld "$PRG"` 104 | link=`expr "$ls" : '.*-> \(.*\)$'` 105 | if expr "$link" : '/.*' > /dev/null; then 106 | PRG="$link" 107 | else 108 | PRG="`dirname "$PRG"`/$link" 109 | fi 110 | done 111 | 112 | saveddir=`pwd` 113 | 114 | M2_HOME=`dirname "$PRG"`/.. 115 | 116 | # make it fully qualified 117 | M2_HOME=`cd "$M2_HOME" && pwd` 118 | 119 | cd "$saveddir" 120 | # echo Using m2 at $M2_HOME 121 | fi 122 | 123 | # For Cygwin, ensure paths are in UNIX format before anything is touched 124 | if $cygwin ; then 125 | [ -n "$M2_HOME" ] && 126 | M2_HOME=`cygpath --unix "$M2_HOME"` 127 | [ -n "$JAVA_HOME" ] && 128 | JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 129 | [ -n "$CLASSPATH" ] && 130 | CLASSPATH=`cygpath --path --unix "$CLASSPATH"` 131 | fi 132 | 133 | # For Migwn, ensure paths are in UNIX format before anything is touched 134 | if $mingw ; then 135 | [ -n "$M2_HOME" ] && 136 | M2_HOME="`(cd "$M2_HOME"; pwd)`" 137 | [ -n "$JAVA_HOME" ] && 138 | JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" 139 | # TODO classpath? 140 | fi 141 | 142 | if [ -z "$JAVA_HOME" ]; then 143 | javaExecutable="`which javac`" 144 | if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then 145 | # readlink(1) is not available as standard on Solaris 10. 146 | readLink=`which readlink` 147 | if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then 148 | if $darwin ; then 149 | javaHome="`dirname \"$javaExecutable\"`" 150 | javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" 151 | else 152 | javaExecutable="`readlink -f \"$javaExecutable\"`" 153 | fi 154 | javaHome="`dirname \"$javaExecutable\"`" 155 | javaHome=`expr "$javaHome" : '\(.*\)/bin'` 156 | JAVA_HOME="$javaHome" 157 | export JAVA_HOME 158 | fi 159 | fi 160 | fi 161 | 162 | if [ -z "$JAVACMD" ] ; then 163 | if [ -n "$JAVA_HOME" ] ; then 164 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 165 | # IBM's JDK on AIX uses strange locations for the executables 166 | JAVACMD="$JAVA_HOME/jre/sh/java" 167 | else 168 | JAVACMD="$JAVA_HOME/bin/java" 169 | fi 170 | else 171 | JAVACMD="`which java`" 172 | fi 173 | fi 174 | 175 | if [ ! -x "$JAVACMD" ] ; then 176 | echo "Error: JAVA_HOME is not defined correctly." >&2 177 | echo " We cannot execute $JAVACMD" >&2 178 | exit 1 179 | fi 180 | 181 | if [ -z "$JAVA_HOME" ] ; then 182 | echo "Warning: JAVA_HOME environment variable is not set." 183 | fi 184 | 185 | CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher 186 | 187 | # For Cygwin, switch paths to Windows format before running java 188 | if $cygwin; then 189 | [ -n "$M2_HOME" ] && 190 | M2_HOME=`cygpath --path --windows "$M2_HOME"` 191 | [ -n "$JAVA_HOME" ] && 192 | JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` 193 | [ -n "$CLASSPATH" ] && 194 | CLASSPATH=`cygpath --path --windows "$CLASSPATH"` 195 | fi 196 | 197 | # traverses directory structure from process work directory to filesystem root 198 | # first directory with .mvn subdirectory is considered project base directory 199 | find_maven_basedir() { 200 | local basedir=$(pwd) 201 | local wdir=$(pwd) 202 | while [ "$wdir" != '/' ] ; do 203 | if [ -d "$wdir"/.mvn ] ; then 204 | basedir=$wdir 205 | break 206 | fi 207 | wdir=$(cd "$wdir/.."; pwd) 208 | done 209 | echo "${basedir}" 210 | } 211 | 212 | # concatenates all lines of a file 213 | concat_lines() { 214 | if [ -f "$1" ]; then 215 | echo "$(tr -s '\n' ' ' < "$1")" 216 | fi 217 | } 218 | 219 | export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} 220 | MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" 221 | 222 | # Provide a "standardized" way to retrieve the CLI args that will 223 | # work with both Windows and non-Windows executions. 224 | MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" 225 | export MAVEN_CMD_LINE_ARGS 226 | 227 | WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain 228 | 229 | exec "$JAVACMD" \ 230 | $MAVEN_OPTS \ 231 | -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ 232 | "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ 233 | ${WRAPPER_LAUNCHER} "$@" 234 | -------------------------------------------------------------------------------- /appstore-java.iml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /issues/heroku-error.md: -------------------------------------------------------------------------------- 1 | app error page at browser: 2 | 3 | ``` 4 | Whitelabel Error Page 5 | This application has no explicit mapping for /error, so you are seeing this as a fallback. 6 | Thu Jul 14 17:08:05 UTC 2016 7 | There was an unexpected error (type=Internal Server Error, status=500). 8 | Could not roll back JPA transaction; nested exception is javax.persistence.PersistenceException: unexpected error when rollbacking 9 | ``` 10 | Heroku app log: 11 | 12 | ``` 13 | heroku logs --tail 14 | 15 | 2016-07-13T17:49:07.874477+00:00 app[web.1]: 2016-07-13 17:49:07.874 INFO 3 --- [io-17105-exec-3] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet' 16 | 2016-07-13T17:49:07.874603+00:00 app[web.1]: 2016-07-13 17:49:07.874 INFO 3 --- [io-17105-exec-3] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started 17 | 2016-07-13T17:49:07.985266+00:00 app[web.1]: 2016-07-13 17:49:07.969 INFO 3 --- [io-17105-exec-3] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 95 ms 18 | 2016-07-13T17:49:09.163273+00:00 app[web.1]: 2016-07-13 17:49:09.162 WARN 3 --- [io-17105-exec-4] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 08S01 19 | 2016-07-13T17:49:09.163433+00:00 app[web.1]: 2016-07-13 17:49:09.163 ERROR 3 --- [io-17105-exec-4] o.h.engine.jdbc.spi.SqlExceptionHelper : Communications link failure 20 | 2016-07-13T17:49:09.163435+00:00 app[web.1]: 21 | 2016-07-13T17:49:09.163438+00:00 app[web.1]: The last packet successfully received from the server was 106,126 milliseconds ago. The last packet sent successfully to the server was 32 milliseconds ago. 22 | 2016-07-13T17:49:09.209944+00:00 app[web.1]: 2016-07-13 17:49:09.208 ERROR 3 --- [io-17105-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataAccessResourceFailureException: could not extract ResultSet; nested exception is org.hibernate.exception.JDBCConnectionException: could not extract ResultSet] with root cause 23 | 2016-07-13T17:49:09.209971+00:00 app[web.1]: 24 | 2016-07-13T17:49:09.209972+00:00 app[web.1]: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. 25 | 2016-07-13T17:49:09.209974+00:00 app[web.1]: at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2957) ~[mysql-connector-java-5.1.38.jar!/:5.1.38] 26 | 2016-07-13T17:49:09.209975+00:00 app[web.1]: at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3375) ~[mysql-connector-java-5.1.38.jar!/:5.1.38] 27 | 2016-07-13T17:49:09.209976+00:00 app[web.1]: at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3365) ~[mysql-connector-java-5.1.38.jar!/:5.1.38] 28 | 2016-07-13T17:49:09.209976+00:00 app[web.1]: at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3805) ~[mysql-connector-java-5.1.38.jar!/:5.1.38] 29 | 2016-07-13T17:49:09.209977+00:00 app[web.1]: at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478) ~[mysql-connector-java-5.1.38.jar!/:5.1.38] 30 | 2016-07-13T17:49:09.209978+00:00 app[web.1]: at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625) ~[mysql-connector-java-5.1.38.jar!/:5.1.38] 31 | 2016-07-13T17:49:09.209979+00:00 app[web.1]: at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2551) ~[mysql-connector-java-5.1.38.jar!/:5.1.38] 32 | 2016-07-13T17:49:09.209980+00:00 app[web.1]: at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861) ~[mysql-connector-java-5.1.38.jar!/:5.1.38] 33 | 2016-07-13T17:49:09.209980+00:00 app[web.1]: at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1962) ~[mysql-connector-java-5.1.38.jar!/:5.1.38] 34 | 2016-07-13T17:49:09.209981+00:00 app[web.1]: at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:82) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 35 | 2016-07-13T17:49:09.209982+00:00 app[web.1]: at org.hibernate.loader.Loader.getResultSet(Loader.java:2066) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 36 | 2016-07-13T17:49:09.209983+00:00 app[web.1]: at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1863) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 37 | 2016-07-13T17:49:09.209984+00:00 app[web.1]: at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1839) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 38 | 2016-07-13T17:49:09.209984+00:00 app[web.1]: at org.hibernate.loader.Loader.doQuery(Loader.java:910) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 39 | 2016-07-13T17:49:09.209985+00:00 app[web.1]: at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:355) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 40 | 2016-07-13T17:49:09.209986+00:00 app[web.1]: at org.hibernate.loader.Loader.doList(Loader.java:2554) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 41 | 2016-07-13T17:49:09.209987+00:00 app[web.1]: at org.hibernate.loader.Loader.doList(Loader.java:2540) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 42 | 2016-07-13T17:49:09.209987+00:00 app[web.1]: at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2370) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 43 | 2016-07-13T17:49:09.209988+00:00 app[web.1]: at org.hibernate.loader.Loader.list(Loader.java:2365) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 44 | 2016-07-13T17:49:09.209989+00:00 app[web.1]: at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:497) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 45 | 2016-07-13T17:49:09.209990+00:00 app[web.1]: at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 46 | 2016-07-13T17:49:09.209991+00:00 app[web.1]: at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:236) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 47 | 2016-07-13T17:49:09.209991+00:00 app[web.1]: at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1300) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 48 | 2016-07-13T17:49:09.209992+00:00 app[web.1]: at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 49 | 2016-07-13T17:49:09.209993+00:00 app[web.1]: at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573) ~[hibernate-entitymanager-4.3.11.Final.jar!/:4.3.11.Final] 50 | 2016-07-13T17:49:09.209993+00:00 app[web.1]: at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:449) ~[hibernate-entitymanager-4.3.11.Final.jar!/:4.3.11.Final] 51 | 2016-07-13T17:49:09.209995+00:00 app[web.1]: at org.hibernate.jpa.criteria.compile.CriteriaQueryTypeQueryAdapter.getResultList(CriteriaQueryTypeQueryAdapter.java:67) ~[hibernate-entitymanager-4.3.11.Final.jar!/:4.3.11.Final] 52 | 2016-07-13T17:49:09.209996+00:00 app[web.1]: at org.springframework.data.jpa.repository.query.JpaQueryExecution$CollectionExecution.doExecute(JpaQueryExecution.java:114) ~[spring-data-jpa-1.9.4.RELEASE.jar!/:na] 53 | 2016-07-13T17:49:09.210003+00:00 app[web.1]: at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:78) ~[spring-data-jpa-1.9.4.RELEASE.jar!/:na] 54 | 2016-07-13T17:49:09.210004+00:00 app[web.1]: at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:100) ~[spring-data-jpa-1.9.4.RELEASE.jar!/:na] 55 | 2016-07-13T17:49:09.210004+00:00 app[web.1]: at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:91) ~[spring-data-jpa-1.9.4.RELEASE.jar!/:na] 56 | 2016-07-13T17:49:09.210006+00:00 app[web.1]: at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:462) ~[spring-data-commons-1.11.4.RELEASE.jar!/:na] 57 | 2016-07-13T17:49:09.210007+00:00 app[web.1]: at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:440) ~[spring-data-commons-1.11.4.RELEASE.jar!/:na] 58 | 2016-07-13T17:49:09.210008+00:00 app[web.1]: at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 59 | 2016-07-13T17:49:09.210009+00:00 app[web.1]: at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61) ~[spring-data-commons-1.11.4.RELEASE.jar!/:na] 60 | 2016-07-13T17:49:09.210010+00:00 app[web.1]: at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 61 | 2016-07-13T17:49:09.210011+00:00 app[web.1]: at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) ~[spring-tx-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 62 | 2016-07-13T17:49:09.210011+00:00 app[web.1]: at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) ~[spring-tx-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 63 | 2016-07-13T17:49:09.210012+00:00 app[web.1]: at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) ~[spring-tx-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 64 | 2016-07-13T17:49:09.210013+00:00 app[web.1]: at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 65 | 2016-07-13T17:49:09.210014+00:00 app[web.1]: at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) ~[spring-tx-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 66 | 2016-07-13T17:49:09.210015+00:00 app[web.1]: at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 67 | 2016-07-13T17:49:09.210016+00:00 app[web.1]: at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:131) ~[spring-data-jpa-1.9.4.RELEASE.jar!/:na] 68 | 2016-07-13T17:49:09.210017+00:00 app[web.1]: at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 69 | 2016-07-13T17:49:09.210018+00:00 app[web.1]: at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) ~[spring-aop-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 70 | 2016-07-13T17:49:09.210019+00:00 app[web.1]: at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 71 | 2016-07-13T17:49:09.210020+00:00 app[web.1]: at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) ~[spring-aop-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 72 | 2016-07-13T17:49:09.210021+00:00 app[web.1]: at com.sun.proxy.$Proxy77.findTop20ByOrderByScoreDesc(Unknown Source) ~[na:na] 73 | 2016-07-13T17:49:09.210021+00:00 app[web.1]: at spring_boot_style.controller.AppController.findTop20Apps(AppController.java:23) ~[appstore-java-0.0.1-SNAPSHOT.jar!/:0.0.1-SNAPSHOT] 74 | 2016-07-13T17:49:09.210023+00:00 app[web.1]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_92-cedar14] 75 | 2016-07-13T17:49:09.210023+00:00 app[web.1]: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_92-cedar14] 76 | 2016-07-13T17:49:09.210024+00:00 app[web.1]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_92-cedar14] 77 | 2016-07-13T17:49:09.210025+00:00 app[web.1]: at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_92-cedar14] 78 | 2016-07-13T17:49:09.210026+00:00 app[web.1]: at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 79 | 2016-07-13T17:49:09.210029+00:00 app[web.1]: at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 80 | 2016-07-13T17:49:09.210030+00:00 app[web.1]: at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) ~[spring-webmvc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 81 | 2016-07-13T17:49:09.210031+00:00 app[web.1]: at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:832) ~[spring-webmvc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 82 | 2016-07-13T17:49:09.210032+00:00 app[web.1]: at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:743) ~[spring-webmvc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 83 | 2016-07-13T17:49:09.210033+00:00 app[web.1]: at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 84 | 2016-07-13T17:49:09.210034+00:00 app[web.1]: at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961) ~[spring-webmvc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 85 | 2016-07-13T17:49:09.210034+00:00 app[web.1]: at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895) ~[spring-webmvc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 86 | 2016-07-13T17:49:09.210035+00:00 app[web.1]: at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967) ~[spring-webmvc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 87 | 2016-07-13T17:49:09.210036+00:00 app[web.1]: at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:858) ~[spring-webmvc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 88 | 2016-07-13T17:49:09.210036+00:00 app[web.1]: at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 89 | 2016-07-13T17:49:09.210037+00:00 app[web.1]: at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843) ~[spring-webmvc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 90 | 2016-07-13T17:49:09.210038+00:00 app[web.1]: at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 91 | 2016-07-13T17:49:09.210039+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 92 | 2016-07-13T17:49:09.210039+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 93 | 2016-07-13T17:49:09.210060+00:00 app[web.1]: at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat-embed-websocket-8.0.33.jar!/:8.0.33] 94 | 2016-07-13T17:49:09.210061+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 95 | 2016-07-13T17:49:09.210062+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 96 | 2016-07-13T17:49:09.210063+00:00 app[web.1]: at org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration$ApplicationContextHeaderFilter.doFilterInternal(EndpointWebMvcAutoConfiguration.java:261) ~[spring-boot-actuator-1.3.5.RELEASE.jar!/:1.3.5.RELEASE] 97 | 2016-07-13T17:49:09.210064+00:00 app[web.1]: at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 98 | 2016-07-13T17:49:09.210065+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 99 | 2016-07-13T17:49:09.210065+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 100 | 2016-07-13T17:49:09.210066+00:00 app[web.1]: at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:115) ~[spring-boot-actuator-1.3.5.RELEASE.jar!/:1.3.5.RELEASE] 101 | 2016-07-13T17:49:09.210067+00:00 app[web.1]: at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 102 | 2016-07-13T17:49:09.210067+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 103 | 2016-07-13T17:49:09.210068+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 104 | 2016-07-13T17:49:09.210069+00:00 app[web.1]: at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 105 | 2016-07-13T17:49:09.210070+00:00 app[web.1]: at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 106 | 2016-07-13T17:49:09.210074+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 107 | 2016-07-13T17:49:09.210074+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 108 | 2016-07-13T17:49:09.210075+00:00 app[web.1]: at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 109 | 2016-07-13T17:49:09.210076+00:00 app[web.1]: at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 110 | 2016-07-13T17:49:09.210076+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 111 | 2016-07-13T17:49:09.210077+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 112 | 2016-07-13T17:49:09.210078+00:00 app[web.1]: at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 113 | 2016-07-13T17:49:09.210078+00:00 app[web.1]: at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 114 | 2016-07-13T17:49:09.210079+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 115 | 2016-07-13T17:49:09.210080+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 116 | 2016-07-13T17:49:09.210081+00:00 app[web.1]: at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 117 | 2016-07-13T17:49:09.210081+00:00 app[web.1]: at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 118 | 2016-07-13T17:49:09.210082+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 119 | 2016-07-13T17:49:09.210083+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 120 | 2016-07-13T17:49:09.210084+00:00 app[web.1]: at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:103) ~[spring-boot-actuator-1.3.5.RELEASE.jar!/:1.3.5.RELEASE] 121 | 2016-07-13T17:49:09.210084+00:00 app[web.1]: at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 122 | 2016-07-13T17:49:09.210085+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 123 | 2016-07-13T17:49:09.210086+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 124 | 2016-07-13T17:49:09.210087+00:00 app[web.1]: at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 125 | 2016-07-13T17:49:09.210087+00:00 app[web.1]: at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 126 | 2016-07-13T17:49:09.210088+00:00 app[web.1]: at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 127 | 2016-07-13T17:49:09.210089+00:00 app[web.1]: at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:676) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 128 | 2016-07-13T17:49:09.210089+00:00 app[web.1]: at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 129 | 2016-07-13T17:49:09.210090+00:00 app[web.1]: at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 130 | 2016-07-13T17:49:09.210091+00:00 app[web.1]: at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 131 | 2016-07-13T17:49:09.210091+00:00 app[web.1]: at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 132 | 2016-07-13T17:49:09.210092+00:00 app[web.1]: at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 133 | 2016-07-13T17:49:09.210093+00:00 app[web.1]: at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 134 | 2016-07-13T17:49:09.210093+00:00 app[web.1]: at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 135 | 2016-07-13T17:49:09.210096+00:00 app[web.1]: at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 136 | 2016-07-13T17:49:09.210096+00:00 app[web.1]: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_92-cedar14] 137 | 2016-07-13T17:49:09.210097+00:00 app[web.1]: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_92-cedar14] 138 | 2016-07-13T17:49:09.210098+00:00 app[web.1]: at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 139 | 2016-07-13T17:49:09.210099+00:00 app[web.1]: at java.lang.Thread.run(Thread.java:745) [na:1.8.0_92-cedar14] 140 | 2016-07-13T17:49:09.210100+00:00 app[web.1]: 141 | 2016-07-13T17:49:08.103121+00:00 heroku[router]: at=info method=GET path="/" host=bittigerx-java-appstore.herokuapp.com request_id=a0e65190-d454-44f9-8b55-6f04cc1390b0 fwd="73.109.63.139" dyno=web.1 connect=2ms service=275ms status=304 bytes=200 142 | 2016-07-13T17:49:09.241362+00:00 heroku[router]: at=info method=GET path="/app/" host=bittigerx-java-appstore.herokuapp.com request_id=ba0923c6-ef0e-476a-86b5-9aa54f55a6f7 fwd="73.109.63.139" dyno=web.1 connect=1ms service=680ms status=500 bytes=547 143 | 2016-07-13T17:49:09.146372+00:00 heroku[router]: at=info method=GET path="/angular.min.js.map" host=bittigerx-java-appstore.herokuapp.com request_id=fdad78f0-6ec1-4fcc-9e84-2f08e11cb8a8 fwd="73.109.63.139" dyno=web.1 connect=1ms service=473ms status=404 bytes=358 144 | 145 | 2016-07-13T17:55:03.414267+00:00 app[web.1]: 2016-07-13 17:55:03.413 ERROR 3 --- [io-17105-exec-9] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.TransactionException: JDBC begin transaction failed: ] with root cause 146 | 2016-07-13T17:55:03.414291+00:00 app[web.1]: 147 | 2016-07-13T17:55:03.414293+00:00 app[web.1]: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. 148 | 2016-07-13T17:55:03.414294+00:00 app[web.1]: at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2957) ~[mysql-connector-java-5.1.38.jar!/:5.1.38] 149 | 2016-07-13T17:55:03.414295+00:00 app[web.1]: at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3375) ~[mysql-connector-java-5.1.38.jar!/:5.1.38] 150 | 2016-07-13T17:55:03.414296+00:00 app[web.1]: at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3365) ~[mysql-connector-java-5.1.38.jar!/:5.1.38] 151 | 2016-07-13T17:55:03.414296+00:00 app[web.1]: at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3805) ~[mysql-connector-java-5.1.38.jar!/:5.1.38] 152 | 2016-07-13T17:55:03.414297+00:00 app[web.1]: at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478) ~[mysql-connector-java-5.1.38.jar!/:5.1.38] 153 | 2016-07-13T17:55:03.414298+00:00 app[web.1]: at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625) ~[mysql-connector-java-5.1.38.jar!/:5.1.38] 154 | 2016-07-13T17:55:03.414298+00:00 app[web.1]: at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2551) ~[mysql-connector-java-5.1.38.jar!/:5.1.38] 155 | 2016-07-13T17:55:03.414299+00:00 app[web.1]: at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861) ~[mysql-connector-java-5.1.38.jar!/:5.1.38] 156 | 2016-07-13T17:55:03.414300+00:00 app[web.1]: at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1962) ~[mysql-connector-java-5.1.38.jar!/:5.1.38] 157 | 2016-07-13T17:55:03.414302+00:00 app[web.1]: at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:82) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 158 | 2016-07-13T17:55:03.414302+00:00 app[web.1]: at org.hibernate.loader.Loader.getResultSet(Loader.java:2066) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 159 | 2016-07-13T17:55:03.414303+00:00 app[web.1]: at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1863) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 160 | 2016-07-13T17:55:03.414304+00:00 app[web.1]: at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1839) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 161 | 2016-07-13T17:55:03.414304+00:00 app[web.1]: at org.hibernate.loader.Loader.doQuery(Loader.java:910) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 162 | 2016-07-13T17:55:03.414305+00:00 app[web.1]: at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:355) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 163 | 2016-07-13T17:55:03.414306+00:00 app[web.1]: at org.hibernate.loader.Loader.doList(Loader.java:2554) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 164 | 2016-07-13T17:55:03.414307+00:00 app[web.1]: at org.hibernate.loader.Loader.doList(Loader.java:2540) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 165 | 2016-07-13T17:55:03.414307+00:00 app[web.1]: at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2370) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 166 | 2016-07-13T17:55:03.414308+00:00 app[web.1]: at org.hibernate.loader.Loader.list(Loader.java:2365) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 167 | 2016-07-13T17:55:03.414309+00:00 app[web.1]: at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:497) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 168 | 2016-07-13T17:55:03.414309+00:00 app[web.1]: at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 169 | 2016-07-13T17:55:03.414310+00:00 app[web.1]: at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:236) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 170 | 2016-07-13T17:55:03.414311+00:00 app[web.1]: at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1300) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 171 | 2016-07-13T17:55:03.414312+00:00 app[web.1]: at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 172 | 2016-07-13T17:55:03.414312+00:00 app[web.1]: at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573) ~[hibernate-entitymanager-4.3.11.Final.jar!/:4.3.11.Final] 173 | 2016-07-13T17:55:03.414313+00:00 app[web.1]: at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:449) ~[hibernate-entitymanager-4.3.11.Final.jar!/:4.3.11.Final] 174 | 2016-07-13T17:55:03.414315+00:00 app[web.1]: at org.hibernate.jpa.criteria.compile.CriteriaQueryTypeQueryAdapter.getResultList(CriteriaQueryTypeQueryAdapter.java:67) ~[hibernate-entitymanager-4.3.11.Final.jar!/:4.3.11.Final] 175 | 2016-07-13T17:55:03.414316+00:00 app[web.1]: at org.springframework.data.jpa.repository.query.JpaQueryExecution$CollectionExecution.doExecute(JpaQueryExecution.java:114) ~[spring-data-jpa-1.9.4.RELEASE.jar!/:na] 176 | 2016-07-13T17:55:03.414323+00:00 app[web.1]: at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:78) ~[spring-data-jpa-1.9.4.RELEASE.jar!/:na] 177 | 2016-07-13T17:55:03.414324+00:00 app[web.1]: at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:100) ~[spring-data-jpa-1.9.4.RELEASE.jar!/:na] 178 | 2016-07-13T17:55:03.414325+00:00 app[web.1]: at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:91) ~[spring-data-jpa-1.9.4.RELEASE.jar!/:na] 179 | 2016-07-13T17:55:03.414326+00:00 app[web.1]: at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:462) ~[spring-data-commons-1.11.4.RELEASE.jar!/:na] 180 | 2016-07-13T17:55:03.414326+00:00 app[web.1]: at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:440) ~[spring-data-commons-1.11.4.RELEASE.jar!/:na] 181 | 2016-07-13T17:55:03.414327+00:00 app[web.1]: at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 182 | 2016-07-13T17:55:03.414328+00:00 app[web.1]: at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61) ~[spring-data-commons-1.11.4.RELEASE.jar!/:na] 183 | 2016-07-13T17:55:03.414335+00:00 app[web.1]: at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 184 | 2016-07-13T17:55:03.414336+00:00 app[web.1]: at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) ~[spring-tx-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 185 | 2016-07-13T17:55:03.414336+00:00 app[web.1]: at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) ~[spring-tx-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 186 | 2016-07-13T17:55:03.414337+00:00 app[web.1]: at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) ~[spring-tx-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 187 | 2016-07-13T17:55:03.414338+00:00 app[web.1]: at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 188 | 2016-07-13T17:55:03.414339+00:00 app[web.1]: at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) ~[spring-tx-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 189 | 2016-07-13T17:55:03.414340+00:00 app[web.1]: at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 190 | 2016-07-13T17:55:03.414341+00:00 app[web.1]: at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:131) ~[spring-data-jpa-1.9.4.RELEASE.jar!/:na] 191 | 2016-07-13T17:55:03.414342+00:00 app[web.1]: at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 192 | 2016-07-13T17:55:03.414343+00:00 app[web.1]: at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) ~[spring-aop-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 193 | 2016-07-13T17:55:03.414344+00:00 app[web.1]: at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 194 | 2016-07-13T17:55:03.414344+00:00 app[web.1]: at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) ~[spring-aop-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 195 | 2016-07-13T17:55:03.414345+00:00 app[web.1]: at com.sun.proxy.$Proxy77.findTop20ByOrderByScoreDesc(Unknown Source) ~[na:na] 196 | 2016-07-13T17:55:03.414346+00:00 app[web.1]: at spring_boot_style.controller.AppController.findTop20Apps(AppController.java:23) ~[appstore-java-0.0.1-SNAPSHOT.jar!/:0.0.1-SNAPSHOT] 197 | 2016-07-13T17:55:03.414347+00:00 app[web.1]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_92-cedar14] 198 | 2016-07-13T17:55:03.414348+00:00 app[web.1]: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_92-cedar14] 199 | 2016-07-13T17:55:03.414349+00:00 app[web.1]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_92-cedar14] 200 | 2016-07-13T17:55:03.414349+00:00 app[web.1]: at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_92-cedar14] 201 | 2016-07-13T17:55:03.414350+00:00 app[web.1]: at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 202 | 2016-07-13T17:55:03.414354+00:00 app[web.1]: at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 203 | 2016-07-13T17:55:03.414355+00:00 app[web.1]: at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) ~[spring-webmvc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 204 | 2016-07-13T17:55:03.414355+00:00 app[web.1]: at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:832) ~[spring-webmvc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 205 | 2016-07-13T17:55:03.414356+00:00 app[web.1]: at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:743) ~[spring-webmvc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 206 | 2016-07-13T17:55:03.414357+00:00 app[web.1]: at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 207 | 2016-07-13T17:55:03.414357+00:00 app[web.1]: at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961) ~[spring-webmvc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 208 | 2016-07-13T17:55:03.414358+00:00 app[web.1]: at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895) ~[spring-webmvc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 209 | 2016-07-13T17:55:03.414359+00:00 app[web.1]: at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967) ~[spring-webmvc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 210 | 2016-07-13T17:55:03.414359+00:00 app[web.1]: at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:858) ~[spring-webmvc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 211 | 2016-07-13T17:55:03.414360+00:00 app[web.1]: at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 212 | 2016-07-13T17:55:03.414361+00:00 app[web.1]: at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843) ~[spring-webmvc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 213 | 2016-07-13T17:55:03.414361+00:00 app[web.1]: at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 214 | 2016-07-13T17:55:03.414362+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 215 | 2016-07-13T17:55:03.414363+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 216 | 2016-07-13T17:55:03.414363+00:00 app[web.1]: at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat-embed-websocket-8.0.33.jar!/:8.0.33] 217 | 2016-07-13T17:55:03.414364+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 218 | 2016-07-13T17:55:03.414364+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 219 | 2016-07-13T17:55:03.414366+00:00 app[web.1]: at org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration$ApplicationContextHeaderFilter.doFilterInternal(EndpointWebMvcAutoConfiguration.java:261) ~[spring-boot-actuator-1.3.5.RELEASE.jar!/:1.3.5.RELEASE] 220 | 2016-07-13T17:55:03.414367+00:00 app[web.1]: at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 221 | 2016-07-13T17:55:03.414368+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 222 | 2016-07-13T17:55:03.414368+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 223 | 2016-07-13T17:55:03.414369+00:00 app[web.1]: at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:115) ~[spring-boot-actuator-1.3.5.RELEASE.jar!/:1.3.5.RELEASE] 224 | 2016-07-13T17:55:03.414369+00:00 app[web.1]: at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 225 | 2016-07-13T17:55:03.414370+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 226 | 2016-07-13T17:55:03.414371+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 227 | 2016-07-13T17:55:03.414372+00:00 app[web.1]: at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 228 | 2016-07-13T17:55:03.414372+00:00 app[web.1]: at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 229 | 2016-07-13T17:55:03.414375+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 230 | 2016-07-13T17:55:03.414376+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 231 | 2016-07-13T17:55:03.414376+00:00 app[web.1]: at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 232 | 2016-07-13T17:55:03.414377+00:00 app[web.1]: at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 233 | 2016-07-13T17:55:03.414377+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 234 | 2016-07-13T17:55:03.414378+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 235 | 2016-07-13T17:55:03.414379+00:00 app[web.1]: at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 236 | 2016-07-13T17:55:03.414379+00:00 app[web.1]: at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 237 | 2016-07-13T17:55:03.414380+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 238 | 2016-07-13T17:55:03.414381+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 239 | 2016-07-13T17:55:03.414382+00:00 app[web.1]: at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 240 | 2016-07-13T17:55:03.414382+00:00 app[web.1]: at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 241 | 2016-07-13T17:55:03.414383+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 242 | 2016-07-13T17:55:03.414383+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 243 | 2016-07-13T17:55:03.414384+00:00 app[web.1]: at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:103) ~[spring-boot-actuator-1.3.5.RELEASE.jar!/:1.3.5.RELEASE] 244 | 2016-07-13T17:55:03.414385+00:00 app[web.1]: at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.6.RELEASE.jar!/:4.2.6.RELEASE] 245 | 2016-07-13T17:55:03.414385+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 246 | 2016-07-13T17:55:03.414396+00:00 app[web.1]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 247 | 2016-07-13T17:55:03.414533+00:00 app[web.1]: at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) ~[tomcat-embed-core-8.0.33.jar!/:8.0.33] 248 | 2016-07-13T17:55:03.414534+00:00 app[web.1]: at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 249 | 2016-07-13T17:55:03.414535+00:00 app[web.1]: at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 250 | 2016-07-13T17:55:03.414535+00:00 app[web.1]: at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:676) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 251 | 2016-07-13T17:55:03.414536+00:00 app[web.1]: at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 252 | 2016-07-13T17:55:03.414537+00:00 app[web.1]: at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 253 | 2016-07-13T17:55:03.414537+00:00 app[web.1]: at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 254 | 2016-07-13T17:55:03.414538+00:00 app[web.1]: at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 255 | 2016-07-13T17:55:03.414539+00:00 app[web.1]: at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 256 | 2016-07-13T17:55:03.414539+00:00 app[web.1]: at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 257 | 2016-07-13T17:55:03.414540+00:00 app[web.1]: at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 258 | 2016-07-13T17:55:03.414544+00:00 app[web.1]: at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 259 | 2016-07-13T17:55:03.414545+00:00 app[web.1]: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_92-cedar14] 260 | 2016-07-13T17:55:03.414546+00:00 app[web.1]: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_92-cedar14] 261 | 2016-07-13T17:55:03.414546+00:00 app[web.1]: at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.0.33.jar!/:8.0.33] 262 | 2016-07-13T17:55:03.414547+00:00 app[web.1]: at java.lang.Thread.run(Thread.java:745) [na:1.8.0_92-cedar14] 263 | 2016-07-13T17:55:03.414548+00:00 app[web.1]: 264 | 2016-07-13T17:55:03.445763+00:00 heroku[router]: at=info method=GET path="/app/C268" host=bittigerx-java-appstore.herokuapp.com request_id=42ea76f2-9286-411b-834d-a51fa3fa92e9 fwd="73.109.63.139" dyno=web.1 connect=0ms service=85ms status=500 bytes=728 265 | ``` --------------------------------------------------------------------------------