在我们的日志文件中,我们发现以下内容
[2012-09-24 00:09:32.590 +0000UTC] ERROR host server1 [] [] somepackage.someclass [] [Unknown] [V3rAqPaDvvAAAAExEXhdWGyh] [pjsQwTGHzxcAAAE5j4YdGvWV] "ThreadName" Some error happened: java.lang.ArrayIndexOutOfBoundsException: null
Run Code Online (Sandbox Code Playgroud)
只有这一行,没有异常堆栈跟踪.
try发生此异常的块是执行使用javassist创建的动态生成的Java字节码.
我想知道两件事:
java.lang.ArrayIndexOutOfBoundsException日期nulllogger.error("message", theException)在catch块内部使用日志挂钩调用,这通常会导致在日志文件中打印完整的堆栈跟踪.我的问题:
什么样的代码可以导致日志输出"java.lang.ArrayIndexOutOfBoundsException:null".我尝试用没有运气的测试程序重现这个.我总是得到像"java.lang.ArrayIndexOutOfBoundsException:Index:3"或类似的东西.
丢失堆栈跟踪的原因可能是此代码是在运行时动态生成的,因此logger/JVM不会"知道"堆栈跟踪或相关的行号吗?
我们目前正在调试和调查以获取更多信息,但也许这听起来很熟悉.
我目前正在无头模式下使用PDE构建来构建我的OSGI Bundle项目.PDE Antrunner任务使用Eclipse安装,我只是指向我的本地Eclipse安装.
不幸的是,我的eclipse安装大约260MB,但我认为PDE版本不需要在标准的eclipse安装中使用所有这些插件.
现在有人做了无头PDE构建所需的最小插件列表吗?我在自定义目标平台文件夹中实际拥有的所有依赖项,所以我想我在eclipse安装中唯一需要的是PDE构建实际需要的依赖项.但是那些是什么?我可以将安装缩小到最低限度吗?
我的目标是在我的项目的SVN中签入这个"build-eclipse"文件夹,这样当你检查它时,你就拥有了启动完整构建所需的一切,而不需要触及任何build.properties.但是如果我可能只需要20MB的话,我不想提供266MB的日食.
谢谢Christoph
我刚刚开始使用Equinox和Eclipse PDE的OSGI和声明服务(DS).
我有2个Bundle,A和B. Bundle A公开了Bundle B使用的组件.这两个bundle也将这个服务再次公开给OSGI Service注册表.
到目前为止,一切正常,Equinox将组件连接在一起,这意味着Bundle A和Bundle B由Equinox实现(通过调用默认构造函数),然后使用bind/unbind方法进行连线.
现在,由于Equinox正在创建这些组件/服务的实例,我想知道获取此实例的最佳方法是什么?
所以假设有第三个类没有被OSGI实例化:
Class WantsToUseComponentB{
public void doSomethingWithComponentB(){
// how do I get componentB??? Something like this maybe?
ComponentB component = (ComponentB)someComponentRegistry.getComponent(ComponentB.class.getName());
}
我现在看到以下选项:
1.使用Activator中的ServiceTracker来获取ComponentBundleA.class.getName()的服务(我已经尝试了它并且它可以工作,但对我来说似乎有很多开销)并通过静态工厂方法使其可用
public class Activator{
private static ServiceTracker componentBServiceTracker;
public void start(BundleContext context){
componentBServiceTracker = new ServiceTracker(context, ComponentB.class.getName(),null);
}
public static ComponentB getComponentB(){
return (ComponentB)componentBServiceTracker.getService();
};
}
2.创建某种注册表,其中每个组件在调用activate()方法后立即注册.
public ComponentB{
public void bind(ComponentA componentA){
someRegistry.registerComponent(this);
}
要么
public ComponentB{
public void activate(ComponentContext context){
someRegistry.registerComponent(this); … 我需要在基于java的web应用程序(使用jasypt)中加密用户输入的数据,该数据库持久存储在MySQL数据库中,我希望能够定期更改加密密钥/密码短语(例如90天).该应用程序位于Web上的服务器上.
现有的已加密数据需要使用新密钥重新加密,但为了做到这一点,它当然需要旧密钥.
我希望没有单一的答案,但我想得到一些提示,指针和流行语来调查正确的方向.
我目前正在基于hibernate的应用程序中进行性能和内存调整,以进行大批量/批量导入.我们基本上导入一个带有产品数据的CSV文件,其中一些产品是新的(插入),一些是存在的(更新).
我现在的重点是选择一个策略来找出要更新的实体和要插入的实体,而不对CSV文件中的每一行进行检查(选择是否存在).
我目前的做法是这样的:
这种方法效果很好,并且测试证明它比每行进行这样一次IF EXISTS检查的速度快.
如果数据库中有很多实体,我关心的是内存大小.
现在我考虑使用上述方法的略微变化,我想知道意见.基本上我想做的是用多行进行多批IF EXISTS检查(例如SELECT FROM table where sku IN (sku1, sku2, sku3))
这是一些伪代码:
1. Database contains: db{sku1, sku2,sku3,sku5}
2. file contains: file {sku1, sku2, sku3, sku6}
3. Expected result:
updates: {sku1, sku2, sku3}
inserts{sku6}
4. Algorithm
have a map to keep database entities which need updates
updatemap {}
now iterate over the file in e.g. batches of 2 rows (for demo purposes)
1st iteration: foreach (select where sku IN (sku1, sku2) limit …Run Code Online (Sandbox Code Playgroud) 我从 Grails 开始,想要一个包含多语言内容的页面。
我开始使用工作正常的标签。但这是我想做的:
我想在文本中包含默认语言的默认文本,以避免在文件之间来回切换。
<g:message code="homepage.feature.headline1" default="This is an english text" />
Run Code Online (Sandbox Code Playgroud)
以上有效。
但现在我收到一条消息,其中应包含如下链接:
<g:message code="homepage.feature.headline1" default="This is an english text with <a href='somefile.html'>a link</a>" />
Run Code Online (Sandbox Code Playgroud)
这给了我一个例外:
org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException: Error processing GroovyPageView: Grails tags were not closed! [[<g:message>]] in GSP
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现在那里添加链接?我尝试过转义 <> 括号,但仍然没有成功。我真的很想避免将这一个句子分成多个较小的句子。
谢谢克里斯托夫
我有一个问题,真的是这个问题,所以我试着举个例子:
以下代码工作并创建预期输出:分隔文件,其中每列由"实际"选项卡分隔.
CSV.open(@targetfile, "wb", "\t") { |csv|
csv << ["row", "of", "CSV", " }
Run Code Online (Sandbox Code Playgroud)
以下代码不会产生预期的输出.
CSV.open(@targetfile, "wb", @targetdelimiter) { |csv|
csv << ["row", "of", "CSV", "data"] }
Run Code Online (Sandbox Code Playgroud)
@targetdelimiter在这种情况下,它来自数据库,实际上是'\t'可以由用户配置的字符串(不带引号).
此代码也产生分隔输出,但我可以看到'\t'而不是"真正的"制表符.
我可以用第二个代码块来获得与@targetdelimiter='\t'db中给出的第一个代码块相同的结果?
我目前正在运行一个小型的java类,用于在MacOSX Snow Leopard上的Eclipse内部进行科学计算(内部创建大量集合).我有一个带2GB内存的Macbook并且在没有OutOfMemory错误的情况下成功运行应用程序我需要使用-Xmx1200m从eclipse运行它(我知道这非常多).
我需要大约500秒来完成我需要运行的所有计算,它也耗尽了我给它的所有内存(我使用macosx进度监视器进行监视,对于Real Mem,它会达到1,2GB)
完成此应用程序后,我的MacOSX几乎无法使用.即使我关闭Eclipse,一切都变得缓慢而缓慢.我还注意到,无论我事后做什么(甚至在关闭Eclipse之后),例如Finder导航都很慢.渲染一些文件夹或更改目录需要很长时间.有时我会重新启动系统以便能够有效地再次工作.
我想了解发生这种情况时后台发生了什么?我的印象是,当一个java类/应用程序运行完毕时,垃圾收集器至少在最后会清理所有内容,我希望其他程序可以再次使用这个内存.但它"感觉"就像一个影响整个系统的内存泄漏,即使Java应用程序不再运行.
我会很感激这方面的任何提示或阅读.
java ×5
bytecode ×1
csv ×1
declarative ×1
eclipse ×1
eclipse-pde ×1
equinox ×1
grails ×1
headless ×1
hibernate ×1
jdbc ×1
logback ×1
logging ×1
memory-leaks ×1
osgi ×1
performance ×1
ruby ×1
security ×1
service ×1
sql ×1
stack-trace ×1