小编Chr*_*oph的帖子

使用NO堆栈跟踪获取"ArrayIndexOutOfBoundsException:null"

在我们的日志文件中,我们发现以下内容

[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字节码.

我想知道两件事:

  1. java.lang.ArrayIndexOutOfBoundsException日期null
  2. 丢失的堆栈跟踪,尽管logger.error("message", theException)catch块内部使用日志挂钩调用,这通常会导致在日志文件中打印完整的堆栈跟踪.

我的问题:

  1. 什么样的代码可以导致日志输出"java.lang.ArrayIndexOutOfBoundsException:null".我尝试用没有运气的测试程序重现这个.我总是得到像"java.lang.ArrayIndexOutOfBoundsException:Index:3"或类似的东西.

  2. 丢失堆栈跟踪的原因可能是此代码是在运行时动态生成的,因此logger/JVM不会"知道"堆栈跟踪或相关的行号吗?

我们目前正在调试和调查以获取更多信息,但也许这听起来很熟悉.

java logging bytecode logback stack-trace

18
推荐指数
2
解决办法
9720
查看次数

Eclipse:无头PDE构建所需的最低Eclipse安装是什么?

我目前正在无头模式下使用PDE构建来构建我的OSGI Bundle项目.PDE Antrunner任务使用Eclipse安装,我只是指向我的本地Eclipse安装.

不幸的是,我的eclipse安装大约260MB,但我认为PDE版本不需要在标准的eclipse安装中使用所有这些插件.

现在有人做了无头PDE构建所需的最小插件列表吗?我在自定义目标平台文件夹中实际拥有的所有依赖项,所以我想我在eclipse安装中唯一需要的是PDE构建实际需要的依赖项.但是那些是什么?我可以将安装缩小到最低限度吗?

我的目标是在我的项目的SVN中签入这个"build-eclipse"文件夹,这样当你检查它时,你就拥有了启动完整构建所需的一切,而不需要触及任何build.properties.但是如果我可能只需要20MB的话,我不想提供266MB的日食.

谢谢Christoph

eclipse eclipse-pde headless

13
推荐指数
2
解决办法
2154
查看次数

OSGI声明服务(DS):使用服务组件实例的好方法是什么

我刚刚开始使用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 service osgi declarative equinox

5
推荐指数
1
解决办法
8399
查看次数

Java Web应用程序的加密/解密/密钥轮换的现有做法是什么?

我需要在基于java的web应用程序(使用jasypt)中加密用户输入的数据,该数据库持久存储在MySQL数据库中,我希望能够定期更改加密密钥/密码短语(例如90天).该应用程序位于Web上的服务器上.

现有的已加密数据需要使用新密钥重新加密,但为了做到这一点,它当然需要旧密钥.

  1. 旋转键有哪些常见做法?
  2. 使加密密钥可用于系统的常用方法有哪些(例如,通过命令行传递的系统属性,加密的属性文件,通过https从另一台服务器下载)

我希望没有单一的答案,但我想得到一些提示,指针和流行语来调查正确的方向.

java security

5
推荐指数
1
解决办法
5157
查看次数

Hibernate Mass Insert/update:这是一个很好的方法吗?

我目前正在基于hibernate的应用程序中进行性能和内存调整,以进行大批量/批量导入.我们基本上导入一个带有产品数据的CSV文件,其中一些产品是新的(插入),一些是存在的(更新).

我现在的重点是选择一个策略来找出要更新的实体和要插入的实体,而不对CSV文件中的每一行进行检查(选择是否存在).

我目前的做法是这样的:

  1. 构建数据库中所有对象的哈希映射.
  2. 迭代CSV并使用hashmap决定是更新还是插入.

这种方法效果很好,并且测试证明它比每行进行这样一次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)

java sql hibernate jdbc

5
推荐指数
1
解决办法
1840
查看次数

Grails:如何在 <g:message> 默认属性中包含 html 链接?

我从 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)

我怎样才能实现在那里添加链接?我尝试过转义 <> 括号,但仍然没有成功。我真的很想避免将这一个句子分成多个较小的句子。

谢谢克里斯托夫

grails internationalization

3
推荐指数
1
解决办法
4268
查看次数

tab-delimiter来自数据库时如何编写制表符分隔文件?

我有一个问题,真的是这个问题,所以我试着举个例子:

以下代码工作并创建预期输出:分隔文件,其中每列由"实际"选项卡分隔.

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中给出的第一个代码块相同的结果?

ruby csv tab-delimited

3
推荐指数
1
解决办法
7510
查看次数

在运行内存密集型Java应用程序后,导致操作系统变慢的原因是什么?

我目前正在运行一个小型的java类,用于在MacOSX Snow Leopard上的Eclipse内部进行科学计算(内部创建大量集合).我有一个带2GB内存的Macbook并且在没有OutOfMemory错误的情况下成功运行应用程序我需要使用-Xmx1200m从eclipse运行它(我知道这非常多).

我需要大约500秒来完成我需要运行的所有计算,它也耗尽了我给它的所有内存(我使用macosx进度监视器进行监视,对于Real Mem,它会达到1,2GB)

完成此应用程序后,我的MacOSX几乎无法使用.即使我关闭Eclipse,一切都变得缓慢而缓慢.我还注意到,无论我事后做什么(甚至在关闭Eclipse之后),例如Finder导航都很慢.渲染一些文件夹或更改目录需要很长时间.有时我会重新启动系统以便能够有效地再次工作.

我想了解发生这种情况时后台发生了什么?我的印象是,当一个java类/应用程序运行完毕时,垃圾收集器至少在最后会清理所有内容,我希望其他程序可以再次使用这个内存.但它"感觉"就像一个影响整个系统的内存泄漏,即使Java应用程序不再运行.

我会很感激这方面的任何提示或阅读.

java performance memory-leaks memory-management

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