文档库 最新最全的文档下载
当前位置:文档库 › JMS开源框架ActiveMQ入门

JMS开源框架ActiveMQ入门

JMS开源框架ActiveMQ入门
JMS开源框架ActiveMQ入门

JMS开源框架ActiveMQ入门

介绍基本的JMS概念与开源的JMS框架ActiveMQ应用,内容涵盖一下几点:

1.基本的JMS概念

2.JMS的消息模式

3.介绍ActiveMQ

4.一个基于ActiveMQ的JMS例子程序

一:JMS基本概念

1. JMS的目标

为企业级的应用提供一种智能的消息系统,JMS定义了一整套的企业级的消息概念与工具,尽可能最小化的Java语言概念去构建最大化企业消息应用。统一已经存在的企业级消息系统功能。

2. 提供者

JMS提供者是指那些完全完成JMS功能与管理功能的JMS消息厂商,理论上JMS 提供者完成。

JMS消息产品必须是100%的纯Java语言实现,可以运行在跨平台的架构与操作系统上,当前一些JMS厂商包括IBM,Oracle, JBoss社区 (JBoss Community), Apache 社区(ApacheCommunity)。

3. JMS应用程序, 一个完整的JMS应用应该实现以下功能:

?JMS 客户端– Java语言开发的接受与发送消息的程序

?非JMS客户端–基于消息系统的本地API实现而不是JMS

?消息–应用程序用来相互交流信息的载体

?被管理对象–预先配置的JMS对象,JMS管理员创建,被客户端运用。如链接工厂,主题等

?JMS提供者–完成JMS功能与管理功能的消息系统

?七七八八网https://www.wendangku.net/doc/1c11416972.html,

二:JMS的消息模式

1.点对点的消息模式(Point to Point Messaging)

下面的JMS对象在点对点消息模式中是必须的:

a.队列(Queue) –一个提供者命名的队列对象,客户端将会使用这个命名的队列对象

b.队列链接工厂(QueueConnectionFactory) –客户端使用队列链接工厂创建链接队列

ConnectionQueue来取得与JMS点对点消息提供者的链接。

c. 链接队列(ConnectionQueue) –一个活动的链接队列存在在客户端与点对点消息提供者之间,客户用它创建一个或者多个JMS队列会话(QueueSession)

d. 队列会话(QueueSession) –用来创建队列消息的发送者与接受者(QueueSenderandQueueReceiver)

e.消息发送者(QueueSender 或者MessageProducer)–发送消息到已经声明的队列

f.消息接受者(QueueReceiver或者MessageConsumer) –接受已经被发送到指定队列的消息

2.发布订阅模式(publish – subscribe Mode)

a.主题Topic(Destination) –一个提供者命名的主题对象,客户端将会使用这个命名的主题对象

b.主题链接工厂(TopciConnectionFactory) –客户端使用主题链接工厂创建链接主题

ConnectionTopic来取得与JMS消息Pub/Sub提供者的链接。

c.链接主题(ConnectionTopic) –一个活动的链接主题存在发布者与订阅者之间

d.会话(TopicSession) –用来创建主题消息的发布者与订阅者(TopicPublisher and TopicSubscribers)

e.消息发送者MessageProducer) –发送消息到已经声明的主题

f.消息接受者(MessageConsumer) –接受已经被发送到指定主题的消息

三:介绍ActiveMQ

ActiveMQ是apache社区完成的JMS开源消息组件,客户端支持多种语言调用,包括Java,C++, C#,

Perl, Python等。支持Spring配置集成等。更多信息访问这里:https://www.wendangku.net/doc/1c11416972.html,/index.html

七七八八网https://www.wendangku.net/doc/1c11416972.html,

四:基于ActiveMQ的Publish/subscribe模式Demo程序

消息Broker,JMSprovider

1.import https://www.wendangku.net/doc/1c11416972.html,.URI;

2.import https://www.wendangku.net/doc/1c11416972.html,.URISyntaxException;

3.

4.import javax.jms.Connection;

5.import javax.jms.ConnectionFactory;

6.import javax.jms.Destination;

7.import javax.jms.JMSException;

8.import javax.jms.MessageProducer;

9.import javax.jms.Session;

10.import javax.jms.TextMessage;

11.import javax.naming.Context;

12.import javax.naming.InitialContext;

13.import javax.naming.NamingException;

14.

15.import org.apache.activemq.broker.BrokerFactory;

16.import org.apache.activemq.broker.BrokerService;

17.import https://www.wendangku.net/doc/1c11416972.html,mons.logging.Log;

18.import https://www.wendangku.net/doc/1c11416972.html,mons.logging.LogFactory;

19.

20./**

21. * refer to https://www.wendangku.net/doc/1c11416972.html,/jndi-support.html

22. * https://www.wendangku.net/doc/1c11416972.html,/how-do-i-embed-a-broker-inside-a-

connection.html

23. * @author gloomyfish

24. *

25. */

