- 浏览: 2541836 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
nation:
你好,在部署Mesos+Spark的运行环境时,出现一个现象, ...
Spark(4)Deal with Mesos -
sillycat:
AMAZON Relatedhttps://www.godad ...
AMAZON API Gateway(2)Client Side SSL with NGINX -
sillycat:
sudo usermod -aG docker ec2-use ...
Docker and VirtualBox(1)Set up Shared Disk for Virtual Box -
sillycat:
Every Half an Hour30 * * * * /u ...
Build Home NAS(3)Data Redundancy -
sillycat:
3 List the Cron Job I Have>c ...
Build Home NAS(3)Data Redundancy
VML勾画流程图(四)db4o存放流程实例数据
db4o的官方网站
http://www.db4o.com/
官方API
http://developer.db4o.com/Documentation/Reference/db4o-7.4/java/tutorial/
晕,官方文档也是有点过时的,下载了7.12版本后,里面的doc文件下面才有最新的文档。
第一步
ivy.xml中导入db4o的相关包(其实也是我自己下载了放到nexus里面的):
<!-- db4o -->
<dependency org="com/db4o" name="db4o" rev="7.12" />
第二步
撰写了一个简单的类来处理db4o,Db4oDAOImpl.java如下:
package com.sillycat.easyworkflow.dao.impl;
import com.db4o.Db4oEmbedded;
import com.db4o.ObjectContainer;
import com.db4o.ObjectServer;
import com.db4o.cs.Db4oClientServer;
import com.sillycat.easyworkflow.dao.Db4oDAO;
public class Db4oDAOImpl implements Db4oDAO{
private ObjectContainer db;
private ObjectServer server;
// 是否是本地服务
private boolean enableLocal = true;
// 本地数据库文件名字
private String localFileName = "local.yap";
// 服务端数据库文件名字
private String serverFileName = "server.yap";
// 服务器端口
private int port = 1212;
// 用户名
private String username = "sillycat";
// 密码
private String password = "111111";
// 服务器地址
private String serverhost = "localhost";
public void init() {
if (this.isEnableLocal()) {
db = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), this
.getLocalFileName());
} else {
server = Db4oClientServer.openServer(Db4oClientServer
.newServerConfiguration(), this.getServerFileName(), this
.getPort());
server.grantAccess(this.getUsername(), this.getPassword());
db = Db4oClientServer.openClient(Db4oClientServer
.newClientConfiguration(), this.getServerhost(), this
.getPort(), this.getUsername(), this.getPassword());
}
}
public void destroy() {
if (db != null) {
db.close();
}
if (server != null) {
server.close();
}
}
public ObjectContainer getDB() {
if (db == null) {
init();
}
return db;
}
...snip the getter and setter...
}
第三步
spring的配置文件上配置如下,resource-context.xml:
<bean id="db4oDAO" class="com.sillycat.easyworkflow.dao.impl.Db4oDAOImpl" init-method="init">
<property name="enableLocal" value="${db4o.enableLocal}" />
<property name="localFileName" value="${db4o.local.filename}" />
<property name="serverFileName" value="${db4o.server.filename}" />
<property name="port" value="${db4o.server.port}" />
<property name="username" value="${db4o.server.username}" />
<property name="password" value="${db4o.server.password}" />
<property name="serverhost" value="${db4o.server.serverhost}" />
</bean>
properties配置文件如下,easyworkflow.properties:
################################################
# db4o
################################################
db4o.enableLocal=true
db4o.local.filename=d:/work/easyworkflow/db/local.yap
db4o.server.filename=d:/work/easyworkflow/db/server.yap
db4o.server.port=1212
db4o.server.username=sillycat
db4o.server.password=111111
db4o.server.serverhost=localhost
第四步
一切具备了,那么只剩下单元测试了,Db4oDAOTest.java如下:
package com.sillycat.easyworkflow.dao;
import javax.annotation.Resource;
import junit.framework.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.db4o.ObjectContainer;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:test-context.xml" })
public class Db4oDAOTest {
private Db4oDAO db4oDAO;
@Resource
public void setDb4oDAO(Db4oDAO db4oDAO) {
this.db4oDAO = db4oDAO;
}
@Test
public void getDB() {
ObjectContainer db = db4oDAO.getDB();
Assert.assertNotNull(db);
}
}
第五步
这里测试也就是得到ObjectContainer,如果要具体保存和得到对象的话,简单的示例WorkflowManagerImpl.java如下:
package com.sillycat.easyworkflow.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.db4o.ObjectSet;
import com.sillycat.easyworkflow.dao.Db4oDAO;
import com.sillycat.easyworkflow.model.Workflow;
import com.sillycat.easyworkflow.service.WorkflowManager;
@Service("workflowManager")
public class WorkflowManagerImpl implements WorkflowManager {
private Db4oDAO db4oDAO;
@Autowired
public void setDb4oDAO(Db4oDAO db4oDAO) {
this.db4oDAO = db4oDAO;
}
public Workflow getWorkflowById(String workflowInstanceId) {
Workflow workflow = new Workflow(workflowInstanceId);
ObjectSet<Workflow> os = db4oDAO.getDB().queryByExample(workflow);
if (os != null && os.hasNext()) {
workflow = os.next();
}
return workflow;
}
public void saveWorkflow(Workflow workflow) {
db4oDAO.getDB().store(workflow);
}
public List<WorkflowDefinition> allWorkflowDefinition() {
List<WorkflowDefinition> list = null;
WorkflowDefinition wfDefinition = new WorkflowDefinition();
ObjectSet<WorkflowDefinition> os = db4oDAO.getDB().queryByExample(
wfDefinition);
Db4oUtil<WorkflowDefinition> db4oUtil = new Db4oUtil<WorkflowDefinition>();
list = db4oUtil.retrieveList(os);
return list;
}
public void deleteWorkflowDefinitionByWorkflowName(String workflowName) {
if (StringUtil.isBlank(workflowName)) {
logger
.info("workflowName can't be blank when delete workflowdefinition!");
return;
}
WorkflowDefinition workflowDefinition = getWorkflowDefinitionByWorkflowName(workflowName);
if (workflowDefinition == null) {
logger.info("I can't find workflowDefinition=" + workflowName
+ " in database");
return;
}
db4oDAO.getDB().delete(workflowDefinition);
}
}
差不多我的使用情况就是这样,如果以后要用到高级应用,那么还要再翻翻文档才行。
另外看到还可以在eclipse上安装一个Object Manager Enterprise installation(OME)
1.To install the plugin, you need to have a version of Eclipse >= 3.3 installed.
2.Unzip the file to a folder of your choice.
3.我本机是安装的eclipse 3.5,所以,我就按照如下过程
Help---->Install New Software---->Add----->
Named4b
Locationn: -----> Archive...
4.安装成功后,Window---->Open Perspective ---->OME
使用OME来查看本地的库中的数据还是比较方便写程序的:)
db4o的官方网站
http://www.db4o.com/
官方API
http://developer.db4o.com/Documentation/Reference/db4o-7.4/java/tutorial/
晕,官方文档也是有点过时的,下载了7.12版本后,里面的doc文件下面才有最新的文档。
第一步
ivy.xml中导入db4o的相关包(其实也是我自己下载了放到nexus里面的):
<!-- db4o -->
<dependency org="com/db4o" name="db4o" rev="7.12" />
第二步
撰写了一个简单的类来处理db4o,Db4oDAOImpl.java如下:
package com.sillycat.easyworkflow.dao.impl;
import com.db4o.Db4oEmbedded;
import com.db4o.ObjectContainer;
import com.db4o.ObjectServer;
import com.db4o.cs.Db4oClientServer;
import com.sillycat.easyworkflow.dao.Db4oDAO;
public class Db4oDAOImpl implements Db4oDAO{
private ObjectContainer db;
private ObjectServer server;
// 是否是本地服务
private boolean enableLocal = true;
// 本地数据库文件名字
private String localFileName = "local.yap";
// 服务端数据库文件名字
private String serverFileName = "server.yap";
// 服务器端口
private int port = 1212;
// 用户名
private String username = "sillycat";
// 密码
private String password = "111111";
// 服务器地址
private String serverhost = "localhost";
public void init() {
if (this.isEnableLocal()) {
db = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), this
.getLocalFileName());
} else {
server = Db4oClientServer.openServer(Db4oClientServer
.newServerConfiguration(), this.getServerFileName(), this
.getPort());
server.grantAccess(this.getUsername(), this.getPassword());
db = Db4oClientServer.openClient(Db4oClientServer
.newClientConfiguration(), this.getServerhost(), this
.getPort(), this.getUsername(), this.getPassword());
}
}
public void destroy() {
if (db != null) {
db.close();
}
if (server != null) {
server.close();
}
}
public ObjectContainer getDB() {
if (db == null) {
init();
}
return db;
}
...snip the getter and setter...
}
第三步
spring的配置文件上配置如下,resource-context.xml:
<bean id="db4oDAO" class="com.sillycat.easyworkflow.dao.impl.Db4oDAOImpl" init-method="init">
<property name="enableLocal" value="${db4o.enableLocal}" />
<property name="localFileName" value="${db4o.local.filename}" />
<property name="serverFileName" value="${db4o.server.filename}" />
<property name="port" value="${db4o.server.port}" />
<property name="username" value="${db4o.server.username}" />
<property name="password" value="${db4o.server.password}" />
<property name="serverhost" value="${db4o.server.serverhost}" />
</bean>
properties配置文件如下,easyworkflow.properties:
################################################
# db4o
################################################
db4o.enableLocal=true
db4o.local.filename=d:/work/easyworkflow/db/local.yap
db4o.server.filename=d:/work/easyworkflow/db/server.yap
db4o.server.port=1212
db4o.server.username=sillycat
db4o.server.password=111111
db4o.server.serverhost=localhost
第四步
一切具备了,那么只剩下单元测试了,Db4oDAOTest.java如下:
package com.sillycat.easyworkflow.dao;
import javax.annotation.Resource;
import junit.framework.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.db4o.ObjectContainer;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:test-context.xml" })
public class Db4oDAOTest {
private Db4oDAO db4oDAO;
@Resource
public void setDb4oDAO(Db4oDAO db4oDAO) {
this.db4oDAO = db4oDAO;
}
@Test
public void getDB() {
ObjectContainer db = db4oDAO.getDB();
Assert.assertNotNull(db);
}
}
第五步
这里测试也就是得到ObjectContainer,如果要具体保存和得到对象的话,简单的示例WorkflowManagerImpl.java如下:
package com.sillycat.easyworkflow.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.db4o.ObjectSet;
import com.sillycat.easyworkflow.dao.Db4oDAO;
import com.sillycat.easyworkflow.model.Workflow;
import com.sillycat.easyworkflow.service.WorkflowManager;
@Service("workflowManager")
public class WorkflowManagerImpl implements WorkflowManager {
private Db4oDAO db4oDAO;
@Autowired
public void setDb4oDAO(Db4oDAO db4oDAO) {
this.db4oDAO = db4oDAO;
}
public Workflow getWorkflowById(String workflowInstanceId) {
Workflow workflow = new Workflow(workflowInstanceId);
ObjectSet<Workflow> os = db4oDAO.getDB().queryByExample(workflow);
if (os != null && os.hasNext()) {
workflow = os.next();
}
return workflow;
}
public void saveWorkflow(Workflow workflow) {
db4oDAO.getDB().store(workflow);
}
public List<WorkflowDefinition> allWorkflowDefinition() {
List<WorkflowDefinition> list = null;
WorkflowDefinition wfDefinition = new WorkflowDefinition();
ObjectSet<WorkflowDefinition> os = db4oDAO.getDB().queryByExample(
wfDefinition);
Db4oUtil<WorkflowDefinition> db4oUtil = new Db4oUtil<WorkflowDefinition>();
list = db4oUtil.retrieveList(os);
return list;
}
public void deleteWorkflowDefinitionByWorkflowName(String workflowName) {
if (StringUtil.isBlank(workflowName)) {
logger
.info("workflowName can't be blank when delete workflowdefinition!");
return;
}
WorkflowDefinition workflowDefinition = getWorkflowDefinitionByWorkflowName(workflowName);
if (workflowDefinition == null) {
logger.info("I can't find workflowDefinition=" + workflowName
+ " in database");
return;
}
db4oDAO.getDB().delete(workflowDefinition);
}
}
差不多我的使用情况就是这样,如果以后要用到高级应用,那么还要再翻翻文档才行。
另外看到还可以在eclipse上安装一个Object Manager Enterprise installation(OME)
1.To install the plugin, you need to have a version of Eclipse >= 3.3 installed.
2.Unzip the file to a folder of your choice.
3.我本机是安装的eclipse 3.5,所以,我就按照如下过程
Help---->Install New Software---->Add----->
Named4b
Locationn: -----> Archive...
4.安装成功后,Window---->Open Perspective ---->OME
使用OME来查看本地的库中的数据还是比较方便写程序的:)
发表评论
-
MongoDB 2019(3)Security and Auth
2019-11-16 06:48 236MongoDB 2019(3)Security and Aut ... -
Memory Leak in NodeJS
2018-12-20 06:26 727Memory Leak in NodeJS I have d ... -
Remote Desktop Client
2018-12-07 13:19 1187Remote Desktop Client There is ... -
MetaBase UI Console(2)Docker on MySQL
2018-11-29 06:58 940MetaBase UI Console(2)Docker on ... -
AWS Lambda and Serverless Timeout
2018-09-20 01:20 625AWS Lambda and Serverless Timeo ... -
2018 WebSocket(1)Introduction
2018-03-20 01:22 11042018 WebSocket(1)Introduction ... -
2018 TypeScript Update(3)Introduction Basic Grammar
2018-03-08 03:08 6002018 TypeScript Update(3)Introd ... -
2018 TypeScript Update(2)Introduction Basic Grammar - Classes and Functions
2018-03-06 05:32 5512018 TypeScript Update(2)Introd ... -
2018 TypeScript Update(1)Introduction Basic Grammar - Types and Interface
2018-03-03 01:15 6002018 TypeScript Update(1)Introd ... -
Charts and Console(6)Paging
2018-03-01 00:12 577Charts and Console(6)Paging Th ... -
Vue.JS(3)Google Login
2018-02-14 04:53 1301Vue.JS(3)Google Login I just p ... -
Vue.JS(2)Monitor Water Console - ChartJS and Axios
2018-02-14 03:17 719Vue.JS(2)Monitor Water Console ... -
Vue.JS(1)Introduction and Basic Demo
2018-02-08 06:47 604Vue.JS(1)Introduction and Basic ... -
Charts and Console(5)Validation Form
2017-10-03 05:12 804Charts and Console(5)Validation ... -
Charts and Console(4)Display and Enhancement
2017-09-20 05:39 631Charts and Console(4)Display an ... -
Charts and Console(3)Auth and Login
2017-09-13 03:45 659Charts and Console(3)Auth and L ... -
Charts and Console(2)Login and Proxy
2017-08-31 05:39 877Charts and Console(2)Login and ... -
Charts and Console(1)UI Console and RESTful Client
2017-08-29 11:02 766Charts and Console(1)UI Console ... -
Blog Project(2)Express Backend API - istanbul - mocha - bunyan
2017-06-09 00:05 473Blog Project(2)Express Backend ... -
ReactJS(5)Composition vs Inheritance
2017-06-06 05:55 1109ReactJS(5)Composition vs Inheri ...
相关推荐
`js`文件可能包含了主要的JavaScript逻辑,比如创建流程图的函数,处理用户交互,或者根据数据动态生成流程图。在这样的文件中,你可以看到类似以下的代码片段: ```javascript function drawFlowchart() { var ...
在本案例中,"asp.net+vml流程图代码"指的是利用ASP.NET技术和VML(Vector Markup Language)来创建流程图的一种编程实践。VML是一种标记语言,允许在网页上绘制矢量图形,尤其适合在不支持SVG(Scalable Vector ...
EXT 和 VML 是在网页中实现图形界面的两种技术,特别是在创建流程图等可视化元素时。EXT 是一个基于 JavaScript 的富客户端应用框架,提供了一系列组件和工具,用于构建交互式的 Web 应用程序。而 VML(Vector ...
基于EXT vml的流程图的实现
要理解并使用这个"vml-rose流程图",你需要熟悉VML的基本语法,理解如何通过JavaScript操作DOM,并且可能还需要对UML有一定的了解,以便正确地解析和呈现流程图数据。如果你计划在现代浏览器中使用这样的工具,可能...
在这个"vml开发的流程图"项目中,我们可以看到开发者使用JavaScript与VML结合来创建动态和交互式的流程图。 JavaScript是Web开发中的脚本语言,它负责增加网页的动态功能和交互性。在描述中提到的“javascript+vml...
使用vml封装的流程图控件,颜色大写可自动控制。
VML做流程图UI层的javascript
总结,这个项目是关于使用JavaScript OOP技术和VML来创建一个流程图编辑器,涵盖了图形绘制、用户交互、数据持久化等多个方面的知识。通过深入理解这些技术,开发者可以构建出一个高效且用户友好的流程图编辑工具。
在本实例中,我们将深入探讨如何使用VML来实现画流程图。 流程图是一种可视化表示流程或工作流的工具,它通过各种形状和连接线来展示步骤、决策和流程的流向。VML为绘制这些元素提供了丰富的功能,包括线条、矩形、...
实现了vml+html中显示的,并解决了ie浏览器兼容的问题,代码直接运行便好用
通过查看这些文件,我们可以深入理解HTML和VML如何协同工作来呈现定制的工作流程图。 总之,HTML+VML工作流程结合了HTML的网页结构和VML的矢量图形能力,使得开发者能够创建出具有动态效果和交互性的复杂网页应用。...
在IT行业中,网页交互与数据可视化是至关重要的组成部分,流程图作为其中的一种工具,能够清晰地展示业务逻辑或系统流程。本实例针对两种主流浏览器——Internet Explorer(IE)和Google Chrome,提供了兼容性的流程...
vml入门 vml教程 vml参考 vml实例 从网络上收集的各种vml实例.方便vml入门人员. 也有各种vml图形
Raphael.js是一个强大的JavaScript库,专用于在浏览器中创建SVG(可缩放矢量图形)和VML(Vector Markup Language)图形,使得在网页上绘制流程图变得简单易行。本篇文章将深入探讨如何利用Raphael库来实现动态流程...
JavaScript与VML结合,可以实现动态、交互式的图形绘制,比如在本实例中,我们将探讨如何利用这两种技术在浏览器中绘制动态曲线图。 在浏览器的早期版本,特别是那些不支持SVG(Scalable Vector Graphics)或者...
在技术实现上,这个流程图组件可能利用了Ext的图形和绘图能力,如SVG或者VML,来创建和渲染流程图的各个元素,如节点、连接线等。同时,它还可能使用了数据绑定机制,将流程图的状态与后端数据库中的工作流数据进行...
这意味着可以创建一个JSON格式的数据结构,包含图形类型、位置、尺寸、连接关系等信息,然后通过遍历数据动态生成流程图。 7. **优化和调整**:为了提高性能和用户体验,可以考虑对大量图形进行分批绘制,或者使用`...
vml曲线走势图vml曲线走势图vml曲线走势图vml曲线走势图vml曲线走势图vml曲线走势图vml曲线走势图vml曲线走势图vml曲线走势图vml曲线走势图vml曲线走势图vml曲线走势图vml曲线走势图vml曲线走势图vml曲线走势图vml...