Trần Đình Thoại

Initiative Spring 4.2.6 project for test driven development (TDD)

1. Create Dynamic Web project, for example at C:\Startup

2. Convert to Maven project

3. Download and unzip TDD-Spring-Blank-master.zip, for example at C:\Blank (from \TDD-Spring-Blank-master\TDD-Spring-Blank)

4. Add following lines to C:\Startup\pom.xml, then build

<dependencies>

<dependencies>
  
<!-- http://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.2.6.RELEASE</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.springframework/spring-aop -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>4.2.6.RELEASE</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.springframework/spring-aspects -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>4.2.6.RELEASE</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.springframework/spring-beans -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>4.2.6.RELEASE</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.2.6.RELEASE</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.springframework/spring-context-support -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>4.2.6.RELEASE</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.springframework/spring-expression -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
    <version>4.2.6.RELEASE</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.springframework/spring-instrument -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-instrument</artifactId>
    <version>4.2.6.RELEASE</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.springframework/spring-instrument-tomcat -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-instrument-tomcat</artifactId>
    <version>4.2.6.RELEASE</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>4.2.6.RELEASE</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.springframework/spring-jms -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jms</artifactId>
    <version>4.2.6.RELEASE</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.springframework/spring-messaging -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-messaging</artifactId>
    <version>4.2.6.RELEASE</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.springframework/spring-orm -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>4.2.6.RELEASE</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.springframework/spring-oxm -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-oxm</artifactId>
    <version>4.2.6.RELEASE</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>4.2.6.RELEASE</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>4.2.6.RELEASE</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>4.2.6.RELEASE</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.2.6.RELEASE</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.springframework/spring-webmvc-portlet -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc-portlet</artifactId>
    <version>4.2.6.RELEASE</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.springframework/spring-websocket -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-websocket</artifactId>
    <version>4.2.6.RELEASE</version>
</dependency>
  
  
<dependency>
 <groupId>junit</groupId>
 <artifactId>junit</artifactId>
 <version>4.12</version>
</dependency>
  
  
<!-- http://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.0.9.Final</version>
    <exclusions>
     <exclusion>
      <artifactId>dom4j</artifactId>
      <groupId>dom4j</groupId>
     </exclusion>
    </exclusions>
</dependency>
  
<!-- http://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>5.0.9.Final</version>
    <exclusions>
     <exclusion>
      <artifactId>dom4j</artifactId>
      <groupId>dom4j</groupId>
     </exclusion>
    </exclusions>
</dependency>

<!-- http://mvnrepository.com/artifact/org.hibernate/hibernate-c3p0 -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-c3p0</artifactId>
    <version>5.0.9.Final</version>
</dependency>
  
<!-- http://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
</dependency>
  
<!-- http://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
    <version>1.4</version>
</dependency>
  
<!-- http://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.39</version>
</dependency>

<!-- http://mvnrepository.com/artifact/org.dom4j/dom4j -->
<dependency>
    <groupId>org.dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>2.0.0</version>
</dependency>


<!-- http://mvnrepository.com/artifact/org.jboss.arquillian.graphene/graphene-webdriver -->
<dependency>
    <groupId>org.jboss.arquillian.graphene</groupId>
    <artifactId>graphene-webdriver</artifactId>
    <version>2.0.3.Final</version>
    <type>pom</type>
</dependency>
  
<!-- http://mvnrepository.com/artifact/org.jboss.arquillian/arquillian-bom -->
<dependency>
    <groupId>org.jboss.arquillian</groupId>
    <artifactId>arquillian-bom</artifactId>
    <version>1.1.5.Final</version>
    <type>pom</type>
</dependency>
    
<!-- http://mvnrepository.com/artifact/org.jboss.arquillian.core/arquillian-core-api -->
<dependency>
    <groupId>org.jboss.arquillian.core</groupId>
    <artifactId>arquillian-core-api</artifactId>
    <version>1.1.5.Final</version>
</dependency>