26.public class PureJMSProducer {

27.

28. private static final Log LOG = LogFactory.getLog(PureJMSPro

ducer.class);

29.

30. private PureJMSProducer() {

31. }

32.

33. /**

34. * @param args the destination name to send to and optional

ly, the number of

35. * messages to send

36. */

37. public static void main(String[] args) {

38. Context jndiContext = null;

39. ConnectionFactory connectionFactory = null;

40. Connection connection = null;

41. Session session = null;

42. Destination destination = null;

43. MessageProducer producer = null;

44. BrokerService broker = null;

45. final int numMsgs = 10;

46.

47. /*

48. * Create a JNDI API InitialContext object

49. */

50. try {

51. jndiContext = new InitialContext();

52. } catch (NamingException e) {

53. https://www.wendangku.net/doc/1c11416972.html,("Could not create JNDI API context: " + e.

toString());

54. System.exit(1);

55. }

56.

57. // create external TCP broker

58. try {

59. broker = BrokerFactory.createBroker(new URI("broker

:tcp://localhost:61616"));

60. broker.start();

61. } catch (URISyntaxException e) {

62. https://www.wendangku.net/doc/1c11416972.html,("Could not create broker: " + e.toString()

);

63. } catch (Exception e) {

64. https://www.wendangku.net/doc/1c11416972.html,("Could not create broker: " + e.toString()

);

65. }

66.// try {

67.//

68.// }

69.

70. /*

71. * Look up connection factory and destination.

72. */

73. try {

74. connectionFactory = (ConnectionFactory)jndiContext.

lookup("ConnectionFactory");

75. destination = (Destination)jndiContext.lookup("MyTo

pic");

76. } catch (NamingException e) {

77. https://www.wendangku.net/doc/1c11416972.html,("JNDI API lookup failed: " + e);

78. System.exit(1);

79. }

80.

81. /*

82. * Create connection. Create session from connection; f

alse means

83. * session is not transacted. Create sender and text me

ssage. Send

84. * messages, varying text slightly. Send end-of-message

s message.

85. * Finally, close connection.

86. */

87. try {

88. connection = connectionFactory.createConnection();

89. session = connection.createSession(false, Session.A

UTO_ACKNOWLEDGE);

90. producer = session.createProducer(destination);

91. TextMessage message = session.createTextMessage();

92. Thread.sleep(3000);

93. for (int i = 0; i < numMsgs; i++) {

94. message.setText("This is message " + (i + 1));

95. https://www.wendangku.net/doc/1c11416972.html,("Sending message: " + message.getText(

));

96. producer.send(message);

97. Thread.sleep(3000);

98. }

99.

100. /*

101. * Send a non-text control message indicating end of messages.

102. */

103. producer.send(session.createMessage());

104. } catch (JMSException e) {

105. https://www.wendangku.net/doc/1c11416972.html,("Exception occurred: " + e);

106. } catch (InterruptedException e) {

107. https://www.wendangku.net/doc/1c11416972.html,("Exception occurred: " + e);

108. } finally {

109. if (connection != null) {

110. try {

111. connection.close();

112. } catch (JMSException e) {

113. }

114. }

115. }

116.

117. // stop the TCP broker

118. try {

119. broker.stop();

120. } catch (Exception e) {

121. https://www.wendangku.net/doc/1c11416972.html,("stop the broker failed: " + e); 122. }

123. }

124.}

客户端:七七八八网https://www.wendangku.net/doc/1c11416972.html,

1.import java.io.IOException;

2.

3.import javax.jms.Connection;

4.import javax.jms.JMSException;

5.import javax.jms.Message;

6.import javax.jms.MessageConsumer;

7.import javax.jms.MessageListener;

8.import javax.jms.Session;

9.import javax.jms.TextMessage;

10.import javax.jms.Topic;

11.import javax.naming.InitialContext;

12.

13.import org.apache.activemq.ActiveMQConnectionFactory;

14.

15.

16.public class ActiveMQClient {

17.

18. public static void main(String[] args) throws IOException {

19.

20. // -- https://www.wendangku.net/doc/1c11416972.html,/pdf//816-5904-10/816-5904-10.p

df

21. try {

22. ActiveMQConnectionFactory factory = new ActiveMQConnect

ionFactory("tcp://localhost:61616");

23. // ActiveMQConnectionFactory factory = new ActiveMQConn

ectionFactory("vm://locahost");

24. Connection connection = factory.createConnection();

25. connection.start();

26.

27. // create message topic

28. //Topic topic= new ActiveMQTopic("MyTopic");

29. InitialContext jndiContext=new InitialContext();

30. Topic topic=(Topic)jndiContext.lookup("MyTopic");

31. Session session = connection.createSession(false, Sessi

on.AUTO_ACKNOWLEDGE);

32.

33. // register message consumer

34. MessageConsumer comsumer1 = session.createConsumer(topi

c);

35. comsumer1.setMessageListener(new MessageListener(){

36. public void onMessage(Message m) {

37. try {

38. System.out.println("Consumer get " + ((Text

Message)m).getText());

39. } catch (JMSException e) {

40. e.printStackTrace();

41. }

42. }

43. });

44. Thread.sleep(30000);

45. session.close();

46. connection.stop();

47.

48. } catch(Exception e) {

49. e.printStackTrace();

50. }

51. }

52.}

项目配置,Jar依赖:

依赖的三个Jar分别为:

?activemq-all.jar

?geronimo-jms_1.1_spec-1.1.1.jar

?xbean-spring.jar

七七八八网https://www.wendangku.net/doc/1c11416972.html,

10个超级实用的Web开发框架推荐

10个超级实用的Web开发框架推荐 投递人itwriter发布于2011-09-22 05:26 评论(1)有673人阅读 使用Web 开发框架,可以帮助开发者提高 Web 应用程序、Web 服务和网站等 Web 开发工作的质量和效率。如果没有这些框架,Web 开发工作可能变得复杂和困难,开发者需要去做全部的工作,比如编写业务逻辑、设计用户界面、构建数据库,并确保代码的稳定性和安全性。 目前,互联网中有大量的Web 开发框架,每个框架都可以为你的 Web 应用程序提供功能扩展。你可以让这些框架来分担你的工作,从错误和代码处理到逻辑验证等,你都可以使用一个优秀的框架来处理。 Web 开发框架是节省时间和减轻工作压力的比较好的解决方案,如果你计划开始 Web 开发,那么这些框架无疑是非常好的工具。 1. jQuery jQuery 是一个快速而且简洁的JavaScript 库,它使得以下几方面的工作更加简单:遍历操作HTML 文档、事件处理、动画、快速Web 开发中的Ajax 交互操作等。jQuery 的设计旨在改变你编写JavaScript 的方式。 2. jQuery Mobile

