`
Copperfield
  • 浏览: 260379 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
C407adc3-512e-3a03-a056-ce4607c3a3c0
java并发编程陷阱
浏览量:25145
社区版块
存档分类

tapestry

 
阅读更多

tapestry

http://tapestry.apache.org/tapestry3/doc/api/index.html

http://archive.apache.org/dist/jakarta/tapestry/Tapestry-3.0.2-bin.zip

 

Mock Table utility for CRUD operations

While learning a new technology we may need a database table to store the data.
But creating a database, setting up jdbc connection and writing crud operation may be cumbersome.

So I thought it would be good to have some mock utility to represent a table which can be used just like a database table.

Here is what I came up with.

1 package com.sivalabs.sample.util;
2 import java.io.Serializable;
3
4 public interface Identifiable<K> extends Serializable
5 {
6   public void setId(K id);
7   public K getId();
8 }

 

01 package com.sivalabs.sample.util;
02
03 import java.util.Collection;
04 import java.util.HashMap;
05 import java.util.Map;
06
07 public abstract class Table<PK extends Object, T extends Identifiable<PK>>
08 {
09   protected final Map<PK, T> table = new HashMap<PK, T>();
10   public abstract PK getNextId();
11    
12   protected Table()
13   {
14   }
15    
16   public void create(T obj)
17   {
18    if (table.containsKey(obj.getId()))
19    {
20     throw new RuntimeException( "PrimaryKey [" +obj.getId()+ "] already exists" );
21    }
22    obj.setId(getNextId());
23    table.put(obj.getId(), obj);
24   }
25    
26   public Collection<T> getAll()
27   {
28    return table.values();
29   }
30    
31   public T getById(PK id)
32   {
33    return table.get(id);
34   }
35    
36   public void update(T obj)
37   {
38    if (!table.containsKey(obj.getId()))
39    {
40     throw new RuntimeException( "PrimaryKey [" +obj.getId()+ "] doesn't exists" );
41    }
42    table.put(obj.getId(), obj);
43   }
44    
45   public void delete(T obj)
46   {
47    delete(obj.getId());
48   }
49    
50   public void delete(PK id)
51   {
52    if (!table.containsKey(id))
53    {
54     throw new RuntimeException( "PrimaryKey [" +id+ "] doesn't exists" );
55    }
56    table.remove(id);
57   }
58 }


Let us create a pojo Message.java.

01 package com.sivalabs.sample;
02
03 import java.util.Date;
04 import com.sivalabs.sample.util.Identifiable;
05
06 public class Message implements Identifiable<Integer>
07 {
08   private static final long serialVersionUID = 1L;
09    
10   private Integer id;
11   private String text;
12   private String postedBy;
13   private Date postedDate = new Date();
14   public Message()
15   {
16   }
17    
18   public Message(Integer id, String text, String postedBy, Date postedDate)
19   {
20    this .id = id;
21    this .text = text;
22    this .postedBy = postedBy;
23    this .postedDate = postedDate;
24   }
25
26   public Integer getId()
27   {
28    return id;
29   }
30   public void setId(Integer id)
31   {
32    this .id = id;
33   }
34   //setters, getters for text, postedBy, postedDate
35 }


Now let us create a mock table for storing Messages.
The Message table needs to extend Table and provide what is the type of primary key and what type of objects MessageTable is going to contain using generics <Integer, Message>.

01 package com.sivalabs.sample.util;
02 import java.util.concurrent.atomic.AtomicInteger;
03 import com.sivalabs.sample.Message;
04
05 public class MessageTable extends Table<Integer, Message>
06 {
07   private static final AtomicInteger ATOMIC_INTEGER = new AtomicInteger( 0 );
08   @Override
09   public Integer getNextId()
10   {
11    return ATOMIC_INTEGER.incrementAndGet();
12   }
13 }


Now let us create a MessageService which holds an instance of MessageTable and expose the CRUD operations to clients.

01 package com.sivalabs.sample;
02
03 import java.util.Collection;
04 import java.util.Date;
05 import com.sivalabs.sample.util.MessageTable;
06
07
08 public class MessageService
09 {
10   private static final MessageTable MESSAGE_TABLE = new MessageTable();
11   static
12   {
13    MESSAGE_TABLE.create( new Message( 1 , "Message1 Text" , "Siva" , new Date()));
14    MESSAGE_TABLE.create( new Message( 2 , "Message2 Text" , "Prasad" , new Date()));
15    MESSAGE_TABLE.create( new Message( 3 , "Message3 Text" , "Prasad" , new Date()));
16    MESSAGE_TABLE.create( new Message( 4 , "Message4 Text" , "Siva" , new Date())); 
17   }
18    
19   public Collection<Message> getMessages()
20   {
21    return MESSAGE_TABLE.getAll();
22   }
23
24   public Message getMessage(Integer id)
25   {
26    return MESSAGE_TABLE.getById(id);
27   }
28
29   public void saveMessage(Message message)
30   {
31    MESSAGE_TABLE.create(message);
32   }
33
34   public void updateMessage(Message message)
35   {
36    MESSAGE_TABLE.update(message);
37   }
38
39   public void deleteMessage(Integer id)
40   {
41    MESSAGE_TABLE.delete(id);
42   }
43 }



Now if you want to create a mock table for another pojo User.java it is simple.

01 package com.sivalabs.sample.util;
02 import java.util.concurrent.atomic.AtomicInteger;
03 import com.sivalabs.sample.User;
04
05 public class UserTable extends Table<Integer, User>
06 {
07   private static final AtomicInteger ATOMIC_INTEGER = new AtomicInteger( 0 );
08   @Override
09   public Integer getNextId()
10   {
11    return ATOMIC_INTEGER.incrementAndGet();
12   }
13 }


If the primary key is always an auto incremented integer value we can move getNextId() method to Table.java. Then creating mock table becomes even more simpler.

1 package com.sivalabs.sample.util;
2 import com.sivalabs.sample.User;
3
4 public class UserTable extends Table<Integer, User>
5 {
6     
7 }
分享到:
评论

相关推荐

    tapestry官方中文文档

    Tapestry是一款强大的Java Web应用程序框架,由Apache软件基金会维护,它强调了组件化、模块化和可重用性,使得开发复杂的Web应用变得更加简单。本文将深入介绍Tapestry 4的相关知识点。 1. **组件化编程**: ...

    tapestry教程资料文档合集

    Tapestry5最新中文教程.doc 作者 Renat Zubairov & Igor Drobiazko译者 沙晓兰 发布于 2008年7月2日 下午9时30分 社区 Java 主题 Web框架 ----------------------------------------- Tapestry5.1实例教程.pdf ...

    tapestry5以上的帮助事例,帮助文档与spring衔接文档

    Tapestry是一个基于控件的框架以致于用它开发Web应用类似开发传统的GUI应用。你用Tapestry开发Web应用时你无需关注以操作为中心的(Operation-centric) Servlet API.引用Tapestry网站上的一句话:"Tapestry用对象...

    Tapestry简单入门.rar_java Tapestry_tapestry

    Tapestry是一款强大的Java Web应用程序框架,由Apache软件基金会维护,它提供了一种基于组件的模型来构建动态、数据驱动的Web应用。本教程将帮助初学者了解Tapestry的基本概念,带你逐步入门并掌握其核心组件的使用...

    tapestry-bin-5.1.0.5

    【标题】"tapestry-bin-5.1.0.5" 指的是Apache Tapestry的一个特定版本的二进制发行包。Tapestry是一个开源的Java Web应用程序框架,它提供了一种基于组件的开发方式,用于构建动态、交互式的Web应用。 【描述】...

    tapestry3开发指南,带tapestry3所有jar包

    **Tapestry 3 开发指南** Tapestry 3 是一个开源的Java Web应用程序框架,它在20世纪90年代末至21世纪初非常流行,由Apache软件基金会维护。这个框架提供了组件化、事件驱动和声明式编程模型,帮助开发者构建动态、...

    tapestry学习入门资料

    "tapestry学习入门资料" Tapestry 是一个开源的基于 servlet 的应用程序框架,它使用组件对象模型来创建动态的、交互的 web 应用。 Tapestry 使得 Java 代码与 HTML 完全分离,利用这个框架开发大型应用变得...

    tapestry源码 api等

    Tapestry是一个强大的Java Web应用程序框架,由Apache软件基金会维护。它强调组件化、模块化和松耦合的开发方式,使得开发人员可以构建出高效、可维护的Web应用。以下是对Tapestry源码、API及相关库的详细解读: 1....

    Tapestry4开发指南

    ### Tapestry4开发指南 #### 一、Tapestry4概览 Tapestry4作为一款先进的Web应用框架,由Howard Lewis Ship所创造,旨在提供一种更为高效、灵活的Web应用构建方式。与前代Tapestry3相比,Tapestry4在设计上有了...

    tapestry5中文文档

    Apache Tapestry 5 是一个基于Java的Web应用开发框架,其设计目的是为了简化Web应用程序的构建,提供组件化的页面构建、输入验证、本地化、状态管理和URL映射等功能。Tapestry 5 强调易用性,不仅对终端用户友好,...

    tapestry5.2.6 jar包

    Tapestry 5.2.6 是一个成熟的Java Web开发框架,它提供了一种高效、模块化和可扩展的方式来构建动态、数据驱动的Web应用程序。这个框架的核心理念是将用户界面与业务逻辑分离,通过组件化的思想实现页面的构建,从而...

    Tapestry通用WEB框架

    Tapestry是一个强大的Java Web应用程序框架,由Apache软件基金会维护。它旨在提高开发效率,提供高度模块化和可重用的组件,以及优秀的错误处理和调试能力。在深入探讨Tapestry的知识点之前,让我们先了解一下这个...

    Tapestry 5 電子書

    《Tapestry 5 電子書》是关于Java Web开发框架Tapestry 5的一本详尽指南,由Packt Publishing在2007年出版。这本书旨在帮助开发者深入理解和掌握Tapestry 5的各个方面,从而利用其强大功能构建高效、可维护的Web应用...

    tapestry-4.0.zip

    Tapestry 是一个开源的Java Web应用程序框架,由Apache软件基金会维护。这个“tapestry-4.0.zip”压缩包包含了Tapestry框架的4.0版本,这是一个相对较早的但非常稳定的基础,对于初学者来说是个很好的学习起点。在...

    tapestry4开发指南

    《Tapestry 4开发指南》是一本专为初学者设计的书籍,旨在帮助读者深入理解和熟练运用Tapestry 4这一强大的Java Web框架。Tapestry 4是一款开源的、基于组件的Web应用程序框架,它允许开发者用更加面向对象的方式来...

    深入浅出tapestry

    本书以循序渐进的方式,从Tapestry框架技术的基本概念入手,讲解Tapestry框架在J2EE Web应用程序中的整体架构实现。使读者在学习如何使用Tapestry框架技术的同时,还能够获得在J2EE Web应用程序中应用Tapestry框架的...

    tapestry5.3.5 IOC用户登陆权限

    在IT行业中, Tapestry 是一个基于Java的开源Web应用程序框架,它强调组件化、类型安全和高度可测试性。Tapestry 5.3.5是该框架的一个版本,提供了许多增强的功能和改进。在这个场景中,我们关注的是"IOC用户登陆...

    深入浅出Tapestry高清

    Tapestry的作者是董黎伟,毕业于西南交通大学,他是Sun认证Java程序员,曾在JavaEye论坛设立Tapestry中文文档WIKI,翻译Tapestry官方文档,并撰写了多篇Tapestry使用教程和应用心得,具有丰富的电子政务和电子商务的...

    tapestry开发技术文档

    Jakarta Tapestry 是一款强大的Java Web应用程序框架,其设计目标在于简化Web开发,提高效率,并提供一致性和良好的错误处理机制。对于初学者来说,Tapestry可能会显得有些复杂,但深入学习后,你会发现它与其他框架...

Global site tag (gtag.js) - Google Analytics