<!-- http://mvnrepository.com/artifact/org.jboss.arquillian.config/arquillian-config-api -->
<dependency>
    <groupId>org.jboss.arquillian.config</groupId>
    <artifactId>arquillian-config-api</artifactId>
    <version>1.1.5.Final</version>
</dependency>
    
<dependency>
 <groupId>org.jboss.arquillian.extension</groupId>
 <artifactId>arquillian-drone-bom</artifactId>
 <version>1.3.1.Final</version>
 <type>pom</type>
</dependency>

<dependency>
 <groupId>org.jboss.arquillian.selenium</groupId>
 <artifactId>selenium-bom</artifactId>
 <version>2.43.1</version>
 <type>pom</type>
</dependency>
            
<!-- http://mvnrepository.com/artifact/org.jboss.arquillian.junit/arquillian-junit-container -->
<dependency>
    <groupId>org.jboss.arquillian.junit</groupId>
    <artifactId>arquillian-junit-container</artifactId>
    <version>1.1.5.Final</version>
</dependency>
          
 </dependencies>
  

5. Add following lines to C:\Startup\pom.xml, then build

  <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-dependency-plugin</artifactId>
      <version>2.6</version>
      <executions>
         <execution>
            <id>copy-dependencies</id>
            <phase>build</phase>
            <goals>
               <goal>copy-dependencies</goal>
            </goals>
            <configuration>
               <outputDirectory>${project.build.directory}/lib</outputDirectory>
               <overWriteReleases>true</overWriteReleases>
               <overWriteSnapshots>true</overWriteSnapshots>
               <overWriteIfNewer>true</overWriteIfNewer>
               <excludes>xml-apis-1.0.b2.jar</excludes>
            </configuration>
         </execution>
      </executions>
   </plugin>      


6. Run following commands, for example on Windows 7

md c:\Startup\src\java

md c:\Startup\src\tests

7. Remove current source folder and add 2 new source folder at c:\Startup\src\java and c:\Startup\src\tests

8. Run following commands, for example on Windows 7

copy C:\Blank\src\java\* C:\Startup\src\java

copy C:\Blank\src\tests\* C:\Startup\src\tests

copy C:\Blank\WebContent\WEB-INF\* C:\Startup\WebContent\WEB-INF

9. Map tdd-spring-blank.com domain to IP of your MySQL server

10. Create 2 databases and users

+ Database: tdd-spring-blank
+ Username: tdd-spring-blank
+ Password: 57551fdfad2c1

+ Database: tdd-spring-blank-test
+ Username: tdd-spring-blank-test
+ Password: 57551fdfad2c1

11. With tdd-spring-blank database, run scripts

/src/tests/blank/models/Schema.sql

/src/tests/blank/models/UserSample.sql
Friday, June 3, 2016 at 1:25 AM

Economics of Money and Banking, Part One

1. Lec 1: The Four Prices of Money

1-1 The Big Picture



1-2 Prerequisites?



1-3 What is a Bank, a Shadow Bank, a Central Bank?



Thursday, June 2, 2016 at 3:15 AM

Make SEO friendly URL with Struts 2.5 project


1. For example, download and import TDD-Struts-Blank.zip

2. Add following lines to /pom.xml

<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.0</version>
        <scope>provided</scope>
    </dependency>

2. Add following lines to /src/java/struts.xml

<constant name="struts.action.extension" value=","/>
    <constant name="struts.enable.SlashesInActionNames" value="true"/>

Final struts.xml is as:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
 <constant name="struts.action.extension" value=","/>
 <constant name="struts.enable.SlashesInActionNames" value="true"/>

    <package name="default" namespace="/" extends="struts-default">

        <default-action-ref name="index" />

        <global-results>
            <result name="error">/WEB-INF/jsp/error.jsp</result>
        </global-results>

        <global-exception-mappings>
            <exception-mapping exception="java.lang.Exception" result="error"/>
        </global-exception-mappings>

        <action name="index">
            <result type="redirectAction">
                <param name="actionName">Hello</param>
                <param name="namespace">/</param>
            </result>
        </action>
    </package>

    <include file="blank.xml"/>

    <!-- Add packages here -->