这是一个可跨所有流行移动设备平台的UI(用户界面)系统,基于非常可靠的jQuery 和jQuery UI。它的代码得到了增强,且更加轻量,可以进行灵活、易于主题化的设计。3. Yii Framework Yii 是一个高性能的、开发Web 2.0应用程序最好的PHP 框架。 4. 52framework

该框架支持HTML5 和CSS3,支持目前所有的浏览器。该框架充分利用了HTML5 所有的优势。在网页设计师的世界中,CSS3 是非常酷的东西,使用CSS3 可以节省网页设计和布局的时间。在开发中可以使用CSS3 所有的特性,如文本/框阴影、圆角和动画等。 5. YAML YAML (全称Yet Another Multicolumn Layout,另一个多列布局)是一个用于创建现代、灵活的浮动层的HTML(XHTML)/CSS 框架。 6. Zoop Framework

主流三维引擎对比分析说明书

主流三维引擎对比分析 随着计算机可视化、虚拟现实技术的飞速发展,人们对实时真实感渲染以及场景复杂度提出了更高的要求。传统的直接使用底层图形接口如OpenGL、DirectX开发图形应用的模式越来越暴露出开发复杂性大、周期性长、维护困难的缺陷。为此国外出现了许多优秀的三维渲染引擎,比如Delta3D,OGRE,OSG,Unity3d,VTK等。渲染引擎的作用就是要优化遍历与显示三维模型。本文主要对OGRE与OSG这两个三维图形渲染引擎做个简单的比较,介绍她们在运行效率、场景管理、功能支持、可扩展性等方面的异同。通过了解两者差异后,可以根据不同的项目需求,选择合适的渲染引擎。 ogre OGRE(Object-Oriented Graphics Rendering Engine,面向对象图形渲染引擎) 又叫做OGRE 3D。OGRE就是面向场景的、灵活的图像引擎。OGRE仍然在发展中,如果就功能与商业游戏引擎还有一定差距。在OGRE的论坛网站上您可以得到更多的信息,里面谈论到OGRE的一些格外的插件,如声音,UI ,物理检测,还有网络应用。采用C++开发,以MIT许可证发布,可以在Windows、Linux、Mac上运行。OGRE自己也说明本身不就是游戏引擎。 其主要特征如下: 面向对象,插件扩展架构,具有文档支持。 支持脚本。可以通过脚本管理材质资产并进行多路渲染。 支持物理碰撞检测。 支持顶点灯光、像素灯光、灯光映射。 支持阴影映射、三维阴影。 支持多纹理、凹凸贴图、多重材质贴图、立体投影。 支持顶点、像素、高级着色。 支持场景管理,具有多种数据结构。 支持逆向运动动画、骨架动画、变形动画、混合动画及姿态动画。 支持网格加载、皮肤、渐进网格。 支持环境映射、镜头眩光、公告牌、粒子、运动模糊、天空、水、雾、丝带轨迹、透明对象。支持XML文件转换。 引擎特性全面( ),稳定性好( ),支持全面( ),不容易上手与使用( )。

总结Java部分的框架和开源项目

总结Java部分的框架和开源项目 Spring Framework【Java开源JEE框架】 Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。Spring提供了治理业务对象的一致方法同时鼓舞了注入对接口编程而不是对类编程的良好适应。Spring的架构基础是基于使用JavaBean属性的InversionofControl容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。 Spring提供了唯独的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率同时减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他 O/Rmapping解决方案。Spring还提供了唯独的事务治理抽象,它能够在各种底层事务治理技术,例如JTA或者JDBC事务提供一个一致的编程模型。 Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务治理和其他企业事务--假如你需要--还能实现你自己的aspects。那个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring 还提供了能够和IoC容器集成的强大而灵活的MVCWeb框架。【SpringIDE:Eclipse平台下一个辅助开发插件】 WebWork【Java开源Web开发框架】 WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EEWeb框架。WebWork目前最新版本是2.1,现在的WebWork2.x前身是RickardOberg开发的WebWork,但现在WebWork差不多被拆分成了Xwork1和WebWork2两个项目。Xwork简洁、灵活功能强大,它是一个标准的Command模式实现,同时完全从web层脱离出来。 Xwork提供了专门多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL–theObjectGraphNotationLanguage), IoC(InversionofControl倒置操纵)容器等。WebWork2建立在Xwork之上,处理的响应和要求。WebWork2使用ServletDispatcher将要求的变成Action(业务层Action类),session(会话)application(应用程序)范畴的映射,request要求参数映射。 WebWork2支持多视图表示,视图部分能够使用 JSP,Velocity,FreeMarker,JasperReports,XML等。在WebWork2.2中添加了对AJAX 的支持,这支持是构建在DWR与Dojo这两个框架的基础之上.【EclipseWork:用于WebWork辅助开发的一个Eclipse插件】 Struts【Java开源Web开发框架】

三大主流框架的技术起源

