小编Mat*_*all的帖子

如何编写Java EE/EJB Singleton?

前一天,我的应用程序是一个EAR,包含一个WAR,一个EJB JAR和几个实用程序JAR文件.我在其中一个实用程序文件中有一个POJO单例类,它工作正常,并且全世界都很好:

EAR
 |--- WAR
 |--- EJB JAR
 |--- Util 1 JAR
 |--- Util 2 JAR
 |--- etc.
Run Code Online (Sandbox Code Playgroud)

然后我创建了第二个WAR,并发现(艰难的方式)每个WAR都有自己的ClassLoader,因此每个WAR都会看到不同的单例,并且事情从那里分解.这不太好.

EAR
 |--- WAR 1
 |--- WAR 2
 |--- EJB JAR
 |--- Util 1 JAR
 |--- Util 2 JAR
 |--- etc.
Run Code Online (Sandbox Code Playgroud)

那么,我正在寻找一种方法来创建一个可以跨WAR工作的Java单例对象(跨ClassLoaders?).在@Singleton我发现JBoss 5.1似乎不支持该注释(作为EJB 3.1的一部分添加)之前,EJB注释似乎很有希望.我错过了什么 - 我可以使用@SingletonJBoss 5.1吗?目前无法升级到JBoss AS 6.

或者,我也很高兴不必使用EJB来实现我的单例.我还能做些什么来解决这个问题?基本上,我需要一个半应用程序范围的*钩子到一大堆其他对象,如各种缓存数据和应用程序配置信息.作为最后的手段,我已经考虑将我的两个WAR合并为一个,但这将是非常地狱般的.

*含义:基本上可以在某一层之上的任何地方使用 现在,主要是在我的WAR中 - 视图和控制器(松散意义上).

编辑:我应该真的称它为Java EE而不是J2EE,不应该吗?


编辑2:非常感谢@Yishai的所有帮助.经过一些反复试验后,看起来我已经想出如何在JBoss 5下使用单个ClassLoader来解决这个问题.我在下面详细说明了这个问题,希望其他人也会发现这个问题很有用.

注意,这与JBoss 4下的这一点完全不同(参见Yishai的回答或下面的链接).

不是jboss-web.xml为每个WAR 编写一个,而是为了一个jboss.xmlear-EJB EJB ,而是jboss-classloading.xml在每个WAR中放置一个文件,与DD(web.xml)位于同一位置.内容jboss-classloading.xml应该是: …

java singleton ejb java-ee jboss5.x

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

JS/overflow:iPad/iOS上的Safari中隐藏的性能问题

我正在开发类似谷歌地图的滚动/平移系统.该系统应该比"原始"(没有缩放)简单得多,因此以非常直接的方式构建:

  • 有一个包含div的代表视口,溢出设置为隐藏和固定大小
  • 这个div包含另一个基于鼠标移动而被平移的div
  • 根据可见区域,将固定的div(或imgs)添加到平移div以显示非常大的图像的一部分

这个设置正如它应该的那样工作.特别是在桌面上的常规浏览器中,它完美无瑕.滚动是流动的.

在iPad上并没有那么多:这里整个事情感觉非常缓慢.在平移时有明显的滞后现象,点击注册需要很长时间.

为了让它与触摸界面一起工作,我必须将触摸事件"转换"为鼠标事件.虽然没有这个很难测试性能上的差异,但我认为这不是问题的原因,因为简单点击的响应性在停用时仍然保持同样低.

我试着通过简要介绍一下谷歌地图本身(它在iPad上和其他任何地方一样好用)来找出可能导致这种情况的原因,但无济于事(过于复杂而无法快速了解) ).所以我认为它可能与移动Safari在容器中设置为"溢出:隐藏;",某些缓存问题或者我不知道的所需JS技巧的方式有关.

知道我在哪里可以开始寻找吗?

safari performance jquery ipad ios

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

覆盖hashCode() - 这还不错吗?

对于其字段仅为原始的类,例如:

class Foo
{
    int a;
    String b;
    boolean c;
    long d;

