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;
|
4
|
public
interface
Identifiable<K>
extends
Serializable
|
6
|
public
void
setId(K id);
|
01
|
package
com.sivalabs.sample.util;
|
03
|
import
java.util.Collection;
|
04
|
import
java.util.HashMap;
|
07
|
public
abstract
class
Table<PK
extends
Object, T
extends
Identifiable<PK>>
|
09
|
protected
final
Map<PK, T> table =
new
HashMap<PK, T>();
|
10
|
public
abstract
PK getNextId();
|
16
|
public
void
create(T obj)
|
18
|
if
(table.containsKey(obj.getId()))
|
20
|
throw
new
RuntimeException(
"PrimaryKey ["
+obj.getId()+
"] already exists"
);
|
22
|
obj.setId(getNextId());
|
23
|
table.put(obj.getId(), obj);
|
26
|
public
Collection<T> getAll()
|
28
|
return
table.values();
|
31
|
public
T getById(PK id)
|
36
|
public
void
update(T obj)
|
38
|
if
(!table.containsKey(obj.getId()))
|
40
|
throw
new
RuntimeException(
"PrimaryKey ["
+obj.getId()+
"] doesn't exists"
);
|
42
|
table.put(obj.getId(), obj);
|
45
|
public
void
delete(T obj)
|
50
|
public
void
delete(PK id)
|
52
|
if
(!table.containsKey(id))
|
54
|
throw
new
RuntimeException(
"PrimaryKey ["
+id+
"] doesn't exists"
);
|
Let us create a pojo Message.java.
01
|
package
com.sivalabs.sample;
|
03
|
import
java.util.Date;
|
04
|
import
com.sivalabs.sample.util.Identifiable;
|
06
|
public
class
Message
implements
Identifiable<Integer>
|
08
|
private
static
final
long
serialVersionUID = 1L;
|
12
|
private
String postedBy;
|
13
|
private
Date postedDate =
new
Date();
|
18
|
public
Message(Integer id, String text, String postedBy, Date postedDate)
|
22
|
this
.postedBy = postedBy;
|
23
|
this
.postedDate = postedDate;
|
26
|
public
Integer getId()
|
30
|
public
void
setId(Integer id)
|
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;
|
05
|
public
class
MessageTable
extends
Table<Integer, Message>
|
07
|
private
static
final
AtomicInteger ATOMIC_INTEGER =
new
AtomicInteger(
0
);
|
09
|
public
Integer getNextId()
|
11
|
return
ATOMIC_INTEGER.incrementAndGet();
|
Now let us create a MessageService which holds an instance of MessageTable and expose the CRUD operations to clients.
01
|
package
com.sivalabs.sample;
|
03
|
import
java.util.Collection;
|
04
|
import
java.util.Date;
|
05
|
import
com.sivalabs.sample.util.MessageTable;
|
08
|
public
class
MessageService
|
10
|
private
static
final
MessageTable MESSAGE_TABLE =
new
MessageTable();
|
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()));
|
19
|
public
Collection<Message> getMessages()
|
21
|
return
MESSAGE_TABLE.getAll();
|
24
|
public
Message getMessage(Integer id)
|
26
|
return
MESSAGE_TABLE.getById(id);
|
29
|
public
void
saveMessage(Message message)
|
31
|
MESSAGE_TABLE.create(message);
|
34
|
public
void
updateMessage(Message message)
|
36
|
MESSAGE_TABLE.update(message);
|
39
|
public
void
deleteMessage(Integer id)
|
41
|
MESSAGE_TABLE.delete(id);
|
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;
|
05
|
public
class
UserTable
extends
Table<Integer, User>
|
07
|
private
static
final
AtomicInteger ATOMIC_INTEGER =
new
AtomicInteger(
0
);
|
09
|
public
Integer getNextId()
|
11
|
return
ATOMIC_INTEGER.incrementAndGet();
|
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;
|
4
|
public
class
UserTable
extends
Table<Integer, User>
|
分享到:
相关推荐
Tapestry是一款强大的Java Web应用程序框架,由Apache软件基金会维护,它强调了组件化、模块化和可重用性,使得开发复杂的Web应用变得更加简单。本文将深入介绍Tapestry 4的相关知识点。 1. **组件化编程**: ...
Tapestry5最新中文教程.doc 作者 Renat Zubairov & Igor Drobiazko译者 沙晓兰 发布于 2008年7月2日 下午9时30分 社区 Java 主题 Web框架 ----------------------------------------- Tapestry5.1实例教程.pdf ...
Tapestry是一个基于控件的框架以致于用它开发Web应用类似开发传统的GUI应用。你用Tapestry开发Web应用时你无需关注以操作为中心的(Operation-centric) Servlet API.引用Tapestry网站上的一句话:"Tapestry用对象...
Tapestry是一款强大的Java Web应用程序框架,由Apache软件基金会维护,它提供了一种基于组件的模型来构建动态、数据驱动的Web应用。本教程将帮助初学者了解Tapestry的基本概念,带你逐步入门并掌握其核心组件的使用...
【标题】"tapestry-bin-5.1.0.5" 指的是Apache Tapestry的一个特定版本的二进制发行包。Tapestry是一个开源的Java Web应用程序框架,它提供了一种基于组件的开发方式,用于构建动态、交互式的Web应用。 【描述】...
**Tapestry 3 开发指南** Tapestry 3 是一个开源的Java Web应用程序框架,它在20世纪90年代末至21世纪初非常流行,由Apache软件基金会维护。这个框架提供了组件化、事件驱动和声明式编程模型,帮助开发者构建动态、...
"tapestry学习入门资料" Tapestry 是一个开源的基于 servlet 的应用程序框架,它使用组件对象模型来创建动态的、交互的 web 应用。 Tapestry 使得 Java 代码与 HTML 完全分离,利用这个框架开发大型应用变得...
Tapestry是一个强大的Java Web应用程序框架,由Apache软件基金会维护。它强调组件化、模块化和松耦合的开发方式,使得开发人员可以构建出高效、可维护的Web应用。以下是对Tapestry源码、API及相关库的详细解读: 1....
### Tapestry4开发指南 #### 一、Tapestry4概览 Tapestry4作为一款先进的Web应用框架,由Howard Lewis Ship所创造,旨在提供一种更为高效、灵活的Web应用构建方式。与前代Tapestry3相比,Tapestry4在设计上有了...
Apache Tapestry 5 是一个基于Java的Web应用开发框架,其设计目的是为了简化Web应用程序的构建,提供组件化的页面构建、输入验证、本地化、状态管理和URL映射等功能。Tapestry 5 强调易用性,不仅对终端用户友好,...
Tapestry 5.2.6 是一个成熟的Java Web开发框架,它提供了一种高效、模块化和可扩展的方式来构建动态、数据驱动的Web应用程序。这个框架的核心理念是将用户界面与业务逻辑分离,通过组件化的思想实现页面的构建,从而...
Tapestry是一个强大的Java Web应用程序框架,由Apache软件基金会维护。它旨在提高开发效率,提供高度模块化和可重用的组件,以及优秀的错误处理和调试能力。在深入探讨Tapestry的知识点之前,让我们先了解一下这个...
《Tapestry 5 電子書》是关于Java Web开发框架Tapestry 5的一本详尽指南,由Packt Publishing在2007年出版。这本书旨在帮助开发者深入理解和掌握Tapestry 5的各个方面,从而利用其强大功能构建高效、可维护的Web应用...
Tapestry 是一个开源的Java Web应用程序框架,由Apache软件基金会维护。这个“tapestry-4.0.zip”压缩包包含了Tapestry框架的4.0版本,这是一个相对较早的但非常稳定的基础,对于初学者来说是个很好的学习起点。在...
《Tapestry 4开发指南》是一本专为初学者设计的书籍,旨在帮助读者深入理解和熟练运用Tapestry 4这一强大的Java Web框架。Tapestry 4是一款开源的、基于组件的Web应用程序框架,它允许开发者用更加面向对象的方式来...
本书以循序渐进的方式,从Tapestry框架技术的基本概念入手,讲解Tapestry框架在J2EE Web应用程序中的整体架构实现。使读者在学习如何使用Tapestry框架技术的同时,还能够获得在J2EE Web应用程序中应用Tapestry框架的...
在IT行业中, Tapestry 是一个基于Java的开源Web应用程序框架,它强调组件化、类型安全和高度可测试性。Tapestry 5.3.5是该框架的一个版本,提供了许多增强的功能和改进。在这个场景中,我们关注的是"IOC用户登陆...
Tapestry的作者是董黎伟,毕业于西南交通大学,他是Sun认证Java程序员,曾在JavaEye论坛设立Tapestry中文文档WIKI,翻译Tapestry官方文档,并撰写了多篇Tapestry使用教程和应用心得,具有丰富的电子政务和电子商务的...
Jakarta Tapestry 是一款强大的Java Web应用程序框架,其设计目标在于简化Web开发,提高效率,并提供一致性和良好的错误处理机制。对于初学者来说,Tapestry可能会显得有些复杂,但深入学习后,你会发现它与其他框架...