在Java开发中,我们经常使用Struts、Hibernate和Spring三个主流框架,但你是否知道这三个框架最初是为解决怎样的问题而生的? Struts、Hibernate和Spring是我们Java开发中的常用关键,他们分别针对不同的应用场景给出最合适的解决方案。但你是否知道,这些知名框架最初是怎样产生的? 我们知道,传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责前台展示的JSP、负责流程逻辑控制的Servlet以及负责数据封装的Javabean。但是这种结构仍然存在问题:如JSP页面中需要使用<%>符号嵌入很多的Java代码,造成页面结构混乱,Servlet和Javabean负责了大量的跳转和运算工作,耦合紧密,程序复用度低等等。 Struts 为了解决这些问题,出现了Struts框架,它是一个完美的MVC实现,它有一个中央控制类(一个Servlet),针对不同的业务,我们需要一个Action类负责页面跳转和后台逻辑运算,一个或几个JSP页面负责数据的输入和输出显示,还有一个Form类负责传递Action和JSP 中间的数据。JSP中可以使用Struts框架提供的一组标签,就像使用HTML标签一样简单,但是可以完成非常复杂的逻辑。从此JSP页面中不需要出现一行<%%>包围的Java代码了。可是所有的运算逻辑都放在Struts的Action里将使得Action类复用度低和逻辑混乱,所以通常人们会把整个Web应用程序分为三层,Struts负责显示层,它调用业务层完成运算逻辑,业务层再调用持久层完成数据库的读写。 使用JDBC连接来读写数据库,我们最常见的就是打开数据库连接、使用复杂的SQL语句进行读写、关闭连接,获得的数据又需要转换或封装后往外传,这是一个非常烦琐的过程。Hibernate 这时出现了Hibernate框架,它需要你创建一系列的持久化类,每个类的属性都可以简单的看做和一张数据库表的属性一一对应,当然也可以实现关系数据库的各种表件关联的对应。当我们需要相关操作是,不用再关注数据库表。我们不用再去一行行的查询数据库,只需要持久化类就可以完成增删改查的功能。使我们的软件开发真正面向对象,而不是面向混乱的代码。我的感受是,使用Hibernate比JDBC方式减少了80%的编程量。 现在我们有三个层了,可是每层之间的调用是怎样的呢?比如显示层的Struts需要调用一个业务类,就需要new一个业务类出来,然后使用;业务层需要调用持久层的类,也需要new 一个持久层类出来用。通过这种new的方式互相调用就是软件开发中最糟糕设计的体现。简单的说,就是调用者依赖被调用者,它们之间形成了强耦合,如果我想在其他地方复用某个类,则这个类依赖的其他类也需要包含。程序就变得很混乱,每个类互相依赖互相调用,复用度极低。如果一个类做了修改,则依赖它的很多类都会受到牵连。为此,出现Spring 框架。 Spring Spring的作用就是完全解耦类之间的依赖关系,一个类如果要依赖什么,那就是一个接口。至于如何实现这个接口,这都不重要了。只要拿到一个实现了这个接口的类,就可以轻松的通过xml配置文件把实现类注射到调用接口的那个类里。所有类之间的这种依赖关系就完全通过配置文件的方式替代了。所以Spring框架最核心的就是所谓的依赖注射和控制反转。现在的结构是,Struts负责显示层,Hibernate负责持久层,Spring负责中间的业务层,这个结构是目前国内最流行的Java Web应用程序架构了。另外,由于Spring使用的依赖注射以及AOP(面向方面编程),所以它的这种内部模式非常优秀,以至于Spring自己也实现了一个使用依赖注射的MVC框架,叫做Spring MVC,同时为了很好的处理事物,Spring 集成了Hibernate,使事物管理从Hibernate的持久层提升到了业务层,使用更加方便和强大。

GWT的几个开源框架

02 Aug 11 GWT的几个开源框架[FROM lupaworld] 在RIA(rich internet application)社区中,越来越多的人选择使用GWT (Googel Web Toolkit)。由此催生了很多框架和类库,这些框架和类库或者作为GWT的补充、或者以GWT为基础提供更强大的功能: GWTx GWTx关注于加强Google提到的JRE模拟(JRE Emulation)。GWT提供使用Javascript实现的一些核心Java类库,这样一来,使用Java为GWT所做的编程,GWT本身可以将它们恰当的“编译”或者翻译成Javascript。 GWT-DND GWT -DND是对GWT提供drag-and-drop支持的一个扩展库。GWT-DTD在社区中被广泛使用,另外有一些项目(例如下面将要提到的GWT Diagrams)直接使用该扩展库,或提供对它的集成。该扩展库已经非常成熟,去年,在它作为对核心GWT的系列补丁包提供下载时,很多用户就已经证实了它的价值。 Hibernate4gwt Hibernate4gwt是特别为将GWT的Java后端与成熟的ORM Java工具Hibernate 相集成而提供的开发框架。在GWT应用软件中使用类似Hibernate这样的类库时,GWT既表现出了无与伦比的复杂性,也展现了前所未有的机会。通过利用GWT 中远程服务的API以及Hibernate库的特性,Hibernate4gwt能够提供一大把优缺点各不相同的不同集成选项: 无状态型(默认选项):你的服务器保持无状态,不保存任何额外信息。你的域类不得不从LazyGwtPojo继承从而储存延迟属性(lazy attributes)。 动态代理:代理是用来处理服务器端和客户端的延迟属性信息的。你只需要实现Serializable接口,并迫使GWT延缓捆绑于客户端(详细信息请查看相关文档)。支持Java 5:鉴于GWT并不支持Java5的bean,hibernate4gwt允许你将你的Domain类动态克隆成GWT兼容的DTO。这些克隆类必须使用和域类本身一样的名字(但两者在不同的包中),并且继承LazyGwtPojo。另一方面,hibernate4gwt 会为你管理延迟属性,且不要求任何克隆映射文件。 状态型:延迟信息并不储存于POJO,而是储存在HTTP会话中,因而,你的域类不必再从LazyGwtPojo继承,但你的Web服务器变成有状态的了。 另外,Hibernate4gwt也对结合使用Spring框架(该框架对于要使用下文将提到的GWT-SL的开发者同样很有价值)提供支持。 MyGWT

2019年最流行的10个JavaScript框架

