- 浏览: 270666 次
- 性别:
- 来自: 新乡
文章分类
- 全部博客 (227)
- servciemix (10)
- db (18)
- javaTools (4)
- hibernate (31)
- web (3)
- spring (14)
- design pattern (4)
- java security (3)
- portal (1)
- ejb (6)
- session (2)
- java_lang (21)
- jbpm (29)
- struts (7)
- orgRights (2)
- project manager Jira (7)
- 跨库事务 (2)
- mysql (14)
- ubuntu (7)
- osgi (9)
- maven ant make (4)
- 分布式 高并发 高性能 (5)
- virgo-dm_server (0)
- osgi web (3)
- platform (1)
- smooks (1)
- business (1)
- 职场生涯 (14)
- Java编码格式 (2)
- web服务 (1)
- 计算机使用 (1)
- 健康工作生活的保障,工作中务必抛掉的不良心态 (4)
- 电信-网络监控 (1)
- 多线程-multithread (1)
- 海量数据-高性能 (2)
- Mybatis (1)
- web开发平台研发 (0)
- oracle (0)
- 应用服务器调优 (0)
- web前端 (0)
- servlet-jsp (0)
- tomcat (2)
- newtouch (1)
- portal_liferay (2)
- version control (1)
- apm-impact (2)
- tools (1)
- 研发管理 (1)
- 电商业务 (1)
- 生鲜电商市场调查 (0)
- PBX (0)
- 房东 (0)
最新评论
-
lifuchao:
...
权限问题 -
Branding:
谢谢,受教了,另外,CONN AS SYSDBA,必须是在操作 ...
Oracle密码忘记了怎么办? -
zhuchao_ko:
...
Portal实现原理 -
败类斯文:
不知道改哪里。。。木有见到红色。。表示悟性低了、、
jira error: Neither the JAVA_HOME nor the JRE_HOME environment variable is defin -
c__06:
正文:假如事务我是这样定义的: <tx:method n ...
Spring中Transactional配置
DWR与OSGi的整合
最近一个项目中用了OSGi,此时OSGi还没有引起足够多人的重视,无论在国内还是国外,所以在开发过程中遇到的问题只能自己慢慢去找。但是,特别想感谢BlueDavy,是他的OpenDoc带我进入了OSGi的世界。
先说下我的项目中遇到的困难吧,首先我选择了使用HTTP作为应用的View层。OSGi对HTTP的支持还很小,就连最近版本的org.eclipse.equinox.http_1.0.1在HTTP服务的支持上都还有很多还没有实现的,就像Servlet2.4中的编码、过滤器、监听器......还有好多方法。只能自己实现,其实我们可以考虑使用Bridge的,但出项目性质考虑,还是使用了OSGi直接支持的HTTP服务。至于org.eclipse.equinox.http中的一些方法的实现我有空再写吧。
好了,搞定了HTTP服务,现在就想用回我们熟悉的Spring、Hibernate。这在别人的文章里都有写了,特别是在JavaEye的OSGi专栏里已经有人实验过了。呵呵,就差DWR。听说BlueDavy也在用OSGi+DWR,但也没有看到有进一步的资料。
DWR与OSGi的整合其实挺简单的,这要归功于DWR的作者设计时的思路。在网上,一直没有人提到DWR可以有多个配置文件的,更可以在web.xml里面进行参数的设置,之前我也不知道,这两天算是把它的源代码看了一遍。要整合DWR,还得先知道它初始化的原理:
DWR在第一次启动时运行DwrServlet中的init()方法,首先初始化一个Continer。Continer可以在web.xml中设定,这样如果必要的话可以加入自己的Continer,如果没有,则使用默认的DefaultContainer。ContainerUtil为Continer提供了很多的方法,就像Map对象一样。add....(...)、get(...)方法
完成Continer初始化后,就开始加载配置文件。这里会加载几个配置文件
首先会加载dwr.jar包里面的dwr.xml文件,这个文件里面定义了基本类型的转换,比如String、Date、Collection....还有一些Creator。比如new、null、Spring...这样的设计有一个好处,就是在以后的扩展中可以很轻松地将一个新的Creator加进去。
接着,加载程序configureFromInitParams会去查找ServletConfig里,即是web.xml中DwrServlet中有没有以"config"开关的Name,有话就提取出它的Value,并且以"\n"符把它分割,分别加载。这段代码如下:
Enumeration en = servletConfig.getInitParameterNames();
boolean foundConfig = false;
while (en.hasMoreElements())
{
String name = (String) en.nextElement();
String value = servletConfig.getInitParameter(name);
// if the init param starts with "config" then try to load it
if (name.startsWith(INIT_CONFIG))
{
foundConfig = true;
StringTokenizer st = new StringTokenizer(value, "\n,");
while (st.hasMoreTokens())
{
String fileName = st.nextToken().trim();
DwrXmlConfigurator local = new DwrXmlConfigurator();
local.setServletResourceName(fileName);
local.configure(container);
}
}
else if (name.equals(INIT_CUSTOM_CONFIGURATOR))
{
foundConfig = true;
try
{
Configurator configurator = (Configurator) LocalUtil.classNewInstance(INIT_CUSTOM_CONFIGURATOR, value, Configurator.class);
configurator.configure(container);
log.debug("Loaded config from: " + value);
}
catch (Exception ex)
{
log.warn("Failed to start custom configurator", ex);
}
}
}
也就是说我们可以在web.xml中进行以下配置,以加载多个dwr.xml文件:
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>
dwrConfig1.xml
dwrConfig2.xml
.
</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping> 其实这一段代码就是我们所需要的,在OSGi里面,可以在每个Bundle里面放置自己的dwr.xml文件,以配置自己的HTTP中的DWR方法。
好了,让我们开始OSGi的DWR之旅吧。
新建一个Plug-in项目。初始化,可以把它称为DwrServer。继续初始化......
在Eclipse时里面开始的话,让它生成Activator.java文件,它是Bundle级的Listener。代码如下:
package com.ycoe.dwr;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Hashtable;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.ParserConfigurationException;
import org.directwebremoting.Container;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.WebContextFactory.WebContextBuilder;
import org.directwebremoting.extend.ServerLoadMonitor;
import org.directwebremoting.impl.ContainerUtil;
import org.directwebremoting.impl.DefaultContainer;
import org.directwebremoting.impl.StartupUtil;
import org.directwebremoting.servlet.UrlProcessor;
import org.directwebremoting.util.Logger;
import org.directwebremoting.util.ServletLoggingOutput;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceEvent;
import org.osgi.framework.ServiceListener;
import org.osgi.framework.ServiceReference;
import org.osgi.service.http.HttpService;
import org.osgi.util.tracker.ServiceTracker;
import org.xml.sax.SAXException;
public class Activator extends HttpServlet implements BundleActivator,
ServiceListener {
private BundleContext bc;
private ServiceReference ref;
private Servlet servlet;
/** *//**
* dwr container
*/
private DefaultContainer container;
/** *//**
* 用于储存http的WebContext对象
*/
private WebContextBuilder webContextBuilder;
/** *//**
* 日志
*/
public static final Logger log = Logger.getLogger(Activator.class);
/** *//**
* 取得DWR里的Container
* @return container
*/
public Container getContainer() {
return container;
}
/**//*
* (non-Javadoc)
*
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
bc = context;
registerServlet();
context.addServiceListener(this, "(objectClass="
+ HttpService.class.getName() + ")");
try {
// 初始化DWR,让Bundle启动时就去加载dwr配置,其实这可以放在其它地方做的
//有人建议不要在bundle启动时加载太多东西,会影响启动速度
//也是,但根据项目需求喽
URL url = new URL("HTTP", "127.0.0.1", 80, "/ajax/about");
URLConnection c = url.openConnection();
c.connect();
//以下代码用于测试,在应用时可以注释掉
BufferedReader in = new BufferedReader(new InputStreamReader(c
.getInputStream()));
String line = null;
StringBuffer content = new StringBuffer();
while ((line = in.readLine()) != null) {// line为返回值,这就可以判断是否成功、
content.append(line);
}
log.info(content.toString());
in.close();
in = null;
url = null;
} catch (Exception e) {
}
}
/**//*
*
* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
try {
unregisterServlet();
} catch (Throwable t) {
t.printStackTrace();
}
//这里有待完善,因为在这个Bundle停止时我们应该删除这个Bundle加载到Continer里的信息
servlet = null;
bc = null;
ref = null;
}
/**//*
* 注册Web应用
*/
private void registerServlet() {
if (ref == null) {
ref = bc.getServiceReference(HttpService.class.getName());
}
if (ref != null) {
try {
HttpService http = (HttpService) bc.getService(ref);
//这里把dwr的请求都定义为以/ajax开头
http.registerServlet("/ajax", new Activator(), null, null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void serviceChanged(ServiceEvent event) {
// TODO Auto-generated method stub
//这里可以再添加Bundle变化时的动作
}
/**//*
* 卸载Web应用
*/
private void unregisterServlet() {
if (ref != null) {
try {
HttpService http = (HttpService) bc.getService(ref);
http.unregister("/ajax");
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
ServletContext servletContext = servletConfig.getServletContext();
try {
//取得一个Container
container = ContainerUtil.createDefaultContainer(servletConfig);
//初始化Container
ContainerUtil.setupDefaultContainer(container, servletConfig);
//取得一个webContextBuilder,用于保存Servlet中的状态
webContextBuilder = StartupUtil.initWebContext(servletConfig,
servletContext, container);
StartupUtil.initServerContext(servletConfig, servletContext,
container);
ContainerUtil.prepareForWebContextFilter(servletContext,
servletConfig, container, webContextBuilder, this);
//这里是加载各个bundle里的dwr配置文件
DwrLoader.loadDwrConfig(container);
ContainerUtil.publishContainer(container, servletConfig);
} catch (ExceptionInInitializerError ex) {
log.fatal("ExceptionInInitializerError. Nested exception:", ex
.getException());
throw new ServletException(ex);
} catch (Exception ex) {
log.fatal("DwrServlet.init() failed", ex);
throw new ServletException(ex);
} finally {
if (webContextBuilder != null) {
webContextBuilder.unset();
}
ServletLoggingOutput.unsetExecutionContext();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
webContextBuilder.set(request, response, getServletConfig(),
getServletContext(), container);
ServletLoggingOutput.setExecutionContext(this);
UrlProcessor processor = (UrlProcessor) container
.getBean(UrlProcessor.class.getName());
processor.handle(request, response);
} finally {
webContextBuilder.unset();
ServletLoggingOutput.unsetExecutionContext();
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void destroy() {
shutdown();
super.destroy();
}
public void shutdown() {
ServerLoadMonitor monitor = (ServerLoadMonitor) container
.getBean(ServerLoadMonitor.class.getName());
monitor.shutdown();
}
}
如果看过dwr源代码的人也许会发现,这个类和DwrServlet非常地像,的确,我是拷那里的。为什么不用它原来的呢?后面会写原因。。。
好了,接下来,是实现加载每个Bundle里的dwr配置的文件类DwrLoader.java了
package com.ycoe.dwr;
import java.io.IOException;
import java.util.Dictionary;
import javax.xml.parsers.ParserConfigurationException;
import org.directwebremoting.impl.DefaultContainer;
import org.directwebremoting.impl.DwrXmlConfigurator;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.xml.sax.SAXException;
import com.ycoe.core.SystemContext;
public class DwrLoader {
/** *//**
* 权限配置文件
*/
private static final String DWR_CONFIG_FILE = "DWR-AJAX";
@SuppressWarnings("unchecked")
public static void loadDwrConfig(
DefaultContainer container) throws IOException, ParserConfigurationException, SAXException{
BundleContext context = SystemContext.getUsysContext().getContext();
Bundle[] bundles = context.getBundles();
for (Bundle bundle : bundles) {
Dictionary headers = bundle.getHeaders();
String config = (String) headers.get(DWR_CONFIG_FILE);
// 如果配置文件存在
if (null != config) {
String[] configXmls = config.split(",");
for (String configXml : configXmls) {
DwrXmlConfigurator system = new DwrXmlConfigurator();
system.setClassResourceName(configXml);
system.configure(container);
}
}
}
}
}
完成!
然而会发现出错了。接下来的内容我在回复中写好了。See you...
》点击查看原文...
最近一个项目中用了OSGi,此时OSGi还没有引起足够多人的重视,无论在国内还是国外,所以在开发过程中遇到的问题只能自己慢慢去找。但是,特别想感谢BlueDavy,是他的OpenDoc带我进入了OSGi的世界。
先说下我的项目中遇到的困难吧,首先我选择了使用HTTP作为应用的View层。OSGi对HTTP的支持还很小,就连最近版本的org.eclipse.equinox.http_1.0.1在HTTP服务的支持上都还有很多还没有实现的,就像Servlet2.4中的编码、过滤器、监听器......还有好多方法。只能自己实现,其实我们可以考虑使用Bridge的,但出项目性质考虑,还是使用了OSGi直接支持的HTTP服务。至于org.eclipse.equinox.http中的一些方法的实现我有空再写吧。
好了,搞定了HTTP服务,现在就想用回我们熟悉的Spring、Hibernate。这在别人的文章里都有写了,特别是在JavaEye的OSGi专栏里已经有人实验过了。呵呵,就差DWR。听说BlueDavy也在用OSGi+DWR,但也没有看到有进一步的资料。
DWR与OSGi的整合其实挺简单的,这要归功于DWR的作者设计时的思路。在网上,一直没有人提到DWR可以有多个配置文件的,更可以在web.xml里面进行参数的设置,之前我也不知道,这两天算是把它的源代码看了一遍。要整合DWR,还得先知道它初始化的原理:
DWR在第一次启动时运行DwrServlet中的init()方法,首先初始化一个Continer。Continer可以在web.xml中设定,这样如果必要的话可以加入自己的Continer,如果没有,则使用默认的DefaultContainer。ContainerUtil为Continer提供了很多的方法,就像Map对象一样。add....(...)、get(...)方法
完成Continer初始化后,就开始加载配置文件。这里会加载几个配置文件
首先会加载dwr.jar包里面的dwr.xml文件,这个文件里面定义了基本类型的转换,比如String、Date、Collection....还有一些Creator。比如new、null、Spring...这样的设计有一个好处,就是在以后的扩展中可以很轻松地将一个新的Creator加进去。
接着,加载程序configureFromInitParams会去查找ServletConfig里,即是web.xml中DwrServlet中有没有以"config"开关的Name,有话就提取出它的Value,并且以"\n"符把它分割,分别加载。这段代码如下:
Enumeration en = servletConfig.getInitParameterNames();
boolean foundConfig = false;
while (en.hasMoreElements())
{
String name = (String) en.nextElement();
String value = servletConfig.getInitParameter(name);
// if the init param starts with "config" then try to load it
if (name.startsWith(INIT_CONFIG))
{
foundConfig = true;
StringTokenizer st = new StringTokenizer(value, "\n,");
while (st.hasMoreTokens())
{
String fileName = st.nextToken().trim();
DwrXmlConfigurator local = new DwrXmlConfigurator();
local.setServletResourceName(fileName);
local.configure(container);
}
}
else if (name.equals(INIT_CUSTOM_CONFIGURATOR))
{
foundConfig = true;
try
{
Configurator configurator = (Configurator) LocalUtil.classNewInstance(INIT_CUSTOM_CONFIGURATOR, value, Configurator.class);
configurator.configure(container);
log.debug("Loaded config from: " + value);
}
catch (Exception ex)
{
log.warn("Failed to start custom configurator", ex);
}
}
}
也就是说我们可以在web.xml中进行以下配置,以加载多个dwr.xml文件:
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>
dwrConfig1.xml
dwrConfig2.xml
.
</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping> 其实这一段代码就是我们所需要的,在OSGi里面,可以在每个Bundle里面放置自己的dwr.xml文件,以配置自己的HTTP中的DWR方法。
好了,让我们开始OSGi的DWR之旅吧。
新建一个Plug-in项目。初始化,可以把它称为DwrServer。继续初始化......
在Eclipse时里面开始的话,让它生成Activator.java文件,它是Bundle级的Listener。代码如下:
package com.ycoe.dwr;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Hashtable;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.ParserConfigurationException;
import org.directwebremoting.Container;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.WebContextFactory.WebContextBuilder;
import org.directwebremoting.extend.ServerLoadMonitor;
import org.directwebremoting.impl.ContainerUtil;
import org.directwebremoting.impl.DefaultContainer;
import org.directwebremoting.impl.StartupUtil;
import org.directwebremoting.servlet.UrlProcessor;
import org.directwebremoting.util.Logger;
import org.directwebremoting.util.ServletLoggingOutput;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceEvent;
import org.osgi.framework.ServiceListener;
import org.osgi.framework.ServiceReference;
import org.osgi.service.http.HttpService;
import org.osgi.util.tracker.ServiceTracker;
import org.xml.sax.SAXException;
public class Activator extends HttpServlet implements BundleActivator,
ServiceListener {
private BundleContext bc;
private ServiceReference ref;
private Servlet servlet;
/** *//**
* dwr container
*/
private DefaultContainer container;
/** *//**
* 用于储存http的WebContext对象
*/
private WebContextBuilder webContextBuilder;
/** *//**
* 日志
*/
public static final Logger log = Logger.getLogger(Activator.class);
/** *//**
* 取得DWR里的Container
* @return container
*/
public Container getContainer() {
return container;
}
/**//*
* (non-Javadoc)
*
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
bc = context;
registerServlet();
context.addServiceListener(this, "(objectClass="
+ HttpService.class.getName() + ")");
try {
// 初始化DWR,让Bundle启动时就去加载dwr配置,其实这可以放在其它地方做的
//有人建议不要在bundle启动时加载太多东西,会影响启动速度
//也是,但根据项目需求喽
URL url = new URL("HTTP", "127.0.0.1", 80, "/ajax/about");
URLConnection c = url.openConnection();
c.connect();
//以下代码用于测试,在应用时可以注释掉
BufferedReader in = new BufferedReader(new InputStreamReader(c
.getInputStream()));
String line = null;
StringBuffer content = new StringBuffer();
while ((line = in.readLine()) != null) {// line为返回值,这就可以判断是否成功、
content.append(line);
}
log.info(content.toString());
in.close();
in = null;
url = null;
} catch (Exception e) {
}
}
/**//*
*
* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
try {
unregisterServlet();
} catch (Throwable t) {
t.printStackTrace();
}
//这里有待完善,因为在这个Bundle停止时我们应该删除这个Bundle加载到Continer里的信息
servlet = null;
bc = null;
ref = null;
}
/**//*
* 注册Web应用
*/
private void registerServlet() {
if (ref == null) {
ref = bc.getServiceReference(HttpService.class.getName());
}
if (ref != null) {
try {
HttpService http = (HttpService) bc.getService(ref);
//这里把dwr的请求都定义为以/ajax开头
http.registerServlet("/ajax", new Activator(), null, null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void serviceChanged(ServiceEvent event) {
// TODO Auto-generated method stub
//这里可以再添加Bundle变化时的动作
}
/**//*
* 卸载Web应用
*/
private void unregisterServlet() {
if (ref != null) {
try {
HttpService http = (HttpService) bc.getService(ref);
http.unregister("/ajax");
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
ServletContext servletContext = servletConfig.getServletContext();
try {
//取得一个Container
container = ContainerUtil.createDefaultContainer(servletConfig);
//初始化Container
ContainerUtil.setupDefaultContainer(container, servletConfig);
//取得一个webContextBuilder,用于保存Servlet中的状态
webContextBuilder = StartupUtil.initWebContext(servletConfig,
servletContext, container);
StartupUtil.initServerContext(servletConfig, servletContext,
container);
ContainerUtil.prepareForWebContextFilter(servletContext,
servletConfig, container, webContextBuilder, this);
//这里是加载各个bundle里的dwr配置文件
DwrLoader.loadDwrConfig(container);
ContainerUtil.publishContainer(container, servletConfig);
} catch (ExceptionInInitializerError ex) {
log.fatal("ExceptionInInitializerError. Nested exception:", ex
.getException());
throw new ServletException(ex);
} catch (Exception ex) {
log.fatal("DwrServlet.init() failed", ex);
throw new ServletException(ex);
} finally {
if (webContextBuilder != null) {
webContextBuilder.unset();
}
ServletLoggingOutput.unsetExecutionContext();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
webContextBuilder.set(request, response, getServletConfig(),
getServletContext(), container);
ServletLoggingOutput.setExecutionContext(this);
UrlProcessor processor = (UrlProcessor) container
.getBean(UrlProcessor.class.getName());
processor.handle(request, response);
} finally {
webContextBuilder.unset();
ServletLoggingOutput.unsetExecutionContext();
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void destroy() {
shutdown();
super.destroy();
}
public void shutdown() {
ServerLoadMonitor monitor = (ServerLoadMonitor) container
.getBean(ServerLoadMonitor.class.getName());
monitor.shutdown();
}
}
如果看过dwr源代码的人也许会发现,这个类和DwrServlet非常地像,的确,我是拷那里的。为什么不用它原来的呢?后面会写原因。。。
好了,接下来,是实现加载每个Bundle里的dwr配置的文件类DwrLoader.java了
package com.ycoe.dwr;
import java.io.IOException;
import java.util.Dictionary;
import javax.xml.parsers.ParserConfigurationException;
import org.directwebremoting.impl.DefaultContainer;
import org.directwebremoting.impl.DwrXmlConfigurator;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.xml.sax.SAXException;
import com.ycoe.core.SystemContext;
public class DwrLoader {
/** *//**
* 权限配置文件
*/
private static final String DWR_CONFIG_FILE = "DWR-AJAX";
@SuppressWarnings("unchecked")
public static void loadDwrConfig(
DefaultContainer container) throws IOException, ParserConfigurationException, SAXException{
BundleContext context = SystemContext.getUsysContext().getContext();
Bundle[] bundles = context.getBundles();
for (Bundle bundle : bundles) {
Dictionary headers = bundle.getHeaders();
String config = (String) headers.get(DWR_CONFIG_FILE);
// 如果配置文件存在
if (null != config) {
String[] configXmls = config.split(",");
for (String configXml : configXmls) {
DwrXmlConfigurator system = new DwrXmlConfigurator();
system.setClassResourceName(configXml);
system.configure(container);
}
}
}
}
}
完成!
然而会发现出错了。接下来的内容我在回复中写好了。See you...
》点击查看原文...
发表评论
-
某osgi平台的uri
2012-06-19 19:06 01、http://localhost:9797/zcgl 2、 ... -
osgi常用链接
2011-12-30 21:54 9111、 http://dev.eclipse.org/viewc ... -
Extending Virgo with a HttpService
2011-12-30 21:52 1498Extending Virgo with a HttpServ ... -
jetty osgi 启动信息总结
2011-12-01 15:27 17511、运行java -jar -Dorg.osgi. ... -
(转)OSGI+Spring+Hibernate+...完美解决方案[非SpringDM] 2008-08-08
2011-11-24 14:30 1044OSGI+Spring+Hibernate+...完美 ... -
OSGi Bundle的构建策略及实践
2011-11-23 21:12 1357OSGi Bundle的构建策略及 ... -
osgi 常用url
2011-11-12 17:15 9381、网络应用服务支撑运行平台 http://www.trust ... -
jetty in osgi ok
2011-11-02 18:04 11282011-11-2 17:29:13 org.springfr ... -
在spring osgi中取得datasource时出现问题
2011-11-02 15:06 1230在spring osgi中取得datasource时出现问题 ...
相关推荐
**DWR(Direct Web Remoting)与Spring框架的整合** DWR是一款开源的Java库,它允许在浏览器和服务器之间进行动态、实时的双向通信,实现了JavaScript与Java之间的远程调用。Spring则是一个广泛使用的Java企业级...
提供的文档“dwr与spring.doc”和“dwr与struts2.doc”可能详细阐述了整合过程和最佳实践,而“一个小例子.txt”可能包含了一个实际整合示例,帮助读者更好地理解整合步骤和实现方式。学习并掌握这些知识对于提升...
该示例资源主要解决如下两个问题,其一就是解决SpringBoot集成DWR3.0.2-RELEASE版本,无配置文件快速简洁完成集成工作,省去dwr.xml等DWR框架初始化需要的配置文件;其二就是解决了集成后的SpringBoot项目在开发环境...
**Spring与DWR整合详解** 在Java Web开发中,Spring框架和Direct Web Remoting (DWR) 是两个非常重要的工具。Spring提供了强大的依赖注入、事务管理以及AOP(面向切面编程)等功能,而DWR则允许在浏览器端直接调用...
jar包,官方版本,自测可用
**Struts2与DWR整合步骤** 1. **添加依赖**:首先,需要在项目中引入Struts2和DWR的JAR包。这些JAR包可能包含在你提供的压缩包中,如`dwr.jar`和其他相关的Struts2依赖。 2. **配置Struts2**:在`struts.xml`配置...
在本示例中,我们将探讨如何将DWR与SSM框架整合,实现更丰富的前端交互功能。 **Spring框架** 是一个全面的后端应用程序框架,提供了依赖注入、AOP(面向切面编程)、事务管理等功能。在SSM整合中,Spring作为核心...
本资料集合将详细介绍如何将DWR与Spring进行整合,以实现更高效、更灵活的后台与前端通信。 DWR是一款开源的JavaScript库,它允许Java方法直接在浏览器中调用,从而实现Ajax(异步JavaScript和XML)功能。DWR提供了...
Spring还通过Spring MVC和Spring Web Flow支持Web应用的开发,与DWR整合可以实现更高效、更灵活的前端与后端交互。 **三、DWR与Spring整合** 1. **配置DWR** 在Spring项目中使用DWR,首先需要在`web.xml`中配置DWR...
### DWR与Spring框架整合详解 #### 一、引言 Direct Web Remoting(DWR)是一种用于在浏览器端和服务器端之间进行直接调用的技术,它使得JavaScript能够像调用本地函数一样调用服务器端的Java方法。而Spring框架是...
总结,Spring+Dwr+Hibernate的整合项目提供了一种高效的方式,用于开发具备实时交互特性的Web应用。通过Spring的管理能力、Hibernate的ORM功能以及DWR的双向通信支持,开发者可以构建出高性能、易于维护的企业级应用...
【标题】"dwr与ssh框架整合源码"所涉及的知识点主要集中在Web开发领域,特别是Java后端技术栈的应用。DWR(Direct Web Remoting)是一个开源的Java库,它使得JavaScript可以与服务器端的Java对象直接交互,实现动态...
EXT-DWR-SPRING整合详细...整合后的应用能够通过Ext JS丰富的组件提供友好的用户界面,通过DWR实现浏览器端与服务器端的无缝交互,以及利用Spring框架强大的服务支持和依赖注入功能,来管理和组织应用中的各个组件。
dwr+springmvc整合的方式三,使用maven构建,maven中使用jetty插件运行项目,使用assembly打包成zip包,zip包括项目和所有使用的jar包。如何没有网络的情况下可以直接使用jar来联系,有网络就直接使用maven就可以...
《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是《基于J2EE的Ajax宝典》的第二版。《基于J2EE的Ajax宝典》面市近2年,作为Ajax领域最全面、实用的图书,一直深受读者的好评。全书主要分为三个...
dwr+springmvc整合的方式一,使用maven构建,maven中使用jetty插件运行项目,使用assembly打包成zip包,zip包括项目和所有使用的jar包。如何没有网络的情况下可以直接使用jar来联系,有网络就直接使用maven就可以...
**整合ExtJS和DWR** 的主要目标是实现前端UI与后端业务逻辑的无缝对接。以下是一些整合的关键步骤: 1. **安装和配置DWR**: 首先,你需要在服务器端集成DWR。这通常涉及在项目中添加DWR的jar包,配置web.xml文件,...
**DWR整合Spring MVC**是将Direct Web Remoting (DWR)框架与Spring MVC结合使用,以实现前端JSP页面直接调用后端Java方法的功能。这种整合方式极大地提高了Web应用的交互性和实时性,降低了数据传输的复杂性。本文将...
Spring 和 Direct Web Remoting (DWR) 的整合是将 Spring 框架的依赖注入和控制反转特性与 DWR 的动态 Web 接口相结合,从而实现客户端 JavaScript 和服务器端 Java 代码之间的无缝交互。这种整合使得开发人员可以...
### SSH与DWR框架整合详解 #### 一、概述 SSH与DWR框架整合是指将Struts、Spring、Hibernate(通常简称为SSH)这三种框架与DWR框架进行结合使用的过程。这种整合使得Web应用程序能够更好地支持AJAX技术,提高用户...