- 浏览: 1149152 次
- 性别:
- 来自: 火星郊区
博客专栏
-
OSGi
浏览量:0
文章分类
- 全部博客 (695)
- 项目管理 (48)
- OSGi (122)
- java (79)
- Vaadin (5)
- RAP (47)
- mysql (40)
- Maven (22)
- SVN (8)
- 孔雀鱼 (10)
- hibernate (9)
- spring (10)
- css (3)
- 年审 (6)
- ant (1)
- jdbc (3)
- FusionCharts (2)
- struts (4)
- 决策分析 (2)
- 生活 (10)
- 架构设计 (5)
- 破解 (2)
- 狼文化 (4)
- JVM (14)
- J2EE (1)
- 应用服务器 (1)
- 我的链接 (5)
- 数学 (2)
- 报表 (1)
- 百科 (6)
- Flex (7)
- log4j (2)
- PHP (1)
- 系统 (2)
- Web前端 (7)
- linux (6)
- Office (1)
- 安全管理 (5)
- python (2)
- dom4j (1)
- 工作流 (3)
- 养生保健 (4)
- Eclipse (8)
- 监控开发 (1)
- 设计 (3)
- CAS (1)
- ZK (41)
- BluePrint (3)
- 工具 (1)
- SWT (7)
- google (2)
- NIO (1)
- 企业文化 (2)
- Windoes (0)
- RCP (7)
- JavaScript (10)
- UML (1)
- 产品经理 (2)
- Velocity (10)
- C (1)
- 单元测试 (1)
- 设计模式 (2)
- 系统分析师 (2)
- 架构 (4)
- 面试 (2)
- 代码走查 (1)
- MongoDB (1)
- 企业流程优化 (1)
- 模式 (1)
- EJB (1)
- Jetty (1)
- Git (13)
- IPV6 (1)
- JQuery (8)
- SSH (1)
- mybatis (10)
- SiteMesh (2)
- JSTL (1)
- veloctiy (1)
- Spring MVC (1)
- struts2 (3)
- Servlet (1)
- 权限管理 (1)
- Java Mina (1)
- java 系统信息 (6)
- OSGi 基础 (3)
- html (1)
- spring--security (6)
- HTML5 (1)
- java爬虫搜索 (1)
- mvc (3)
最新评论
-
Tom.X:
http://osgia.com/
将web容器置于OSGi框架下进行web应用的开发 -
chenyuguxing:
你好, 为什么我的bundle export到felix工程中 ...
在Apache Felix中运行bundle -
string2020:
<niceManifest>true</ni ...
Bundle Plugin for Maven -
jsonmong:
OSGI,是未来的主流,目前已相当成熟。应用OSGI比较好的, ...
基于OSGi的声明式服务 -
zyhui98:
貌似是翻译过来的,有很少人在linux上做开发吧
如何成为“10倍效率”开发者
1. 按照以下代码改写你自己的Activator (或者将代码中的"/pages"改成你的jsf网页路径):
注意加粗的那段代码(使用当前的class loader来加载jsf的FacesServlet)
package
net.andyluo.singlife.jsf.demo;
import java.io.IOException;
import java.util.Dictionary;
import java.util.Hashtable;
import javax.faces.webapp.FacesServlet;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.eclipse.equinox.http.helper.BundleEntryHttpContext;
import org.eclipse.equinox.http.helper.ContextPathServletAdaptor;
import org.eclipse.equinox.jsp.jasper.JspServlet;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.http.HttpContext;
import org.osgi.service.http.HttpService;
import org.osgi.util.tracker.ServiceTracker;
import com.sun.faces.config.ConfigureListener;
public class Activator implements BundleActivator
{
private ServiceTracker httpServiceTracker;
public void start(BundleContext context) throws Exception
{
httpServiceTracker = new HttpServiceTracker(context);
httpServiceTracker.open();
}
public void stop(BundleContext context) throws Exception
{
httpServiceTracker.close();
}
private class HttpServiceTracker extends ServiceTracker
{
private static final String PATH = " /jsf " ;
public HttpServiceTracker(BundleContext context)
{
super (context, HttpService. class .getName(), null );
}
public Object addingService(ServiceReference reference)
{
final HttpService httpService = (HttpService) context
.getService(reference);
try
{
HttpContext commonContext = new BundleEntryHttpContext(context
.getBundle(), " /pages " );
httpService.registerResources(PATH, " / " , commonContext);
JspServlet jspServlet = new JspServlet(context.getBundle(),
" /pages " );
Servlet adaptedJspServlet = new ContextPathServletAdaptor(
jspServlet, PATH);
httpService.registerServlet(PATH + " /*.jsp " , adaptedJspServlet,
null , commonContext);
Dictionary initparams = new Hashtable();
initparams.put( " servlet-name " , " Faces Servlet " );
Servlet adaptedFacesServlet = new ServletContextListenerServletAdaptor(
new ConfigureListener(), new FacesServlet(), jspServlet
.getJspLoader());
adaptedFacesServlet = new ContextPathServletAdaptor(
adaptedFacesServlet, PATH);
httpService.registerServlet(PATH + " /*.jsf " ,
adaptedFacesServlet, initparams, commonContext);
} catch (Exception e)
{
e.printStackTrace();
}
return httpService;
}
public void removedService(ServiceReference reference, Object service)
{
final HttpService httpService = (HttpService) service;
httpService.unregister(PATH); // $NON-NLS-1$
httpService.unregister(PATH + " /*.jsp " ); // $NON-NLS-1$
httpService.unregister(PATH + " /*.jsf " ); // $NON-NLS-1$
super .removedService(reference, service);
}
}
public class ServletContextListenerServletAdaptor implements Servlet
{
private ServletConfig config;
private ServletContextListener listener;
private Servlet delegate;
private ClassLoader jspLoader;
public ServletContextListenerServletAdaptor(
ServletContextListener listener, Servlet delegate,
ClassLoader jspLoader)
{
this .listener = listener;
this .delegate = delegate;
this .jspLoader = jspLoader;
}
public void init(ServletConfig config) throws ServletException
{
this .config = config;
ClassLoader original = Thread.currentThread()
.getContextClassLoader();
try
{
Thread.currentThread().setContextClassLoader(jspLoader);
listener.contextInitialized( new ServletContextEvent(config
.getServletContext()));
delegate.init(config);
} finally
{
Thread.currentThread().setContextClassLoader(original);
}
}
public void service(ServletRequest req, ServletResponse resp)
throws ServletException, IOException
{
ClassLoader original = Thread.currentThread()
.getContextClassLoader();
try
{
Thread.currentThread().setContextClassLoader(jspLoader);
delegate.service(req, resp);
} finally
{
Thread.currentThread().setContextClassLoader(original);
}
}
public void destroy()
{
ClassLoader original = Thread.currentThread()
.getContextClassLoader();
try
{
Thread.currentThread().setContextClassLoader(jspLoader);
delegate.destroy();
listener.contextDestroyed( new ServletContextEvent(config
.getServletContext()));
config = null ;
} finally
{
Thread.currentThread().setContextClassLoader(original);
}
}
public ServletConfig getServletConfig()
{
return config;
}
public String getServletInfo()
{
return "" ;
}
}
}
import java.io.IOException;
import java.util.Dictionary;
import java.util.Hashtable;
import javax.faces.webapp.FacesServlet;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.eclipse.equinox.http.helper.BundleEntryHttpContext;
import org.eclipse.equinox.http.helper.ContextPathServletAdaptor;
import org.eclipse.equinox.jsp.jasper.JspServlet;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.http.HttpContext;
import org.osgi.service.http.HttpService;
import org.osgi.util.tracker.ServiceTracker;
import com.sun.faces.config.ConfigureListener;
public class Activator implements BundleActivator
{
private ServiceTracker httpServiceTracker;
public void start(BundleContext context) throws Exception
{
httpServiceTracker = new HttpServiceTracker(context);
httpServiceTracker.open();
}
public void stop(BundleContext context) throws Exception
{
httpServiceTracker.close();
}
private class HttpServiceTracker extends ServiceTracker
{
private static final String PATH = " /jsf " ;
public HttpServiceTracker(BundleContext context)
{
super (context, HttpService. class .getName(), null );
}
public Object addingService(ServiceReference reference)
{
final HttpService httpService = (HttpService) context
.getService(reference);
try
{
HttpContext commonContext = new BundleEntryHttpContext(context
.getBundle(), " /pages " );
httpService.registerResources(PATH, " / " , commonContext);
JspServlet jspServlet = new JspServlet(context.getBundle(),
" /pages " );
Servlet adaptedJspServlet = new ContextPathServletAdaptor(
jspServlet, PATH);
httpService.registerServlet(PATH + " /*.jsp " , adaptedJspServlet,
null , commonContext);
Dictionary initparams = new Hashtable();
initparams.put( " servlet-name " , " Faces Servlet " );
Servlet adaptedFacesServlet = new ServletContextListenerServletAdaptor(
new ConfigureListener(), new FacesServlet(), jspServlet
.getJspLoader());
adaptedFacesServlet = new ContextPathServletAdaptor(
adaptedFacesServlet, PATH);
httpService.registerServlet(PATH + " /*.jsf " ,
adaptedFacesServlet, initparams, commonContext);
} catch (Exception e)
{
e.printStackTrace();
}
return httpService;
}
public void removedService(ServiceReference reference, Object service)
{
final HttpService httpService = (HttpService) service;
httpService.unregister(PATH); // $NON-NLS-1$
httpService.unregister(PATH + " /*.jsp " ); // $NON-NLS-1$
httpService.unregister(PATH + " /*.jsf " ); // $NON-NLS-1$
super .removedService(reference, service);
}
}
public class ServletContextListenerServletAdaptor implements Servlet
{
private ServletConfig config;
private ServletContextListener listener;
private Servlet delegate;
private ClassLoader jspLoader;
public ServletContextListenerServletAdaptor(
ServletContextListener listener, Servlet delegate,
ClassLoader jspLoader)
{
this .listener = listener;
this .delegate = delegate;
this .jspLoader = jspLoader;
}
public void init(ServletConfig config) throws ServletException
{
this .config = config;
ClassLoader original = Thread.currentThread()
.getContextClassLoader();
try
{
Thread.currentThread().setContextClassLoader(jspLoader);
listener.contextInitialized( new ServletContextEvent(config
.getServletContext()));
delegate.init(config);
} finally
{
Thread.currentThread().setContextClassLoader(original);
}
}
public void service(ServletRequest req, ServletResponse resp)
throws ServletException, IOException
{
ClassLoader original = Thread.currentThread()
.getContextClassLoader();
try
{
Thread.currentThread().setContextClassLoader(jspLoader);
delegate.service(req, resp);
} finally
{
Thread.currentThread().setContextClassLoader(original);
}
}
public void destroy()
{
ClassLoader original = Thread.currentThread()
.getContextClassLoader();
try
{
Thread.currentThread().setContextClassLoader(jspLoader);
delegate.destroy();
listener.contextDestroyed( new ServletContextEvent(config
.getServletContext()));
config = null ;
} finally
{
Thread.currentThread().setContextClassLoader(original);
}
}
public ServletConfig getServletConfig()
{
return config;
}
public String getServletInfo()
{
return "" ;
}
}
}
2. 因为JspServlet中没有返回class
loader的方法,所以我们要更改一下JspServlet的实现代码(hack一下):更改equinox的
org.eclipse.equinox.jsp.jasper_*.jar中的
org.eclipse.equinox.jsp.jasper.JspServlet类:(可以下载JspServlet的源代码,在本地更改编译成功
后将class文件覆盖到org.eclipse.equinox.jsp.jasper_*.jar中)
添加以下方法:
public ClassLoader getJspLoader()
{
return this.jspLoader;
}
如此即可^_^, 其实就是让FacesServlet使用JspServlet的ClassLoader,这样就不会出现"Can't find FacesContext"错误了。
发表评论
-
关于Felix Log Service
2012-12-07 16:44 1567OSGi服务纲要规范中定义了服务于OSGi平台的通用日志服 ... -
Maven 3 Felix 4 Eclipse 的搭建与部署(部分转载自别人文章)
2012-10-18 10:24 20334.1.开发环境搭建 4.2开发工具 Maven 3 F ... -
【绝对路径】OSGi环境中获取Plugin/Bundle中文件资源的绝对路径
2012-10-08 10:53 2492摘要:在进行Eclipse RCP开发的过程中,需要使用一 ... -
OpenCore:基于OSGi开发纯插件体系结构的WEB应用程序
2012-09-21 17:46 1423随着OSGi/Equinox逐渐成为Java EE服务端的基础 ... -
OSGi技术在Java Web开发中的应用
2012-09-20 11:26 1411随着 Java SE 对模块化功能原生支持的一再推迟(据最 ... -
OSGI典型的应用案例
2012-09-20 11:26 1634OSGI典型的应用案例主要有两个:分别是Eclipse和BMW ... -
OSGi特点
2012-09-20 11:26 12491、JRE版本无关性。虽然Java一直被人们认为是“Write ... -
OSGI与JMX 的关系
2012-09-19 17:09 1058不过重点是: JMX 本来设计的用途就只为了管理,我们不 ... -
在equinox环境开发web应用的"利器" -- registerResources()方法 详解
2012-09-19 17:07 1227registerResources()方法详解 1、简介 ... -
在equinox环境开发web应用的"利器" -- 序
2012-09-19 17:05 1363在equinox环境中开发web应用必须要借助一些工具包提供的 ... -
equinox环境下web应用资源的部署
2012-09-19 17:04 1307osgi的equinox实现环境下,web服务器和web应用都 ... -
OSGi产生的背景--在繁荣的混乱之中走出困惑
2012-09-19 16:58 1165软件的复杂性正在以惊 ... -
将web容器置于OSGi框架下进行web应用的开发
2012-09-16 14:26 3539将web容器置于OSGi框架下,其实就是将web容器做成OSG ... -
在Eclipse中开发OSGi Bundle
2012-09-16 14:26 1330Eclipse为开发OSGI Bundle提供了良好的支持,它 ... -
【第一代服务注册形式】 - 将一个Bundle注册为服务
2012-09-14 10:09 11551、创建业务接口类及其实现类 Java代码 ... -
Declarative Services规范简介及应用
2012-09-14 10:08 1421Declarative Services 是一 ... -
用FileInstall管理Bundle的动态安装、启动、卸载
2012-09-14 10:07 13321、文件目录如下: F:\study_osgi ... -
服务工厂 - Bundle消费者返回不同的服务对象
2012-09-14 10:03 1207一般情况下,服务对象在注册后,任何其它的Bundle在请求 ... -
服务跟踪(ServiceTracker)
2012-09-14 09:58 1159当多个Bundle使用同一 ... -
OSGi容器中Bundle之间Synchronous Communication
2012-09-11 17:07 1560OSGi Core定义了一个服务层,提供了一个Bundl ...
相关推荐
2. 集成JSF库:由于JSF本身并不直接支持OSGi,所以需要找到适合OSGi环境的JSF实现,例如Apache MyFaces或PrimeFaces的OSGi版本。 3. 编写JSF组件和应用:根据JSF的MVC模式,编写视图组件、控制器和业务逻辑。在OSGi...
"基于OSGi和Spring开发Web应用" OSGi(Open Service Gateway Initiative)是一种基于Java的服务_gateway_initiative,提供了一种动态模块部署的能力,使得企业级应用可以轻松地升级和维护。Spring是一个著名的轻量...
Web开发是Eclipse支持的一个重要领域,Eclipse中有多个插件和工具来支持Web应用的构建,如Eclipse Web Tools Platform(WTP)。WTP提供了开发J2EE应用所需的各种工具和服务,包括对Servlet、JSP、JSF、Web Services...
今天我们将深入探讨一款名为"tk.eclipse.plugin.jsf_2.0.4"的Eclipse插件,它专为JavaServer Faces(JSF)开发提供支持。 首先,我们要明确JSF是什么。JavaServer Faces(JSF)是Java平台上的一个标准的用户界面...
Eclipse中的Java EE版本包含了Web项目创建向导、内置服务器支持、自动代码完成、以及对JSP、Servlet、JSF等技术的集成,极大地简化了开发流程。 四、创建和运行WAB App 1. **新建项目**:在Eclipse中,选择"File" ...
1. Web开发:通过WTP(Web Tools Platform)插件,Eclipse可以支持Servlet、JSP、JSF等Web开发。 2. Android开发:ADT(Android Developer Tools)插件使Eclipse成为Android应用开发的首选IDE。 3. Spring框架:...
- **GWT**: 支持 GWT(Google Web Toolkit)的应用开发,包括代码提示、编译和组件开发等功能。 - **Hibernate**: 提供 Hibernate 框架的支持,包括代码提示和逆向工程等功能。 - **Java EE:Java Server Faces (JSF)...
- **Web应用开发**:使用Eclipse进行Java EE项目开发,包括动态Web项目、EJB、JSF等。 - **服务器集成**:配置和管理各种应用服务器,如Tomcat、Jetty、WebLogic等。 9. **插件开发** - **OSGi基础**:Eclipse...
- WAS是完整的Java EE服务器,支持整个J2EE规范,而Liberty只支持Web、OSGi和Mobile应用开发。 - Liberty采用动态加载特性包的方式来提供Java EE支持,允许开发者根据需求动态地加载和卸载特定功能。 - Liberty与...
【标题】"myfaces-extcdi-jpa1-module-impl-1.0.6.zip" 涉及的是一款开源项目中的模块实现,主要关注MyFaces扩展CDI(Contexts and...这两个开源项目可以为开发者提供在Java Web开发和OSGi环境下的便利工具和解决方案。
### Maven的41种骨架功能介绍 Maven作为一款强大的构建工具,...无论是Web开发、插件开发还是特定技术栈的应用开发,Maven都能提供相应的支持。这对于提高开发效率、确保代码质量和项目的一致性都有着不可估量的价值。
这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 (12) spring-webmvc.jar 这个...
最后,Eclipse还支持Web应用程序的开发,通过WTP(Web Tools Platform)项目,你可以使用Eclipse进行Java EE项目的开发,包括Servlet、JSP、JSF等技术。WTP提供了服务器配置、项目结构管理、部署工具等功能,是Web...
将这些jar包导入到项目或放置到`lib`文件夹后,开发者可以利用Java EE 6提供的强大功能,如CDI、JSF、JPA等,高效地开发出可扩展、模块化的企业级Web应用。需要注意的是,为了确保项目正常运行,还需要配置合适的...
在IT行业,尤其是Web开发领域,API的应用极为广泛,它们能够帮助开发者高效地构建功能丰富且具有高度互操作性的应用。 ### Java Platform Enterprise Edition (Java EE) Java EE,也称为Jakarta EE,是Sun ...
V6.1作为主要的升级版本,进一步加强了特性,例如支持J2EE 1.2、1.3、1.4规范,采用了JDK 1.4,基于J2EE 1.4标准的Web服务,增加了对JSF(JavaServer Faces)的支持,以及WS-Security和基本配置的支持。此外,还引入...
- **Web和企业开发插件**:如Web Tools Project (WTP) 支持Java EE应用的开发,包括Servlet、JSP、JSF等。 - **Git版本控制**:通常集成有EGit插件,方便开发者进行版本管理和协作。 4. **项目管理** - **项目...