根据Stack Overflow 2018开发者调查报告,JavaScript是使用最广泛的编程语言之一。感谢它不断发展的框架生态系统,为复杂和具有挑战性的问题找到最佳解决方案。 多年来,业界已经发布了大量JavaScript 框架,怎样进行选择可能是一个挑战。如果你感到困惑,不知道应该选哪个,那么这篇文章你应该读一读。 01 React React 是今年最受喜爱的JavaScript 的工程!每个人似乎都在谈论ReactJS。每一个会议上,去年出席的会议,至少有两个人是在讨论React。React 是开

源的,主要是由facebook 借助其它公司的主要技术开发出来的。React 描述自己是一个JavaScript 库,用于构建用户界面。 React 在MVC 中,主要是View。它完全专注于MVC 那部分,无视应用程序的其它部分。它提供了一个成分层,可以更容易使用UI元素,并将它们组合在一起。它抽象了DOM,使其擅长于优化渲染,并允许使用node.js 来表述React ; 它实现了一个单向灵活的数据流,使得它更容易理解和使用其它框架。 02 Vue Vue是Evan You在Google工作后使用AngularJS为多个项目中创建的。它在2018年首次发布,Evan分享了他创建Vue的动机,他说:“我想,如果我能提取出我真正喜欢Angular的那部分,然后构建一些真正轻量级的东西会怎么样呢?”Vue继续在JavaScript开发人员中得到广泛采用,这种趋势应该还会继续下去。根据npm调查,一些开发人员更喜欢Vue而不是React,因为他们觉得“在保持可扩展性的同时更容易上手”。

如何学习开源框架

2.6 如何学习开源框架 正确的学习方法不仅能够事半功倍,也能够使我们更加接近真理。在大家了解了框架的本质和Web开发模式之后,我们来讨论一下学习开源框架和基本方法。 在这里,本书为大家小结了一些正确的学习方法和最佳实践,这些不仅是笔者多年开发中的心得体会,也汲取了网络上的大家之言,希望对初学者或者正在为学习开源框架犯愁的朋友带来一些启示。这些学习方法,不仅适用于Struts2,同样适用于许多其他的开源框架。 downpour 写道 最佳实践阅读、仔细阅读、反复阅读每个开源框架自带的reference。 这是学习一个框架最为重要,也是最最开始需要做的事情。不幸的是,事实上,绝大多数程序员对此并不在意,并且总是以种种理由作为借口不乐意仔细阅读Reference。 程序员的常见借口之一:英语水平跟不上,英文文档阅读起来太吃力。针对这样的借口,我们需要指出,阅读英文文档是每个程序员必须具备的基本素质之一,这就和调试程序需要耐心一样,对一个程序员来说非常重要。当然,阅读英文文档这一基本素质是一点一滴积累培养起来的,对于那些阅读起来实在觉得吃力的朋友,笔者的建议是结合中文的翻译版本一起看。国内有许多开源组织,例如满江红的开源支持者们已经为大家精心做了许多很有价值的翻译,例如Spring、Hibernate等都有对应的中文翻译文档。但是大家必须注意,看中文文档,必须和英文文档对照,因为没有人可以确保翻译能够百分之百的正确,语义的不匹配会给你带来极大的误导,通过对照,才能够将误解降低到最低。 程序员的常见借口之二:Reference太长,抓不住重点。在这里,笔者给出的建议是:耐心,耐心,还是耐心!从Reference的质量而言,其实大多数的开源框架的Reference都是非常优秀的,基本包含了框架的方方面面。尤其是Struts2,由于历史原因,Struts2的Reference基本上都是一个一个的专题Wiki文章拼起来的文档,每篇文章都有一个固定的

(工作分析)国内外主流工作流引擎及规则引擎分析

国内外主流工作流引擎及规则引擎分析2013年2月创新研发部

目录 国内外主流工作流引擎及规则引擎分析 (1) 一.背景 (4) 二.原则 (4) 三.工作流功能分析点 (6) 4.1.标准类 (6) 3.1.1BPMN2.0标准支持 (6) 4.2.开发类 (7) 3.1.1业务模型建模工具 (7) 3.1.2工作流建模工具 (7) 3.1.3人工页面生成工具 (8) 3.1.4仿真工具 (9) 4.3.功能类 (9) 4.1.1流程引擎 (9) 4.1.2规则引擎 (10) 4.1.3组织模型与日期 (10) 4.1.4对外API的提供 (11) 4.1.5后端集成/SOA (11) 4.1.6监控功能 (12) 四.中心已有系统工作流功能点分析 (13) 4.1.备付金系统工作流分析 (13) 4.1.1联社备付金调出流程 (13)

4.1.2联社备付金调入流程 (16) 4.1.3资金划入孝感农信通备付金账户业务流程 (18) 4.1.4备付金运用账户开立流程 (20) 4.1.5备付金沉淀资金运用流程 (23) 4.1.6备付金沉淀资金支取流程 (26) 4.2.多介质项目工作流分析 (28) 4.1.1开卡审批流程 (28) 4.3.新一代农信银资金清算系统工作流分析 (29) 4.4.电子商票系统工作流分析 (29) 4.5.OA系统工作流分析 (32) 五.工作流产品分析 (32) 六.分析结论 (44) 4.4.对比 (44) 4.5.建议 (45)

