`

Embebed jetty + h2 + jdic + substance => “桌面应用”也可以这么开发

阅读更多

1. 搞一个差不多的界面,要不要登陆之类的就看自己情况了;

https://substance.dev.java.net/learn.html

 

2. 适当地方放一个jdic webbrowser的jpanel,在windows下虽然只能嵌入IE,但做一个本地软件速度应该不慢了;

 

3. 嵌入一个Jetty Server和H2 Server

我还是把datasource放到jndi了,当然也可以不这么搞。(我用的是jetty6.1x)

这个,我干脆献丑上个代码妥了——

 

package com.cisee.bsw.server;

import java.beans.PropertyVetoException;
import java.sql.SQLException;
import java.util.Properties;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import javax.naming.NamingException;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.dy.common.util.PropHelper;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.plus.naming.Resource;
import org.mortbay.jetty.webapp.WebAppContext;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class ServerLauncher {
	
	Logger log = LogManager.getLogger(ServerLauncher.class);
	
	String locatePath = ServerLauncher.class.getResource("/").getPath() + "..";
    Properties pp;
	
	static ServerLauncher instance;
	
    public static ServerLauncher getInstance(){
    	if(instance == null){
    		instance = new ServerLauncher();
    	}
    	return instance;
    }
    
    private ServerLauncher() {
    	pp = PropHelper.loadProperties("/cisee.properties", PropHelper.SCOPE_CP);
    }
    
    private String c(String key){
    	return pp.getProperty(key);
    }

    private int ci(String key){
    	try {
    		return Integer.parseInt(c(key));
		} catch (Exception e) {
			return 0;
		}
    }	

    // jetty server
	private Server server;
	private org.h2.tools.Server h2Server;
	
	private void startH2() throws SQLException{
		String[] args = (c("h2_server_args") + "  -baseDir " + c("h2_data_dir")).split(" ");
		h2Server = org.h2.tools.Server.createTcpServer(args);
		h2Server.start();
	}
	
	public void start() {
		// start db server
		try {
			startH2();
			log.info("H2 Database Server Started..");
		} catch (SQLException e) {
			log.error(e);
			log.error("H2 Database Server Start Failed..");
		}
		
		server = new Server(ci("port"));
		WebAppContext context = new WebAppContext();
		context.setContextPath("/");
		context.setWar(locatePath + c("context_path"));
		
		// jndi - datasource
		try {
			ComboPooledDataSource pooledDataSource = new ComboPooledDataSource();
			pooledDataSource.setDriverClass(c("driver"));
			pooledDataSource.setJdbcUrl(c("url"));
			pooledDataSource.setUser(c("u"));
			pooledDataSource.setPassword(c("p"));
			
			pooledDataSource.setMaxStatements(ci("max_stmt"));
			pooledDataSource.setMinPoolSize(ci("min_pool_size"));
			pooledDataSource.setMaxPoolSize(ci("max_pool_size"));
			pooledDataSource.setInitialPoolSize(ci("init_pool_size"));
			pooledDataSource.setMaxIdleTime(ci("max_idle_time"));
			new Resource(c("jndi_name"), pooledDataSource);
		} catch (PropertyVetoException e) {
			log.error(e);
		} catch (NamingException e) {
			log.error(e);
		}
		
		server.addHandler(context);
		server.setStopAtShutdown(true);
		try {
			server.start();
			log.info("Jetty Server Started..");
		} catch (Exception e) {
			log.error(e);
		}
	}
	
	public void stop(){
		if(server != null){
			try {
				server.stop();
				log.info("Jetty Server Stopped..");
			} catch (Exception e) {
				log.error(e);
			}
		}
		
		if(h2Server != null){
			h2Server.stop();
			log.info("H2 Database Server Stopped..");
		}
	}
	
	public static void main(String[] args) {
		ServerLauncher launcher = ServerLauncher.getInstance();
		launcher.start();
		
		BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
		try {
			while(true){
				String line;
				line = r.readLine();
				if("quit".equals(line)){
					launcher.stop();
					break;
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

}

 

    web.xml里最好加一个h2的consoleservlet

<servlet>

		<servlet-name>H2Console</servlet-name>
		<servlet-class>org.h2.server.web.WebServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>H2Console</servlet-name>
		<url-pattern>/console/*</url-pattern>
	</servlet-mapping>

 

4. 当然为了好搞热部署或开发,弄一个lightweight的脚本开发支架就更好点;

 

5. 最后用jsmooth或launch4j打个包,这么搞下子一般“领导”就能糊弄过去了;嘿嘿

 

 

BTW——本来有个需求,做桌面应用的,本打算用swing(其他的不会么,而且swing也菜的很),可是用户对LAF要求太高了,拿css的一些思想做设计,比如,一些button的hover效果,一个**渐变背景图片,控件的位置要很灵活——反正一些需求不是像修改个html几行代码就能搞定了,我对swing的LAF定制也没啥研究,所以就有了以上这个变通。用起来还不错!

分享到:
评论
1 楼 key232323 2010-08-17  
代码方面可以参考——

http://key232323.iteye.com/blog/737814

相关推荐

    maven+spring MVC+Mybatis+jetty+mysql

    "maven+spring MVC+Mybatis+jetty+mysql" 的组合是常见的开发栈,它涵盖了项目管理、前端控制器、持久层操作、应用服务器以及数据库管理等多个层面。下面将详细介绍这些关键技术及其在实际应用中的作用。 1. Maven...

    IntelliJ+Maven+Jetty+Jrebel

    标题中的“IntelliJ+Maven+Jetty+Jrebel”揭示了本文将讨论一个基于Java Web开发的高效工作流程,其中涉及四个关键组件: 1. **IntelliJ IDEA**:这是一款由JetBrains公司开发的强大的集成开发环境(IDE),特别...

    websocket+tomcat+jetty+netty

    总结来说,"websocket+tomcat+jetty+netty"这个主题涵盖了WebSocket协议及其在不同服务器框架中的实现。Tomcat、Jetty和Netty都是支持WebSocket的Java服务器平台,各有其优势和适用场景。理解这些技术可以帮助开发者...

    springmvc+mysql+mybatis+jetty+maven+easyui

    标题 "springmvc+mysql+mybatis+jetty+maven+easyui" 描述了一款基于Java的Web应用程序,它利用了一系列流行的开源技术栈来构建。这个项目采用了Spring MVC作为后端MVC框架,MySQL作为数据库存储,MyBatis作为持久层...

    maven+jetty +ssh 项目例子

    【标题】"maven+jetty +ssh 项目例子"是一个综合性的开发示例,它展示了如何使用Maven构建工具、Jetty服务器以及SSH(Spring Security)框架来开发和部署一个Java Web应用。这个项目旨在帮助开发者理解这些技术的...

    jfinal-jetty+idea例子

    **正文** 标题“jfinal-jetty+idea例子”揭示了一个基于Java开发的项目实例,它结合了JFinal和Jetty两个关键组件...通过学习和实践这个例子,开发者可以更好地掌握这两个工具的使用,并提升Web应用开发的效率和质量。

    maven+jetty+seam+hibernate

    【标题】"maven+jetty+seam+hibernate"是一个集成开发环境的配置,主要用于Java Web应用的快速开发。这个组合充分利用了Maven的项目管理和构建能力,Jetty的轻量级服务器特性,Seam的Java EE集成框架,以及Hibernate...

    Maven+jetty+jrebel+m2eclipse+eclipse搭建struts2开发环境

    "Maven+Jetty+JRebel+m2eclipse+Eclipse搭建Struts2开发环境"这个主题,正是围绕这些关键组件展开,旨在为开发者提供一个高效且便捷的开发流程。 首先,让我们来详细了解一下每个组件的作用: 1. **Maven**:...

    IntelliJ+Maven+Jetty+Jrebel实现web项目java代码更改后热部署

    "IntelliJ+Maven+Jetty+Jrebel"的组合正是为了解决这一问题,实现Web项目的Java代码更改后能够自动热部署。这个解决方案集成了几个关键工具,包括: 1. **IntelliJ IDEA**: 这是一款强大的Java集成开发环境(IDE)...

    jetty+maven webapp,http,https实现的简单demo

    **Jetty + Maven Webapp 实现HTTP与HTTPS的简要介绍** 在Web应用程序开发中,Jetty是一个轻量级、...通过理解这些基础知识,你可以进一步探索Jetty的高级特性,如WebSocket、Session管理、部署Web应用到Jetty容器等。

    自己构建微服务(springmvc+内嵌jetty+maven 环境配置)

    标题 "自己构建微服务(springmvc+内嵌jetty+maven 环境配置)" 提供了关于如何在Java环境中创建微服务的信息。这通常涉及使用Spring MVC作为控制器层,内嵌Jetty作为Web服务器,以及Maven作为项目管理工具。下面将...

    基于Jetty+Servlet+Jsp+MySQL+MyBatis技术实现的简单博客系统

    内容概要:本博客系统主要使用Jetty技术+Servlet技术+Jsp技术+BootStrap前端框架+wangEditor富文本编辑器+MySQL数据库+MyBatis持久层,通过对该系统的设计,可以在实践过程中掌握相关基础知识,如对三层架构开发模式...

    Eclipse+ jetty+android+websocket协议整合

    Eclipse+ jetty+android+websocket协议整合 这里介绍了怎么安装jett插件,共享了一个jett服务器demo,简要介绍了如何配置服务器,同时还给了一个android的客户端。对于android客户端发送websocket协议数据:要注意...

    Marven + Jetty + Myeclipse实现java修改实时生效

    Marven + Jetty + Myeclipse实现java修改实时生效 1、把jrebel.jar放在任意地方(非项目中) 2、在myeclipse中配置 输入jetty:run -X 输入-noverify -javaagent:D:/java/spring/jrebel.jar 3、在pom.xml中...

    一键部署demo+jetty+svn+ant配置

    在IT行业中,自动化部署是提高效率的关键步骤,尤其是在Java应用的开发和运维过程中。本教程将详细介绍如何通过“一键部署”实现对一个基于Java的项目(DEMO)进行配置,结合Jetty服务器、Subversion(SVN)版本控制...

    maven+spring+jetty+logback简单项目源码

    这个"maven+spring+jetty+logback简单项目源码"提供了一个基础框架,方便新手快速入门并实践这些技术。 首先,`Maven`是Apache开发的一个项目管理和综合工具,它通过一个项目对象模型(Project Object Model, POM)...

    jetty+TLS PSK的java代码实例

    【标题】"jetty+TLS PSK的java代码实例"涉及了几个关键的IT知识点,主要集中在Jetty服务器、TLS(Transport Layer Security)协议以及预共享密钥(PSK,Pre-Shared Key)的安全机制上。以下是这些概念的详细解释: ...

    Spring整合Jetty开发web应用的例程

    1. **Spring框架**:Spring是一个全面的Java企业级应用开发框架,提供了依赖注入(Dependency Injection, DI)、面向切面编程(Aspect-Oriented Programming, AOP)以及大量的企业服务,如数据访问、事务管理等。...

    centos7配置jetty+mariadb等操作.txt

    公司服务器使用centos7+jetty+mariadb,多次部署,总结部署的命令给用得着的人参考,大部分都是参考网上其他前辈的教程,自己实际操作可行,特集中到一起,希望能够帮上他人.

Global site tag (gtag.js) - Google Analytics