    boolean equals(Object o)
    {
        if (this == o) return true;
        if (!(o instanceof Foo)) return false;
        Foo other = (Foo) o;
        return a == other.a && b.equals(other.b) && c == other.c && d = other.d;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个合理的"足够好"的写作方式hashCode()吗?

boolean hashCode()
{
    return (b + a + c + d).hashCode();
}
Run Code Online (Sandbox Code Playgroud)

也就是说,我构建了一个使用String相同的字段,equals()然后使用String#hashCode().

编辑: 我已更新我的问题以包括一个long字段.应如何long处理hashCode()?只是让它溢出int …

java equals hashcode

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

DRY:尽量减少Java中重复的代码

我正在用Java编写一个方法:

List<Foo> computeFooList(/* arguments */)
{
    /* snip */
}
Run Code Online (Sandbox Code Playgroud)

我想用完全相同的逻辑编写第二个方法,但是返回类型不同:

List<String> computeStringList(/* same arguments */)
{
    /* snip */
}
Run Code Online (Sandbox Code Playgroud)

我试图找出一种非hackish方法来最小化两种方法之间重复代码的数量.在只有两个之间的逻辑区别是,将对象添加到所返回的列表中时,第一种方法增加了acutal Foo:

List<Foo> computeFooList(/* arguments */)
{
    List<Foo> toReturn = ...
    ...
    for (Foo foo : /* some other list of Foo */)
    {
        if (/* some condition */)
        {
            toReturn.add(foo);
        }
    }
    ...
    return toReturn;
}
Run Code Online (Sandbox Code Playgroud)

第二个添加了以下String表示Foo:

List<String> computeStringList(/* same arguments */)
{
    List<String> toReturn = ...
    ...
    for (Foo foo …
Run Code Online (Sandbox Code Playgroud)

java dry

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

数独 - 根据行、列查找当前方格

在此输入图像描述

根据上图中的坐标,我希望能够计算出所选单元格属于哪个以红色突出显示的“正方形”。

我正在解决一个数独难题,并​​且可以访问每个正方形的宽度以及单元格所在的行/列。

我在计算单元格所属的正方形的“编号”时遇到困难(它们从 1 开始,从左到右、从上到下递增),因此上面的正方形的编号为:

1|2
3|4

我该如何计算呢?任何建议,将不胜感激。要么是 Java 特定的方法,要么只是一个算法就可以了:)

java sudoku

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

JAXB 2.x:如何在不知道目标类的情况下解组XML?

如果有办法,怎么做,我想知道最优雅的一个.这是一个问题: - 假设你有一个抽象类Z - 你有两个从Z继承的类:名为A和B.

您封送任何实例(A或B),如下所示:

JAXBContext context = JAXBContext.newInstance(Z.class);
Marshaller m = context.createMarshaller();
m.marshal(jaxbObject, ...an outputstream...);
Run Code Online (Sandbox Code Playgroud)

在生成的XML中,您可以看到它是什么类型的实例(A或B).

现在,你如何解散呢?

JAXBContext jc = JAXBContext.newInstance(Z.class);
Unmarshaller u = jc.createUnmarshaller();
u.unmarshal(...an inputstream...)
Run Code Online (Sandbox Code Playgroud)

我得到一个UnmarshalException说

"Exception Description: A descriptor with default root element {<my namespace>}<the root tag, e.g. A or B> was not found in the project]
Run Code Online (Sandbox Code Playgroud)

javax.xml.bind.UnmarshalException"

那么你如何进行解组以便获得Z的实例然后你可以在解组后进行测试,它是什么?例如z instanceof A然后... z实例B然后别的东西......等等

感谢您的任何想法或解决方案.

我使用JRE1.6和MOXy作为JAXB Impl.

java jaxb jaxb2 moxy

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

Iframes比.框架

我知道框架比Iframes要实现更多的打字工作,并且它们需要比Iframe更多的样式.我目前正在开发一个网站,该网站必须从其他网站下载一些内容(实际上是一整套网页),当然这取决于用户在主网站上的操作.iframe似乎是实现这一要求的一种简短而粗暴的方式,但我担心的是性能和完整性.

当满足以下条件时,我想就我更愿意使用的内容提出一些建议:

  1. 必须下载到我的网页上的页面非常大(宽度和高度)
  2. 包含多个图像
  3. 经验偶尔停机(维护)

一个奇迹男人的想法?

html asp.net

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

JDK7现在可以安全使用吗?

我最近了解到JDK7中存在用于热点编译器优化的错误.看到 这个帖子.

我不太了解这些错误的细节,但它们似乎与循环优化有关.由于我要在-server模式下运行一些大型程序(当然包含很多循环),我想知道使用JDK7是否安全?谢谢.

java java-7

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

Jersey应用程序在启动时运行初始化代码以初始化应用程序

我有一个用Jersey构建的应用程序.我需要通过运行特定于应用程序的登录/代码在Tomcat 7容器中启动webapp/war时进行一些初始化.

泽西岛最好的办法是什么?我之前在Servlet环境中使用了ContextListener和contextInitialized().在进行此调用之前,我需要确保已加载Jersey资源.

initialization jersey

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

Stanford CoreNLP Annotators线程安全吗?

斯坦福CoreNLP的网站

http://nlp.stanford.edu/software/corenlp.shtml

列出了几十个像魅力一样工作的注释器.我想使用Annotators的实例来处理多个线程的常见任务(词形还原,标记,解析).例如,将大量(GB文本)的处理拆分为线程或提供Web服务.

过去有一些讨论引用了LocalThreads,根据我的理解,它使用每个线程的一个Annotator实例(从而避免了线程安全方面的问题).这是一个选项,但这样所有模型文件和资源也必须加载n次.

Annotators(或其中一些)是否可以使用线程安全?我在讨论,文档或常见问题中找不到任何结论性/官方性的内容.

java multithreading thread-safety stanford-nlp

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