一.背景 目前中心建成的“一大核心系统,七大共享平台”以及OA系统,对工作流应用程度高,但各系统实现工作流程管理没有建立在统一的工作流平台上,导致流程割裂、重复开发、不易于管理等问题。 备付金管控项目涉及多个岗位之间工作的审核步骤,同时还要与多个系统进行交互,因此,为了提高管理效率,降低业务流转时间,同时还要结合农信银中心的总体IT战略规划,备付金管控项目技术组决定选择一款先进的工作流引擎和一款规则引擎,作为备付金管控项目的核心技术架构。 二.原则 备付金管控项目组通过梳理各信息系统流程现状和未来需求,形成农信银中心工作流平台的发展规划,从而更全面的满足农信银各项关键业务、更好的支撑现有和未来的信息系统建设。项目组充分研究国内外领先的工作流产品和案例,同厂商交流。从用户界面生成、流程建模、流程引擎、规则引擎、组织模型、模拟仿真、后端集成/SOA、变更及版本管理、移动设备解决方案、监控分析能力等多方面考察工作流产品,进行工作流产品选型。 目前国内外的工作流引擎层出不穷,行业标准多种多样,通过对比不同工作流公司产品,本次工作流技术选型决定分析商业工作流引擎4款,开源工作流引擎2款。其中国际知名厂商的商业工作流引擎2款,本土厂商的商业工作流引擎2款。由于本次技术选型是以工作流引擎为主,选型工作将不再单独分析规则

几个Web前端开发框架的比较

原文在我的博客中,欢迎大家来访交流https://www.wendangku.net/doc/1c11416972.html,/blog/697596 强调一下,这篇日志主要还是针对想学前端开发的新朋友写的,不是说我有什么独特见解,而是比较客观的状态,就各种框架的异同和应用场合,需要注意的地方做简单描述,不做具体深入分析,有的地方比较抽象,对于抽象之处大家可以到网上或各大高手博客中深入学习,当然也可以与我继续探讨。 一直以来对Web前端开发兴趣颇深,用过一些框架产品。在JavaEye上看到一些刚接触前端开发朋友的疑问,犹豫这些产品的前景利弊,不知从何入手。想把自己的一点经验分享给大家,如有不到位之处请一起来纠正。 jQuery 1. 绝对的万金油,核心js只有50K,占用带宽小,门户网站、管理系统,用在哪都可以。 2. jQuery是对js底层dom操作封装最薄的一个框架,没有大量的专有对象,多为提供函数进行dom操作。准确的说,它不是偏重于富客户端的框架,而是侧重于对js dom编程。下面几种才是完整的富客户端的框架。 3. 我认为它最大的三个亮点,一是支持CSS3的大量选择符,想定位或选择一个html元素简直轻而易举。二是灵活便捷的Ajax请求和回调操作。三是事件绑定功能,内部封装了很多事件,想统一为一个页面上的一些元素添加事件很方便,这也提高了复用性和可维护性,避免了页面中出现大量的html属性。合理的编码可以使html与js, css分离开,便于维护。 4. 此外它也封装了很多常用的操作,例如节点的添加删除、常用的动画效果、逻辑判断比较等等。避免了直接使用dom api进行繁琐的操作。 5. 本身提供了可扩展的函数,可以自己编写插件与核心jQuery对象进行集成使用。这也是常用的手段,只要你理解js面向对象编程,熟悉jQuery API,就能写出很多定制的插件,复用在各种地方。 6. 至于jQueryUI,与其他框架不一样的地方在于,它很少用js去生成html,而是把现有的html通过jQueryUI的API加工成想要的效果,关于这点是好是坏,我觉得就是见仁见智的问题了,没有必要争论什么。 7. 新生的jQuery EasyUI不错。 8. 如果今后的更新都保持现在这种模式,我认为它的前景很乐观,什么时候javascript完蛋了才轮到它玩完。 ExtJS 1. 一整套带有UI的js库,封装得很多,很厚,核心js就600多K,这么大的东西门户网站当然就别想了,里面的效果当然也不会运用到门户网站,所以它是专门为管理系统而生的。因为局域网不会有带宽问题。 2. 它与jQuery不同,基本上是纯用js来生成html的,页面里只需引入各个ExtJS库和你自己写的js,不会出现很多html内容,body里基本没什么。所以优化就显得重要了,不然会

java开源框架题目

一、选择题(每题2分,共24 分) 1.不属于Action 接口中定义的字符串常量的是__B _________ 。 A .SUCCESS B .FAILURE C.ERROR D .INPUT 2.在控制器类中一般需要添加相应属性的 ____ A _______ 和____ C ______ A .setter 方法 B .as 方法 C .getter 方法D.is 方法 3.控制器需要在___ B__ ____ 配置文件中进行配置。 A .web.xml B .struts.xml C.struts2.xml D.webwork.xml 4.资源文件的后缀名为_ __D ________ 。 A .txt B.doc C.property D .Properties 5. 事务隔离级别是由谁实现的?(C) A. Java 应用程序 B. Hibernate C. 数据库系统 D. JDBC 驱动程序 6.struts 中数据验证失败时,通过( B )标签显示错误信息。 A. B. C. D. 7. 有这样一个表单元素,想要找到这个hidden 元素,下面哪个是正确的?(B) A. visible C. visible() 8 下面哪一个是用来追加到指定元素的末尾的? A. insertAfter() C. appendTo() 9. 不属于Struts2 的动作类的常量返回值的是 ( A .success B .input C .never D .login B. hidden D. hidden() (C) B. append() D. after() C)

开源ERP系统比较

开源ERP系统比较 https://www.wendangku.net/doc/1c11416972.html,/zhanghaooy/blog/item/9a144f017114dadd277fb5d0.html 现在有许多企业将ERP项目,在企业中没有实施好,都归咎于软件产品不好。其实,这只是你们的借口。若想要将ERP软件真正与企业融合一体,首先得考虑企业的自身情况,再去选择适合的ERP软件。 如果你的企业是高速发展的中小企业,希望用IT给管理带来提升,对国内主流ERP产品几万元到几十万元的投入觉得风险过大,还恐惧购买成品ERP。你还有另外一种选择,选择免费且开放的开源ERP软件进行二次开发,根据自己的要求设定适合你企业的ERP。下载开源ERP的产品十分方便,在各大知名的开源网站上都可免费下载它们。注意哦!开源所有的产品都是对外开放的,且源代码都可任意查看,若您在实施ERP时遇到问题,可在开源社区上进行咨询讨论,当然,您也可以请软件开发商进行二次开发。 开源ERP和其它ERP软件比较,如图所示 下面介绍有哪些开源ERP? Compiere Compiere ERP&CRM为全球范围内的中小型企业提供综合型解决方案,覆盖从客户管理、供应链到财务管理的全部领域,支持多组织、多币种、多会计模式、多成本计算、多语种、多税制等国际化特性。

