- 浏览: 35069 次
- 性别:
- 来自: 合肥
博客专栏
-
我和Java数据库操作的那...
浏览量:9461
最新评论
-
ivanlw:
楼主用的这个snapito好神奇啊……是直接把图片链接设置成他 ...
ibookmark.me上线了! -
succinite:
使用TortoiseGit, 出现以下错误。fatal: ht ...
一个简单的JAVA后台程序框架 -
mazhiyuan:
引用很显然,之前所说的梦想,并非是真正心中所想,而只不过想“找 ...
也谈梦想 -
cevin15:
说到我心里去了。现在处于离职状态。也是对前途一片迷茫~
也谈梦想 -
lwjlaser:
lettoo 写道lwjlaser 写道这篇博客第一个示例代码 ...
我和JAVA数据库操作的那些事儿(3)
本项目已经通过git进行版本管理,checkout:http://github.com/lettoo/orion
项目要实现一个java后台程序,提供start(),stop()和status()的方法。
主要的原理是:有一个Server类运行在localhost:xxxx上,当成一个RMI service,这个Server类里有一个Service List,通过Spring注入的方式,向其中注入Service,当然,也可以通过编程方式动态往里面加Service,因为项目比较简单,直接通过Spring配置已经满足要求。RMI 客户端通过调用Server.start(),遍历Service List中的service,一个个启动起来。客户端调用stop(),则遍历Service List中的server,一个个关闭,最终再关闭服务端。status()方法只是简单的提供Server是否在运行状态。
1. Server接口
public interface IServer { void start() throws Exception; void stop() throws Exception; boolean isStarted(); }
2. Server实现类
import java.util.LinkedList; import java.util.List; public class ServerImpl implements IServer { private volatile boolean isStarted = false; private List<IService> serviceList = new LinkedList<IService>(); public void setServiceList(List<IService> serviceList) { this.serviceList = serviceList; } @Override public void start() throws Exception { if (isStarted) { return; } for (IService service : serviceList) { service.start(); } isStarted = true; } @Override public void stop() throws Exception{ for (IService service : serviceList) { service.stop(); } isStarted = false; System.exit(0); } @Override public boolean isStarted() { return isStarted; } }
3. 通过Spring RMI,分别创建两个xml,一个是server.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="server" class="cn.lettoo.server.ServerImpl"> <property name="serviceList"> <list> <!-- Add your service here, all service implements IService interface. --> <ref bean="jmsService" /> <ref bean="jobService" /> <ref bean="dataReaderService" /> </list> </property> </bean> <bean id="orionMonitorServer" class="org.springframework.remoting.rmi.RmiServiceExporter"> <property name="serviceInterface" value="cn.lettoo.server.IServer" /> <property name="service" ref="server" /> <property name="serviceName" value="OrionMonitorServer" /> <property name="registryPort" value="1199" /> <property name="alwaysCreateRegistry" value="true" /> </bean> </beans>
再创建一个client.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="serviceProxy" class="org.springframework.remoting.rmi.RmiProxyFactoryBean"> <property name="serviceUrl" value="rmi://localhost:1199/OrionMonitorServer" /> <property name="serviceInterface" value="cn.lettoo.server.IServer" /> </bean> </beans>
4. 写一个Luncher类,通过RMI来调用Server的方法
import org.apache.commons.cli.BasicParser; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Options; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Launcher { /** The Constant USAGE. */ private static final String USAGE = "[options]"; /** The Constant HEADER. */ private static final String HEADER = "Options:"; /** The Constant FOOTER. */ private static final String FOOTER = "For more instructions, please contact golettoo@gmail.com"; private IServer server; private static Log logger = LogFactory.getLog(Launcher.class); public static void main(String args[]) { Launcher launcher = new Launcher(); try { launcher.execute(args); } catch (Exception e) { launcher.printUsage(launcher.createOptions()); logger.error("launch error: ", e); System.exit(1); } } private void execute(String[] args) throws Exception { CommandLineParser parser = new BasicParser(); Options options = createOptions(); CommandLine commandLine = parser.parse(options, args); if (commandLine.hasOption('h')) { printUsage(options); return; } if (commandLine.hasOption('v')) { System.out.println("Version: 1.0"); return; } if (args.length == 0) { start(); } else if (commandLine.hasOption("start")) { start(); } else if (commandLine.hasOption("stop")) { stop(); } else if (commandLine.hasOption("status")) { System.out.println("Status: " + getStatus()); } else { printUsage(options); } } private void initServer() throws Exception { ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "server.xml" }); } private void initClient() throws Exception { ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "client.xml" }); this.server = (IServer) context.getBean("serviceProxy"); } private void start() throws Exception { initServer(); initClient(); server.start(); } private void stop() { try { initClient(); server.stop(); } catch (Exception e) { logger.error("Stop server error: " + e.toString()); } } private String getStatus() { try { initClient(); return server.isStarted() ? "started" : "stopped"; } catch (Exception e) { logger.error("Get server status error: " + e.toString()); } return "stopped"; } private void printUsage(Options options) { HelpFormatter helpFormatter = new HelpFormatter(); helpFormatter.printHelp(USAGE, HEADER, options, FOOTER); } private Options createOptions() { Options options = new Options(); options.addOption("h", "help", false, "print this usage information"); options.addOption("o", "option", true, "set option"); options.addOption("v", "version", false, "print version"); options.addOption("start", false, "start the application"); options.addOption("stop", false, "stop the application"); options.addOption("status", false, "print the status information"); return options; } }
Luncher类通过运行时的参数来决定是start还是stop,另外,还提供了一个帮助和版本信息的查看
现在可以通过运行Luncher -start来启动这个server了
再通过Luncher -status来看状态
通过Luncher -stop来关闭server
评论
1 楼
succinite
2011-11-19
使用TortoiseGit, 出现以下错误。
fatal: http://github.com/lettoo/orion/info/refs not found: did you run git update-server-info on the server?
fatal: http://github.com/lettoo/orion/info/refs not found: did you run git update-server-info on the server?
发表评论
-
ibookmark.me上线了!
2012-04-10 23:47 1540记得上次是2009年,接触到了python,gae,于是乎动手 ... -
使用virtualenv开发django应用
2012-01-12 11:03 1776Virtualenv是一个非常好的virtual python ... -
在Amazon EC2上试用play framework
2011-11-11 17:00 1415几个月以前,我在 ... -
一个Log生成工具小项目的实现
2011-11-01 17:32 1367这两天的主要工作是用java写一个log生成工具,用于 ... -
自定义log4j生成的log文件名
2011-11-01 13:57 2976很多时候,log4j的RollingFileAppen ... -
我和java操作数据库那些事儿(5)
2011-10-26 16:56 1645引用 半自动化武器来了:Spring JdbcTemplate ... -
我和JAVA数据库操作的那些事儿(4)
2011-10-24 16:21 1496通过前面几篇的介绍,对于JDBC的使用应该基本上够上项目开发的 ... -
我和JAVA数据库操作的那些事儿(3)
2011-10-20 15:35 2516在前面的两篇文章中,第一篇主要是讲了在jdbc编程中容 ... -
我和JAVA数据库操作的那些事儿(2)
2011-10-20 11:15 1574摘要 写道 上一篇提到的几个问题,在本篇有具体的代码。本篇后 ... -
图说事务隔离级别
2011-10-19 21:38 1435我们经常说的事务隔离级别,一般指的是SQL-92 ... -
我和JAVA数据库操作的那些事儿(1)
2011-10-19 15:26 2230摘要 我开始接触jdbc的 ... -
复习:观察者模式
2011-10-17 17:02 991观察者模式(有时又被称为发布/订阅模式)是软件设计模式 ... -
复习:代理模式
2011-10-17 15:53 735代理模式是常用的Java 设计模式,它的特征是代理类与 ... -
对chainsaw中一个简单Job Scheduler的扩展
2011-10-14 23:36 1054今天在看apache chainsaw这个项目的源代码 ... -
Spring RMI 简单实现
2011-10-14 13:47 1057好久没有写java代码了,最近工作项目上需要做一个 ... -
一道关于树的面试题
2011-10-13 15:31 938记得不久以前有道面试题,要求下面的数据结构 ... -
测试驱动开发:红、绿、重构
2011-10-12 23:01 889在读Ruby on Rails Tutorial: ... -
Spring JMS和ActiveMQ的应用
2011-10-12 22:43 2047笔者近期参与一个分析log的项目。主要流程是:读取Lo ...
相关推荐
Java后台框架集合是开发高效、稳定且可扩展的后端应用程序的重要工具箱。SpringMVC、Redis和Quartz是其中的三个关键组件,它们分别在不同的层面上为开发者提供了强大的支持。 SpringMVC是Spring框架的一个模块,...
java权限后台开发框架,采用spring + srpingsecurity + springMVC + Hibernate + freemarker + jquery 等技术实现,页面及源文件打包发布程序。 完整的功能应用,包括:后台权限、人员机构、参数代码、角色权限、...
项目简介:Java开发的一个简约后台管理系统 1.需求定义:外包项目如雨后春笋,开发工期被迫压缩,为了开发人员专注开发项目业务,早点下班能陪老婆、孩子。 2.产品定位: 简约后台管理系统 3.项目特点:此项目代码...
"商城小程序JAVA后台"是一个基于Java技术开发的用于支持电商小程序运行的后端系统。这个系统的核心目标是为前端小程序提供稳定、高效的数据处理和服务支持,实现用户购物、支付、订单管理等一系列功能。以下是该系统...
微信商城小程序是一个基于微信生态的在线购物平台,其前端通过微信小程序进行展示,后端则由Java技术栈构建,采用SSM(Spring、SpringMVC、MyBatis)框架进行开发,并结合MySQL数据库来存储数据。这个项目是针对毕业...
Java后台技术是构建大型互联网应用的核心部分,它主要负责处理前端...以上就是Java后台开发的一些关键知识点,涵盖从框架选择、数据库操作到系统架构等多个层面,这些都是成为一名合格的Java后台开发者必备的基础技能。
"简单好用的Web后台管理框架"是一个专为提高开发效率而设计的解决方案,它包含了导航菜单、增删改查页面以及登录页面等功能,为开发者提供了完整的后台管理模板。 首先,我们来了解一下后台管理框架的基本概念。...
在“微信小程序+Java后台完整代码”中,我们可以看到一个完整的电商解决方案,包括前端的小程序部分和后端的Java服务。小程序商城的部分主要负责展示商品、处理用户交互、实现购物车功能、订单管理以及支付流程等。...
"大华视频 最新java后台程序开发demo"的标题暗示了这是一个与大华公司相关的项目,它提供了使用Java进行后台程序开发的示例代码或教程。这个Demo可能包含了一个或多个用Java编写的后端服务,用于处理视频数据或其他...
在这个项目中,我们结合了微信小程序和Java后台技术,实现了一个完整的微信支付流程。以下将详细阐述涉及的知识点: 1. **微信小程序**:微信小程序是一种轻量级的应用开发框架,允许开发者在微信内部创建和运行...
综上,"基于Java的后台管理系统快速开发脚手架.zip"包含了一系列用于后台系统开发的关键技术,如Java、Spring Boot、MyBatis、Thymeleaf等,旨在提供一个高效、可复用的开发基础,加速项目的实施。通过学习和运用...
数据库交互是 Java 后台部署 HTML 页面代码的另一个重要组成部分。在给定的代码中,我们可以看到使用了静态模型(StaticModel)来存储 HTML 页面的元数据。静态模型是一个 JavaBean 对象,用于存储 HTML 页面的元...
本压缩包“java后台服务程序.rar”很可能包含了一个或多个这样的服务的源代码、配置文件、依赖库等组成部分。 Java作为一门面向对象的编程语言,因其跨平台性、稳定性和强大的功能而广泛应用于后台服务开发。下面...
综上所述,"微信商城小程序带JAVA后台"项目涵盖了从前端用户体验到后台业务处理的完整流程,涉及微信小程序开发、JAVA编程、数据库管理、服务器部署等多个技术领域,是企业级电商解决方案的一个实例。
这个简单后台框架可能没有明确的后端实现,但理解这一概念对于完整系统的构建至关重要。 8. 开发工具:开发者可能会使用如Visual Studio Code、Sublime Text等编辑器,或Webpack、Gulp等构建工具来管理和优化这个...
【后台管理框架】是一个专为构建企业级后台应用设计的基础架构,它整合了多个流行的开源技术,如Bootstrap、SpringMVC、Shiro、MyBatis和JSP,以提供快速开发和高效管理的能力。这个框架已被优化为Maven项目结构,...
### 国内优秀Java后台管理框架的开源项目 #### 一、引言 随着企业信息化建设和电子政务的发展,后台管理系统(Content Management System, CMS)成为了一个不可或缺的部分。良好的后台管理系统不仅能够提升工作效率...
总之,这个Java后台模板集合是一个宝贵的资源库,无论是对于个人提升编程技巧,还是团队提高开发效率,都有着显著的帮助。请务必花时间去深入理解和利用这些模板,让它们在你的开发工作中发挥出最大的价值。
"集成Spring4.x+SpringMVC+Mybatis的Java后台管理框架"是一个常见且广泛使用的解决方案,它结合了Spring框架的强大功能、SpringMVC的优雅模型视图控制器设计以及Mybatis的灵活数据访问能力。下面我们将详细探讨这些...