一个0后IT之路 2012-05-22
Fuse ESB Enterprise 使用Felix 实现的OSGi Configuration Admin service来管理OSGi Services;Fuse ESB
Enterprise默认采用键值对方式配置在InstallDir/etc目录下面的.cfg文件中。
1. 系统配置
etc/system.properties,etc/config.properties
2. JAAS安全
(1) 配置文件
InstallDir/etc/users.properties
(2) JAAS控制台命令
以jaas:*开头,具体命令那个用法可通过jaas:realms --help命令查看。
A. 查看容器中现有的Realm:
FuseESB:karaf@root> jaas:realms
IndexRealmModuleClass
1 karaf org.apache.karaf.jaas.modules.properties.PropertiesLoginModuleB. 修改Standalone Container User Data
FuseESB:karaf@root> jaas:manage --index 1
FuseESB:karaf@root> jaas:manage --realm karaf
C. 添加一个新的用户至JAAS Realm:
karaf@root> jaas:useradd jdoe secret #添加用户jdoe,密码secret
karaf@root> jaas:roleadd jdoe admin #给用户jdoe添加角色admin
karaf@root> jaas:pending # 查看将要添加的内容
karaf@root> jaas:update # 让添加的内容生效
karaf@root> jaas:cancel # 取消将要添加的内容
3. JMX配置
配置文件:org.apache.karaf.management.cfg
针对Standalone容器,默认的JMX用户名和密码是smx/smx; 针对Fabric容器,默认的JMX用户名和密码是
admin/admin.
4. JBI组件Thread Pool配置
(1) 组件配置文件:将下面模式匹配
etc/org.apache.servicemix.components.ComponentName.cfg
(2) 可参考:org.apache.servicemix.jbi.cfg,org.apache.servicemix.nmr.cfg
3. 热部署配置
Fuse ESB Enterprise 默认热部署安装目录下的deploy文件夹中的组件,也可以通过/etc/org.apache.felix
.fileinstall- deploy.cfg配置文件配置其他的热部署目录。
4. 使用config控制台命令
(1) 列出当前Fuse ESB 内核中所有已经加载的配置:config:list
(2) 修改一个配置,按照下面顺序执行:
1. config:edit PID
2. 显示该PID可用的配置选项:config:proplist
3. 编辑一个属性:config:propset property value
4. 将编辑的结果写入配置文件:config:update
5. 取消本次的编辑结果:config:cancel
5. 日志配置
Fuse Enterprise ESB默认使用OPS4J Pax Logging 系统,支持一下日志API;
Apache Log4j, Apache Common Logging,SLF4J, Java Util Logging.
(1) 配置文件:org.ops4j.pax.logging.cfg,org.apache.karaf.log.cfg,system.properties
A. org.ops4j.pax.logging.cfg
使用标准的Log4j设置root logger 级别为INFO,并且定义了两个Appender,一个用于Console,一个用于日志文件。
默认启用日志文件,要启用控制台日志输出,可在该文件中添加:
log4j.appender.stdout.append=true
B. org.apache.karaf.log.cfg
配置ESB控制台命令输出的形式。
C. system.properties
配置在OSGi容器启动时间内当日志服务不可用时的日志级别,默认为ERROR.
org.ops4j.pax.logging.DefaultServiceLog.level=ERROR
(2) 为每个Bundle记录日志,可做如下配置:
Root Loger增加sift属性,如:
# Root logger log4j.rootLogger=INFO, out, sift, osgi:VmLogAppender
重启容器后,每个Bundle的日志位于:
data/log/BundleName.log
(3) 日志命令:
显示最近的日志:log:display
显示最近的异常日志:log:display-exception
获取当前的日志级别:log:get
设置日志的级别:log:set
继续显示日志:log:tail
清空日志:log:clear
(4) Logging per Application
需要使用Mapped Diagnostic Context (MDC) logging,这样可以给每个应用程序设置一个Log File.
但是当前支持MDC的只有log4j和sl4j.MDC日志的原理就是让日志信息与每个特定的应用上下文关联,即通过
兼职对的集合进行,那么就需要给每个应用程序定义一个key,在程序运行期间,可以使用该key去记录每个应
用程序对应的日志文件中。
第一步:给应用程序添加静态的方法调用:
// Java org.slf4j.MDC.put("app.name","MyFooApp");
或
// Java org.apache.log4j.MDC.put("app.name","MyFooApp");
第二步:编辑etc/org.ops4j.pax.logging.cfg文件,添加sift Appender:
# Sift appender
...
log4j.appender.sift.key=app.name
log4j.appender.sift.appender.file=${karaf.data}/log/$\\{app.name\\}.log......
6. 链接Fuse Maven Repository的Maven配置
<profiles> <profile> <id>my-profile</id> <activation> <activeByDefault>true</activeByDefault> </activation> <repositories> <repository> <id>fusesource</id> <url>http://repo.fusesource.com/nexus/content/groups/public/</url> <snapshots> <enabled>false</enabled> </snapshots> <releases> <enabled>true</enabled> </releases> </repository> <repository> <id>fusesource.snapshot</id> <url>http://repo.fusesource.com/nexus/content/groups/public-snapshots/ </url> <snapshots> <enabled>true</enabled> </snapshots> <releases> <enabled>false</enabled> </releases> </repository> <repository> <id>apache-public</id> <url>https://repository.apache.org/content/groups/public/</url> <snapshots> <enabled>true</enabled> </snapshots> <releases> <enabled>true</enabled> </releases> </repository> </repositories> </profile> </profiles>