Compiere ERP & CRM 通过申购 - 采购 - 发票 - 付款、报价 - 订单 - 发票 - 收款、产品与定价、资产管理、客户关系、供应商关系、员工关系、经营业绩分析等功能,将企业内部运营与外部客户相关的业务进行规范和优化,将企业由“ 人治” 转变为“ 法治” 的境界。 更好地管理您的业务 * 优化您的库存 * 输入销售订单 * 从 Web 接收订单 * 创建发票并记录发货单 * 收集收货单并与银行对账单核对 * 自动生成或手工输入采购订单 * 记录供应商收货和发票 * 供应商付款 * 输入手工日记帐 * 打印报表和对账单 Compiere ERP 的特色 报价至收款:为潜在客户或客户创建报价单;订单管理;发票;现金收据。它与供应链管理、客户管理高度集成。 申购至付款:创建申购单、采购订单、发票收据;付款处理。它与供应链管理高度集成。 客户关系管理:是所有客户与潜在客户相关活动的逻辑视图。它构成了全部业务流程的一分。 伙伴关系管理:将不同的实体相互链接起来,允许它们管理线索分发、服务请求、渠道以及营销费用。它允许您提供集中式服务。 供应链管理:包括有物料管理的活动,包括库存收货、发货,以及从实体、它的组织到供货商、客户之间的移库和盘存。 绩效分析:覆盖了应用程序的成本计算与会计维度。 网上商店 / 自助服务:提供了您运行 Web 业务所需的一切。信息通过标准的应用程序共享,因此无需同步或特别的集成工作。 Compiere 网上商店组件可被定制为与您的网站相一致的外观和感受。 管理仪表板:提供了一目了然的关键绩效指标( KPI )视图,它能够互动、实时地展现公司的总体经营业绩。仪表板使得高层管理者能够更有效地实现关键性业务战略,追踪公司与销售指标,达成公司的业绩目标。

总结Java部分的框架和开源项目