</struts>

3. Modify /src/java/blank.xml as following:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
 
    <package name="blank" namespace="/" extends="struts-default">

        <action name="p/*/*" class="blank.HelloAction">
   <param name="code">{1}</param>
      <param name="slug">{2}</param>
            <result>/WEB-INF/jsp/blank/Hello.jsp</result>
        </action>

    </package>

</struts>

4. Modify /src/java/blank/HelloAction.java as following:

package blank;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport implements org.apache.struts2.interceptor.ServletRequestAware, org.apache.struts2.interceptor.ServletResponseAware {

    public String execute() throws Exception {
        setMessage(getText(MESSAGE));
        return SUCCESS;
    }

    public static final String MESSAGE = "message";

    private String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    private String code;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    private String slug;

    public String getSlug() {
        return slug;
    }

    public void setSlug(String slug) {
        this.slug = slug;
    }

    private HttpServletResponse response;
    
 @Override
 public void setServletResponse(HttpServletResponse response) {
  this.response = response;
 }

 private HttpServletRequest request;
 
 @Override
 public void setServletRequest(HttpServletRequest request) {
  this.request = request;
 }

}
Tuesday, May 31, 2016 at 3:15 AM

Initiative Struts 2.5 project for test driven development (TDD)

1. Create Dynamic Web project, for example at C:\Startup

2. Convert to Maven project

3. Download and unzip TDD-Struts-Blank.zip, for example at C:\Blank

4. Add following lines to C:\Startup\pom.xml, then build

<dependencies>
      <dependency>
         <groupId>org.apache.struts</groupId>
         <artifactId>struts2-core</artifactId>
         <version>2.5</version>
      </dependency>
      <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-core</artifactId>
         <version>2.5</version>
      </dependency>
      <dependency>
         <groupId>org.apache.struts</groupId>
         <artifactId>struts2-junit-plugin</artifactId>
         <version>2.5</version>
      </dependency>      
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.12</version>
      </dependency>
   </dependencies>

5. Add following lines to C:\Startup\pom.xml, then build


   <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-dependency-plugin</artifactId>
      <version>2.6</version>
      <executions>
         <execution>
            <id>copy-dependencies</id>
            <phase>build</phase>
            <goals>
               <goal>copy-dependencies</goal>
            </goals>
            <configuration>
               <outputDirectory>${project.build.directory}/lib</outputDirectory>
               <overWriteReleases>true</overWriteReleases>
               <overWriteSnapshots>true</overWriteSnapshots>
               <overWriteIfNewer>true</overWriteIfNewer>
            </configuration>
         </execution>
      </executions>
   </plugin>


6. Run following commands, for example on Windows 7

md c:\Startup\src\java

md c:\Startup\src\tests

7. Remove current source folder and add 2 new source folder at c:\Startup\src\java and c:\Startup\src\tests

8. Run following commands, for example on Windows 7

copy C:\Blank\src\java\* C:\Startup\src\java

copy C:\Blank\src\tests\* C:\Startup\src\tests

copy C:\Blank\WebContent\WEB-INF\* C:\Startup\WebContent\WEB-INF

Tuesday, May 31, 2016 at 12:28 AM

Struts 2 in Action

Monday, May 30, 2016 at 8:39 PM

"The mbstring extension is missing." error when install phpMyAdmin on Ubuntu server 16.04

sudo apt-get install php-mbstring php7.0-mbstring php-gettext libapache2-mod-php7.0

sudo service apache2 restart
Sunday, May 29, 2016 at 11:37 PM

Skill - Develop java desktop application using test driven development (TDD)

Develop java desktop application using test driven development (TDD) with Swing and SWT [ www.eclipse.org/swt/ ]

Test java swing application in a functional way with FEST-Swing [ code.google.com/archive/p/fest/ ]

Test java swt application in a functional way with SWTBot [ wiki.eclipse.org/SWTBot ]

Set up continuous integration server for java desktop application development with TeamCity, Jenkins





Monday, May 23, 2016 at 8:34 PM