这些技术之间的核心架构差异是什么?
另外,哪些用例通常更适合每种用例?
我的理解是,Google不喜欢Oracle在Java ME中使用JRE的许可政策,所以它只是使用自己的JVM规范重写它,模仿 JRE但行为有点不同,特别是在提高效率和更安全.
因此,如果我的理解是正确的,那意味着当javac在某些Java源代码上运行并编译成"二进制"byetcode时,兼容的JVM将解释与Dalvik不同的字节码(在某些情况下).这是Dalvik与其他(兼容)JVM之间的固有差异.
如果我到目前为止所说的任何内容都不正确,请先纠正我!
现在,如果Android带有自己的编译器(它可能),并以不同的(Dalvik兼容)方式编译Java源代码javac,那么我可以理解一些代码(不是用Android SDK编译)不会运行Android设备:
MySource.java --> javac --> MySource.class (JRE-compliant) --> JVM --> running Java app
MySource.java --> android-compiler --> MySource.class (Dalvik-compliant) --> Dalvik JVM --> running Android app
Run Code Online (Sandbox Code Playgroud)
但是,它看起来像你javac用来编译Android应用程序!?!?所以看起来我们有这个:
MySource.java --> javac --> MySource.class (JRE-compliant) --> JVM --> running Java app
MySource.java --> javac --> MySource.class (JRE-compliant) --> Dalvik JVM --> running Android app (???)
Run Code Online (Sandbox Code Playgroud)
如果javac用于将所有源代码编译为字节码,那为什么Dalvik无法运行某些类型的Java代码呢?
昨天我问了一个非常相似的问题,虽然它在技术上得到了解答(在重新阅读我的问题之后,我发现我根本不够具体)没有人能够解释Dalvik固有的是什么使得无法运行Java代码来自Google Guice或Apache Camel等项目.有人告诉我,为了让Camel在Dalvik上运行,我必须得到Camel的源代码然后它必须"使用Android SDK构建",但我无法明确这意味着什么或暗示.
以Camel为例,你有这个(简化):
RouteBuilder.java --> javac --> RouteBuilder.class --> …Run Code Online (Sandbox Code Playgroud) 是否有人使用Karaf而不是Servicemix?如果是这样,你是怎么做出这个决定的?我知道Servicemix在Karaf附近添加了一层功能,只是好奇Karaf是否自己使用以及为什么......
我正在使用SVN 1.6.3和TortoiseSVN 1.6.6.定期从项目的根目录进行更新时,SVN无法获取新添加的目录(由同事添加).我已经验证了修订号是否正确,甚至可以在该修订的日志中看到新目录(及其文件).这似乎不会影响所有计算机(在另一台计算机上工作正常),多次更新将无法纠正它.但是,如果我删除上面这个新目录所在的目录并进行另一个SVN更新......问题就解决了.
我的第一个想法是,它是一个已经通过后续SVN版本(1.6.6等)解决的问题,或者是我的TortoiseSVN客户端版本的问题.谁能确认/否认其中任何一个?是否可以轻松升级到具有现有存储库的新SVN版本?
谢谢...
我正在尝试确定用于集群化ServiceMix 3.3.1/Camel 2.1/AMQ 5.3应用程序的选项.我正在执行高容量消息处理,我需要集群以实现高可用性和水平可伸缩性.
这基本上就是我的应用程序所做的... HTTP-> QUEUE-> PROCESS-> DATABASE-> TOPIC
从( "码头:http://0.0.0.0/inbound ").要(" ActiveMQ的:inboundQueue");
from("activemq:inboundQueue?maxConcurrentConsumers = 50").process(decode()).process(transform()).process(validate()).process(saveToDatabase()).to("activemq:topic:ouboundTopic" );
所以,我已经阅读了所有ServiceMix和AcitveMQ集群页面,但我仍然不确定要走哪条路.
我知道我可以使用HA的主/从设置,但这对可伸缩性没有帮助.
我读过有关经纪人的网络,但我不确定这是如何适用的.例如,如果我在群集中的多个节点上部署相同的Camel路由,它们将如何"完全"交互?如果我将HTTP生成器指向一个节点(NodeA),哪些消息将被发送到NodeB?是否在节点A/B之间共享队列/主题...如果是,如何分割或复制消息?另外,外部客户端如何准确地订阅我的"outboundTopic"(并获取所有消息等)?
或者,我一直在想我应该在多个ServiceMix实例之间共享代理.那将是更清洁的,因为只需要管理一组队列/主题,我可以通过添加更多实例来扩展.但是,现在我受限于单个经纪人的可扩展性,我又回到了单点故障......
如果有人能为我澄清权衡......我会很感激.
我在经纪人集群的ActiveMQ网络(也称为分布式主题)上有一个JMS主题.我有一个外部JMS使用者(Weblogic门户网站)需要订阅此主题并获取发送给它的所有消息(跨所有代理).
如果消费者在其中一个代理上订阅该主题,它只会获得代理收到的消息子集,对吗?
我想我可以为每个代理创建一个消费者并将消息聚合在一起,但是我也处理连接问题并且需要知道哪些代理可用等等.
问题,有没有办法配置代理网络或消费者从分布式JMS主题获取所有消息?
我有一个OSGi包,它使用bundle-context.xml文件来初始化bean.
<bean id="myBean" class="test.MyClass">
<property name="output" value="test"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
我有一个需要获取bean实例的工厂类.在非OSGI世界中,我总是只需要以下内容来初始化上下文并获取bean的句柄...
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bundle-context.xml");
MyClass bean = (MyClass) applicationContext.getBean("myBean");
Run Code Online (Sandbox Code Playgroud)
但是,在OSGI(FuseESB 4.2,Servicemix4)中,容器会自动加载bundle-context.xml文件并初始化spring上下文.如果我显式加载上下文(使用上面的代码),则会创建2个上下文(这是不好的).那么,获取相同上下文/ bean的句柄的正确方法是什么?
我们正在使用自定义路由并最终得到一个超过100gb的碎片,我想知道哪个路由值导致了这种不平衡......
我可以看到像这样的碎片......
GET /_cat/shards
my-index 2 p STARTED 10108264 131.5gb
my-index 3 p STARTED 270403 1.7gb
my-index 1 p STARTED 187303 1.5gb
my-index 0 p STARTED 321519 2.5gb
Run Code Online (Sandbox Code Playgroud)
并看到像这样的碎片细节..
GET /my-index/_search_shards
Run Code Online (Sandbox Code Playgroud)
甚至看到像这样的随机文件的分片信息......
GET /my-index/_search
{
"explain": true
}
Run Code Online (Sandbox Code Playgroud)
但是如何在特定分片中搜索文档(在我的情况下是#2的分片)?
编辑:用最新信息更新了这个问题...
我遇到了依赖功能背靠背"功能:卸载"命令的问题.OSGi回应"状态正在改变......",但通过接受其他请求,我们遇到了问题.
奇怪的是,这会导致功能卸载成功,但捆绑卸载失败.我们通过尝试适当地订购卸载请求并在步骤之间添加延迟来解决这个问题,但我希望有一个更强大的解决方案.
正如所建议的那样,我也尝试在步骤之间添加"osgi:refresh"......同样的行为.是否有另一种方法可以检测"刷新包"是否仍在运行以延迟后续请求等?
这是详细信息......
karaf @ root>功能:卸载PolicyUtil
karaf @ root>功能:卸载Policy1
karaf @ root>功能:卸载策略2
通过线程"刷新包"对包"file:/policy2.jar"进行状态更改.
karaf @根>特点:卸载策略3
在捆绑"文件:/policy3.jar"进步状态改变的线程"刷新包".
karaf @ root>功能:卸载Policy4
karaf @ root>功能:卸载Enabler1
通过线程"刷新包"对包"file:/enabler1.jar"进行状态更改.
karaf @ root> features:卸载Enabler2
状态正在通过线程"刷新包"对包"file:/enabler2.jar"进行状态更改.
之后...我们最终安装了未安装的功能(正确),但仍安装了一些软件包(不正确)
OSGi的:列表
[277] [已安装] [] [] [60] Policy2
[278] [已安装] [] [] [60] Policy3
[280] [已安装] [] [] [60] Enabler1
[281] [已安装] [] [] [60]启动器2
特点:列表
[uninstalled] [1.0] PolicyUtil repo-0
[uninstalled] [1.0] Policy1 repo-0
[uninstalled] [1.0] Policy2 repo-0
[uninstalled] [1.0] Policy3 repo-0
[uninstalled] [1.0] Enabler1 repo-0
[uninstalled] [1.0] Enabler2 repo-0
我有一个问题,并且不知道如何使用驼峰来解决它.我在骆驼文档中搜索了相关的EIP,但没有结果.
现在我有简单的路线:
<route id="routeId">
<from uri="Source1"/>
<from uri="Source2"/>
<to uri="Destination"/>
</route>
Run Code Online (Sandbox Code Playgroud)
两个源都将JMS消息发送到Destination,并且在Source完成其作业时,它会发送特定的结束消息,并带有一些标志.我需要做的是收集或计算这些结束消息,并在收到来自两个来源的最终消息时将单端消息发送到目的地.只有当我收到两个结束消息时(想象它只是简单的消息带有一些标题标志)然后我应该将单个消息发送到目的地.
对不起,如果问题解释不够清楚.
提前致谢.
我想知道是否有办法让Camel做我需要的,如下所示:
"定期从某些来源读取数据(假设是一个文件),对其进行一些处理并将其写入其他地方"
我想出了如何做到这一切,减去"周期性"部分.我知道如何使用Quartz或Timer触发路由.但是当我使用那些部分已经被采取所以我不能再改变身体了.
有什么建议?
apache-camel ×3
java ×3
osgi ×3
apache-karaf ×2
fuse ×2
android ×1
apache-felix ×1
dalvik ×1
eip ×1
javac ×1
jms ×1
lucene ×1
search ×1
solr ×1
spring ×1
svn ×1
tortoisesvn ×1