2012年3月6日火曜日

自社用業務システムを簡単に作ってみる AIR+BlazeDS+Spring


サイト制作に限らず、仕事が重なってくると進捗管理が大変になってきます。
これまで、じっくりと作る仕事が多かったため、それほど仕事が重なることとはありませんでしたが、最近はライトウェイトなサイト制作の仕事が増えてきました。これらを上手にこなすように管理プログラムを作ってみます。

プログラム動作環境

クライアント側:AIRによるプログラム
サーバ側:Java + Spring + BlazeDS による開発
という構成にしてみます。

AIRの採用の理由は、(自分にとってですが)HTMLベースのサイトよりも時間をかけずに見栄えのするものができるということです。
また、AIRはWindowsとMacに対応していて、さらにはスマートフォンやiPhoneへの展開も可能であることも魅力です。
そして、インストールして使うのでWebサイトよりも不特定多数の人に晒されないということも挙げられます。

Eclipse環境構築

Eclipseと一部 maven を利用することにします。
具体的には、Spring系のライブラリは maven を利用することにしました。ただ、BlazeDS と Spring-BlazeDSは、ユーザーライブラリで管理します。

mavenは、ライブラリの管理だけで利用し、開発時のテストなどは、Eclipseのサーバ管理を利用します。
そのために、m2eとともに、m2e-wtpをインストールします。


pom.xmlについて

  4.0.0
  jp.co.bzc.biz
  xxxxxxx
  0.0.1-SNAPSHOT
  war
  Business Manager Server
  http://maven.apache.org
  
   UTF-8
  
  
   
    objectdb
    ObjectDB Repository
    http://m2.objectdb.com
   
  
  
   
    com.objectdb
    objectdb
    2.3.7_02
   
   
    javax.servlet
    servlet-api
    2.5
    provided
   
   
    javax.servlet.jsp
    jsp-api
    2.1
    provided
   
   
    org.springframework
    spring-webmvc
    3.0.5.RELEASE
   
   
    org.springframework
    spring-tx
    3.0.5.RELEASE
   
   
    org.springframework
    spring-orm
    3.0.5.RELEASE
   
   
    aopalliance
    aopalliance
    1.0
   
   
    cglib
    cglib
    2.2
   
   
    org.aspectj
    aspectjweaver
    1.6.10
   
    
      junit
      junit
      3.8.1
      test
    
  
  
          
            
                org.apache.maven.plugins
                maven-compiler-plugin
                2.3.2
                
                    1.6
                    1.6
                    UTF-8
                
            
            
                 org.mortbay.jetty
                 maven-jetty-plugin
                 6.1.10
                 
                     10
                     foo
                     9999
                 
                 
                     
                         start-jetty
                         pre-integration-test
                         
                             run
                         
                         
                             0
                             true
                         
                     
                     
                         stop-jetty
                             post-integration-test
                             
                                 stop
                             
                     
                 
             
         
    xxxxxxx
  
persistence.xmlについて
/META-INFにpersistence.xmlを用意します。

  
    xxxxx
    
      
      
      
    
  

web.xmlについて



 xxxx
 
  spring
  org.springframework.web.servlet.DispatcherServlet
  
   contextConfigLocation
   /WEB-INF/spring/application-config.xml
  
  1
 
 
  spring
  /messagebroker/*
 
 
  index.html
  index.htm
  index.jsp
 


Springの設定について
/WEB-INF/spring に application.xmlを置きます。

 

 
  
 


モデルの設計
 public interface IJob{
 public Long getId();
 public void setId(Long id);
 public String getName();
 public void setName(String name);
 public Calendar getStartDate();
 public void setStartDate(Calendar startDate);
 public Calendar getEndDate();
 public void setEndDate(Calendar endDate);
 public Enum getJobStatus();
 public void setJobStatus(Enum jobStatus);
 public Calendar getLastUpdated();
 public void setLastUpdated(Calendar lastUpdated);
}
public interface IWork {
 public Long getId();
 public void setId(Long id);
 public String getName();
 public void setName(String name);
 public List getJobs();
 public void setJobs(List jobs);
}
@Entity
public class Job implements IJob {

 @Id @GeneratedValue
 private Long id;
 private String name;
 private Calendar startDate;
 private Calendar endDate;
 private Enum jobStatus;
 private Calendar lastUpdated;
 
 public Job(String name){
  this.name = name;
  this.lastUpdated = Calendar.getInstance();
 }
 // Getter setterが続く
}
public enum JobStatus {
 未着手, 着手, 完了
}
@Entity
public class Person implements Serializable {
 private static final long serialVersionUID = 1L;
 @Id @GeneratedValue
 private Long id;
 private String name;
 private String email;
}
@Entity
public class SiteMaking implements IWork{
 @Id @GeneratedValue
 private Long id;
 private String name;
 private List jobs;
 
 public SiteMaking(){
  jobs = new ArrayList();
  for(SiteMakingJob job : EnumSet.allOf(SiteMakingJob.class)){
   jobs.add(new Job(job.toString()));
  }
 }
 // Getter setterが続く
}
public enum SiteMakingJob {
 受注,原稿,ドメイン取得,サーバ構築,写真,制作作業,仮仮アップ,仮アップ,公開,GA設定
}


DAO
@Component
public class SiteMakingDAO {
 @PersistenceContext
 private EntityManager em;
 
 @Transactional
 public void persist(SiteMaking siteMaking){
  em.persist(siteMaking);
 }
 
 @Transactional
 public List getSiteMakingNow(){
        TypedQuery query = em.createQuery(
                "SELECT g FROM SiteMaking g ORDER BY g.id", SiteMaking.class);
            List siteMakingList = query.getResultList();
            return siteMakingList;
 }
}

サービス
クライアントから呼び出されるメソッドを定義します。 このクラスもDIされるようにアノテーションで宣言できると思いますが、動かすことを優先ということで、application-context.xml で宣言しています。
public class UserService {
 @Autowired
 private SiteMakingDAO siteMakingDAO;
 
 public String echo(String txt){
  return "server:"+txt;
 }
 
 public void InitSiteMaking(SiteMaking siteMaking){
  siteMakingDAO.persist(siteMaking);
 }
}

0 件のコメント:

コメントを投稿