Karaf教程第1部分 安装Karaf与第一个应用
2017-10-10 14:55
337 查看
原文链接:http://blog.csdn.net/wusandi/article/details/78172261
1.1 karaf入门
在这个帖子中,我将编写关于Apache Karaf的一系列帖子。那么什么是Karaf,你为什么对它感兴趣呢?Karaf是基于Equinox或者Felix的OSGi容器。相对于其它优良的容器来说,主要的不同点是karaf带来了优秀的features管理。Karaf的杰出特性:
类似于Bash的完备feature扩展控制台
SSH控制台
从maven仓库部署bundle和feature
易于从命令行创建新的实例
所有这些特性使得开发基于服务器的OSGi应用几乎与常规的Java应用一样容易。部署和管理是我迄今为止见到的比其他应用服务器更好。All this is combined with a small footprint as well of karaf as the resulting applications. 在我看来,这将允许轻量级的开发风格,就像伴随spring应用的灵活性的JavaEE 6一样。
1.2 安装与第一次启动
从Karaf网站下载Karaf 3.0.3提取,用bin/karaf启动
你应该看到欢迎界面:
__ __ ____ / //_/____ __________ _/ __/ / ,< / __ `/ ___/ __ `/ /_ / /| |/ /_/ / / / /_/ / __/ /_/ |_|\__,_/_/ \__,_/_/ Apache Karaf (3.0.3) Hit '<tab>' for a list of available commands and '[cmd] \--help' for help on a specific command. Hit '<ctrl-d>' or 'osgi:shutdown' to shutdown Karaf. karaf@root()> |
1.3 一些方便的命令行
命令 | 描述 |
la | 显示所有安装的bundle |
service:list | 显示活动的OSGi服务。这个列表很长。你可以使用unix管道,类似于"ls | grep admin" |
exports | 显示所有导出的包(package),以及提供这些包的bundle。这有助于找到一个包来自于哪个bundle。 |
feature:list | 显示已经安装的feature和可以安装的feature |
feature:install webconsole | 安装feature(一系列bundle和其他的feature)。使用上面的命令我们安装了Karaf webconsole。它可以通过http://localhost:8181/system/console访问。用karaf/karaf登录,花费一点时间看看它提供了什么。 |
log:tail | 显示日志。使用ctrl-c返回控制台。 |
Ctrl-d | 退出console。如果这是主控制台,那么karaf就会被停止。 |
注意Karaf像所有的osgi容器一样只维护安装的和启动的bundle的最后的状态。所以如果某些功能不再工作,重启是没有用的。为了真正地启动一个新的,要停止karaf,删除data目录。
检查日志
Karaf是非常安静的。为了不错误消息,要一直保持tail -f data/karaf.log打开!!
1.4 任务列表:一个小的osgi应用
Karaf本身是一个很好的但是没有用的容器。所以,让我们创建第一个应用。创建一个OSGi应用是很简单的,maven提提供了很大的帮助。与标准的maven工程的区别很小。为了编写这个应用,我推荐使用安装了m2eclipse插件的Eclipse 4。获取源代码
克隆示例程序:git clone git@github.com:cschneider/Karaf-Tutorial.git
或者
下载示例工程:https://github.com/cschneider/Karaf-Tutorial/zipball/master 并提取到某个目录。
导入到Eclipse
启动Eclipse
在Eclipse Package explorer中:Import -> Existing maven project -> Browse,选择提取的目录的tasklist子目录。
Eclipse会显示所有的maven工程
点击through to import with defaults
Eclipse现在会导入工程,并用m2eclipse导入所有的依赖。
tasklist示例包含三个工程
Module | 描述 |
tasklist-model | 服务接口和任务类 |
tasklist-persistence | 简单的持久实现,提供了TaskService |
tasklist-ui | Servlet,使用TaskService显示任务列表 |
tasklist-features | 应用的Feature描述,这样在Karaf中安装会很容易 |
1.4.1 Tasklist-persistence工程
这个工程包含了内部的模型和服务实现。这个模型是Task类和TaskService接口。持久实现TaskServiceImpl在简单的HashMap中管理任务。使用blueprint上下文将TaskService作为一个OSGi服务发布。Blueprint是OSGi依赖注入的标准,非常类似于spring上下文。<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"> <bean id="taskService" class="net.lr.tasklist.persistence.impl.TaskServiceImpl" /> <service ref="taskService" interface="net.lr.tasklist.model.TaskService" /> </blueprint> |
Pom.xml用于打包bundle,maven-bundle-plugin插件使用OSGi的Manifest文件创建了jar包。默认情况下,这个插件导入了在Java文件导入的或者blueprint上下文引用的所有的包(package)。它也导出除了字符串实现和内部之外所有的包。在我们的示例中,我们想要导入模型的包,但不导入持久实现的包。由于使用了命名惯例,我们不需要额外的配置。
1.4.2 Tasklist-ui
这个ui工程包含了一个TaskServlet类,用于显示任务列表和独立的任务。要与Task一起工作,servlet需要TaskService。为了注入TaskService和发布servlet,使用下面的blueprint上下文。
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"> <reference id="taskService" availability="mandatory" interface="net.lr.tasklist.model.TaskService" /> <bean id="taskServlet" class="net.lr.tasklist.ui.TaskListServlet"> <property name="taskService" ref="taskService"></property> </bean> <service ref="taskServlet" interface="javax.servlet.http.HttpServlet"> <service-properties> <entry key="alias" value="/tasklist" /> </service-properties> </service> </blueprint> |
bean taskServlet实例化了servlet类,并被注入了taskService。
Service标签将servlet作为OSGi服务以HttpServlet 接口发布,并设置了别名。
这种发布servlet的方式还没有标准化,但是已经被pax web whiteboard extender支持了。这个extender使用HttpServlet接口和OSGi的http服务注册每一个服务。它使用alias属性设置访问servlet的路径。
参阅:http://wiki.ops4j.org/display/paxweb/Whiteboard+Extender
1.4.3 Tasklist-features
最后一个工程只是将feature描述安装到maven仓库,这样我们在Karaf中就可以很容易地安装它。这个描述定义了一个名为tasklist的feature以及要从maven仓库安装的bundle。<feature name="example-tasklist" version="${pom.version}"> <feature>example-tasklist-persistence</feature> <feature>example-tasklist-ui</feature> </feature> <feature name="example-tasklist-persistence" version="${pom.version}"> <bundle>mvn:net.lr.tasklist/tasklist-model/${pom.version}</bundle> <bundle>mvn:net.lr.tasklist/tasklist-persistence/${pom.version}</bundle> </feature> <feature name="example-tasklist-ui" version="${pom.version}"> <feature>http</feature> <feature>http-whiteboard</feature> <bundle>mvn:net.lr.tasklist/tasklist-model/${pom.version}</bundle> <bundle>mvn:net.lr.tasklist/tasklist-ui/${pom.version}</bundle> </feature> |
1.5 在Karaf中安装应用
feature:repo-add mvn:net.lr.tasklist/tasklist-features/1.0.0-SNAPSHOT/xml feature:install example-tasklist-persistence example-tasklist-ui |
list |
http:list ID | Servlet | Servlet-Name | State | Alias | Url ------------------------------------------------------------------------------- 56 | TaskListServlet | ServletModel-2 | Deployed | /tasklist | [/tasklist/*] |
你可以创建一个文本文件来改变这个端口,即"etc/org.ops4j.pax.web.cfg",文件的内容是"org.osgi.service.http.port=8080"。这将告诉HttpService使用端口8080。现在tasklist应用就可以通过http://localhost:8080/tasklist访问了。
1.6 总结
在这个教程中,我们安装了Karaf,学习了一些命令行。然后我们创建了一个小的 OSGi应用,该应用演示了servlet,OSGi服务,blueprint和白板模式。在下一个教程中,我们看看如何在OSGi中使用Apache Camel和Apache CXF。
相关文章推荐
- Karaf教程第1部分 安装Karaf与第一个应用
- 编写你的第一个Django应用, 第二部分 - Django 1.11 教程
- 编写你的第一个Django应用, 第三部分 - Django 1.11 教程
- django 1.8 官方文档翻译: 1-2-1 编写你的第一个Django应用,第1部分
- Karaf教程之安装和应用开发
- Apache Axis初级教程---安装、应用
- Discuz!教程之应用中心安装插件提示“数据下载错误(105)”的解决办法
- 区块链侧链应用开发平台Asch节点安装及区块生产教程
- [转]WML教程1:从第一个实际应用全面了解WML
- linux使用-第一个应用,网盘的安装
- 开发你的第一个LYNC应用-第二部分
- Apache Axis初级教程---安装、应用<转>
- 解决部分机型 appium 安装应用时需要手动确认的问题
- Yii Framework 开发教程(1) 第一个应用Hello World
- Karaf教程第8部分-分布式OSGi
- PySide教程:第一个PySide应用
- Android应用签名命令后提示您的应用签名算法采用“SHA256withRSA”,在部分4.2一下安卓版本的手机上不能安装的解决方案
- Android应用安装部分手机出现INSTALL_PARSE_FAILED_NO_CERTIFICATES的问题
- django实例:创建你的第一个应用投票系统(2)数据库的安装
- django 1.8 官方文档翻译: 1-2-2 编写你的第一个Django应用,第2部分