文章分类: 下面我将为大家总结一下Java部分的框架和开源项目,让您从总的方面对Java部分框架有一定的了解。 Spring Framework【Java开源JEE框架】 Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的InversionofControl 容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。 Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他O/Rmapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。 Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IoC容器集成的强大而灵活的MVCWeb框架。【SpringIDE:Eclipse 平台下一个辅助开发插件】 WebWork【Java开源Web开发框架】 WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EEWeb框架。WebWork目前最新版本是,现在的前身是RickardOberg开发的WebWork,但现在WebWork已经被拆分成了Xwork1和WebWork2两个项目。Xwork简洁、灵活功能强大,它是一个标准的Command模式实现,并且完全从web层脱离出来。 Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL–theObjectGraphNotationLanguage),IoC(InversionofControl倒置控制)容器等。WebWork2建立在Xwork之上,处理HTTP的响应和请求。WebWork2使用ServletDispatcher将HTTP请求的变成Action(业务层Action类),session(会话)application(应用程序)范围的映射,request请求参数映射。 WebWork2支持多视图表示,视图部分可以使用JSP,Velocity,FreeMarker,JasperReports,XML等。在中添加了对AJAX的支持,这支持是构建在DWR与Dojo这两个框架的基础之上.【EclipseWork:用于WebWork 辅助开发的一个Eclipse插件】 Struts【Java开源Web开发框架】 Struts是一个基于SunJ2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义标签?和信息资源(messageresources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。【StrutsIDE:用于Struts辅助开发的一个Eclipse插件】Hibernate【Java开源持久层框架?】 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。Eclipse平台下的Hibernate辅助开发工具:【HibernateSynchronizer】【MiddlegenIDE】 Quartz【Java开源调度框架】 Quartz是OpenSymphony开源组织在Jobscheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs 可以做成标准的Java组件或EJBs。Quartz的最新版本为Quartz1.5.0。 Velocity【Java开源模板引擎】 Velocity是一个基于java的模板引擎(templateengine)。它允许任何人仅仅简单的使用模板语言(templatelanguage)来引用由java代码定义的对象。当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一

开源工作流框架对比.

开源工作流框架对比 工作流是基于业务流程的一种模型,它可以把业务流程组织成一个具有逻辑和规则的模型,从而指导业务工作的进行。开源工作流把工作流进行了合理化、科学化的设计与组织,使其更能够满足现在的业务需求。开源工作流可以帮助实现业务目标,通过计算机进行文档的传递,其使用非常广泛。目前国内主要有几种开源工作流框架,下面我们简单地对比一下,帮助大家更深刻地了解开源工作流: 1.JBPM:要想了解JBPM,首先要了解JBPM的简单定义,JBPM是指业务流程管理,它包含了整个业务流程管理过程中的工作流与服务协作,是一种灵活的、开源的管理模式。JBPM可以把一些复杂的业务流畅简单化,让系统更加灵活运行,同时也很方便业务的跟踪、监控和管理,是一种很好的业务工作流框架模式。 2.OSWORKFLOW:这种框架是用java语言编写出来的,简单地说就是一种工作流引擎,其技术性非常强,它能满足用户多方面的需求。用户可以根据自己的需要来设计一些简单或者是复杂的工作流,为企业业务流程管理服务。这种工作流最大的优点是灵活简单,比较容易实现,能够满足当前市场对开源工作流的需求。 3.oa办公软件系统:这种工作流是符合相关标准的系统管理工作流软件,它也是由java编写出来的,其扩展性比较强,功能也多,还具有通用性的特点,可以用于完整的工作流管理系统中。要说这种软件最大的特点,就是其功能模块比较多,比如说动态表单、可视化工作表、智能报表等等,不同的功能表可以帮助用户实现不同的功能,受到了用户的好评。 以上就是现在市场上比较常见的几种开源工作流管理模式,由此可见,不同的工作流模式其优势特点是不同的,不过这些工作流都能给企业业务流程管理起到一个很好的效果,受到了很多企业的欢迎。在这几种工作流模式中,最值得一提的是JBPM,这种工作流是目前比较先进的,已经收到了很多企业的信赖。

分享6个国内优秀Java后台管理框架的开源项目,建议收藏!

分享6个国内优秀Java后台管理框架的开源项目,建议收藏! 后台管理系统是内容管理系统Content Manage System(简称CMS)的一个子集。CMS是Content Management System的缩写,意为'内容管理系统'。内容管理系统是企业信息化建设和电子政务的新宠,也是一个相对较新的市场。我自己也一直在搭建一个即好用,又美观的后台管理系统的手动架,可以即拿的即用的项目。不用要重复的去造轮子,把有限的时间用去一些有意思的事。下面分享一下开源中国中有哪些优秀的Java开源后台管理系统。所有项目在https://www.wendangku.net/doc/1c11416972.html,中输入项目都可以搜索的到。ThinkGem / JeeSite(开发人员/项目名称)watch 2100 star 4000 fork 2600JeeSite是基于多个优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的开源Java EE快速开发平台。JeeSite是您快速完成项目的最佳基础平台解决方案,JeeSite是您想学习Java平台的最佳学习案例,JeeSite还是接私活的最佳助手。JeeSite是在Spring Framework基础上搭建的一个Java基础开发平台,以Spring MVC为模型视图控制器,MyBatis为数据访问层,Apache Shiro为权限授权层,Ehcahe对常用数据进行缓存,Activit为工作流引擎。是JavaEE界的最佳整合。JeeSite 主要定位于企业信息化领域,已内置企业信息化系统的基础

功能和高效的代码生成工具,包括:系统权限组件、数据 权限组件、数据字典组件、核心工具组件、视图操作组件、工作流组件、代码生成等。前端界面风格采用了结构简单、性能优良、页面美观大气的Twitter Bootstrap页面展示框架。采用分层设计、双重验证、提交数据安全编码、密码加密、访问验证、数据权限验证。使用Maven做项目管理,提高项目的易开发性、扩展性。JeeSite目前包括以下四大模块,系统管理(SYS)模块、内容管理(CMS)模块、在线办公(OA)模块、代码生成(GEN)模块。系统管理模块,包括企业组织架构(用户管理、机构管理、区域管理)、菜单管理、角色权限管理、字典管理等功能; 内容管理模块,包括内容管理(文章、链接),栏目管理、站点管理、公共留言、文件管理、前端网站展示等功能; 在线办公模块,提供简单的请假流程实例;代码生成模块,完成重复的工作。JeeSite 提供了常 用工具进行封装,包括日志工具、缓存工具、服务器端验证、数据字典、当前组织机构数据(用户、机构、区域)以及其它常用小工具等。另外还提供一个强大的在线代码生成工具,此工具提供简单的单表、一对多、树结构功能的生成,如果对外观要求不是很高,生成的功能就可以用了。如果你使 用了JeeSite基础框架,就可以很高效的快速开发出,优秀的信息管理系统。技术选型:1、后端核心框架:Spring Framework 4.1安全框架:Apache Shiro 1.2视图框架:

shark工作流引擎表结构分析

SHARK工作流引擎的表结构 背景: Shark作为一个满足XPDL规范的开源工作流引擎,由于有JAWE作为定义工具,现有的很多流程表达,接口的定义都比较丰富。在数据库的数 据结构表达和代码结构上也有很多优点。 当然,Shark 还是在传统的关系数据库的基础上,提出了一个适用于关键业务开发的基于关系结构的工作流引擎的表结构。 关键词:表结构、工作流引擎、shark、数据结构 1数据库表的关系图 Shark中共含有44个表,分别表达不同的数据结构,对应表数据内容和功能的对应关系,分为用户管理、事件管理、包管理、流程流转的控制数据管理等部分。 1.1用户管理 系统的用户和用户组的基本信息 1.2事件管理 在流程运转过程中,针对流程启动和结束,上下文数据,状态数据的改变,任务结束等事件,都记录了变化的前后过程。

1.3包管理 1.4.1在流程定义的参与者和系统真正用户之间有对应关系

1.4.2应用和调用工具类之间的映射 1.5辅助表

1.6流程流转控制数据管理

2Shark持久层对表的封装

class=" usergroup.HibernateUser" table="usertable" hibernate.participantmappin g.cfg.xml HibernateParticipant.hbm.xml class =" partmappersistence.data.HibernateParticipant" table="participant" HibernateGroupUser.hbm.xml class =" partmappersistence.data.HibernateGroupUser" table="groupuser" HibernateNormalUser.hbm.xml class=" partmappersistence.data.HibernateNormalUser" table="normaluser" HibernateProcessPartMap.hbm.xml" class=" partmappersistence.data.HibernateProcessPartMap" table="process" HibernatePackage.hbm.xml class="partmappersistence.data.HibernatePackage" table="package" hibernate.applicationmappin g.cfg.xml HibernateApplicationMapping.hbm.xml class="com.cs3.workflow.appmappersistence.HibernateApplicationMap" table="applicationmappings" hibernate.processlocking.cf g.xml HibernateLockEntry.hbm.xml class=" processlocking.HibernateLockEntry" table="locktable" 表三、独立的*.hbm.xml文件

相关文档
相关文档 最新文档