小编mik*_*wse的帖子

OSGI JNDI是否允许与来自非OSGI代码的JNDI调用共存?

OSGI企业版第5版规范第126章提到了兼容性:

"支持Java SE和Java EE客户端使用的传统JNDI编程模型."

和使用OSGI不知道的代码:

"不知道OSGi的客户端和JNDI上下文提供程序使用静态方法连接到JRE JNDI实现.InitialContext类提供从提供程序访问上下文,提供程序使用静态NamingManager方法进行对象转换并查找URL上下文.传统模型不了解OSGi,因此只有在管理这种缺乏OSGi意识的后果时才能可靠地使用它."

但是我不清楚这个文本是仅适用于在OSGI包内执行的"遗留"代码,还是OSGI容器外部的代码,在OSGI容器嵌入应用程序的情况下.

在嵌入方案中,OSGI容器外部和内部可能存在执行JNDI调用的应用程序代码,并且当它们在同一JVM中执行时,它们将共享JNDI实现.

问题:在嵌入式OSGI容器中运行的OSGI JNDI实现是否允许容器外部的OSGI无意识代码像往常一样执行其JNDI调用,或者是否需要移植到"OSGI-awareness"?

使用Apache Karaf 2.3.0(使用Apache Aries JNDI 1.0.0)自己尝试这个似乎不起作用,因为Apache Aries需要JNDI客户端调用来自OSGI包.
部分堆栈跟踪:

javax.naming.NoInitialContextException: The calling code's BundleContext could not be determined.
    at org.apache.aries.jndi.OSGiInitialContextFactoryBuilder.getInitialContext(OSGiInitialContextFactoryBuilder.java:46)
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
    at javax.naming.InitialContext.init(InitialContext.java:242)
    at javax.naming.InitialContext.<init>(InitialContext.java:192)
Run Code Online (Sandbox Code Playgroud)

问题:这是正确的行为,还是我可以参考的规范中有一部分违反了此限制?

java osgi jndi apache-karaf aries

14
推荐指数
1
解决办法
2559
查看次数

从Java内部测量各个方法的性能的确切方法?

我想测量一组单元测试的执行时间,以便能够在进行更改时自动监视和比较性能.是否有任何合适的性能计数器可以从Java本身轻松访问?即,类似于:

count1 = <call performance counter func>
executeUnitTest();
count2 = <call performance counter func>
testPerformance = count2 - count1;
Run Code Online (Sandbox Code Playgroud)

满足这些额外要求:

  • 即使测试运行器在虚拟客户操作系统中运行,也会给出与系统负载无关的相同答案(由于主机上的负载变化,这似乎取消了nanoTime()和朋友,甚至当前线程的CPU时间)
  • 给出相同的答案,与运行的硬件无关(计算执行的字节码指令数量非常好!)
  • 理想情况下,可以将GC执行计数与实际方法执行分开(如果GC在线程中完成)

java performance

6
推荐指数
1
解决办法
304
查看次数

标签 统计

java ×2

apache-karaf ×1

aries ×1

jndi ×1

osgi ×1

performance ×1