小编Dav*_*idS的帖子

为什么Java的Double.compare(double,double)实现方式如何呢?

我正在研究Java标准库(6)中compare(double,double)的实现.它写道:

public static int compare(double d1, double d2) {
    if (d1 < d2)
        return -1;       // Neither val is NaN, thisVal is smaller
    if (d1 > d2)
        return 1;        // Neither val is NaN, thisVal is larger

    long thisBits = Double.doubleToLongBits(d1);
    long anotherBits = Double.doubleToLongBits(d2);

    return (thisBits == anotherBits ?  0 : // Values are equal
            (thisBits < anotherBits ? -1 : // (-0.0, 0.0) or (!NaN, NaN)
             1));                          // (0.0, -0.0) or (NaN, !NaN)
}
Run Code Online (Sandbox Code Playgroud)

这个实现的优点是什么?


编辑:"优点"是一个(非常)糟糕的选择.我想知道它是如何工作的.

java floating-point comparison

35
推荐指数
2
解决办法
5万
查看次数

使用Java泛型理解类型安全异常

我有以下代码:

public static void main(String[] args) {
    List<String> s = new ArrayList<String>();
    s.add("kshitiz");

    //This is not typesafe. It should blow up at runtime
    List<Integer> i = new ArrayList(s);
    System.out.println(i.get(0));
}
Run Code Online (Sandbox Code Playgroud)

这个程序运行正常,并打印kshitiz.如果我用以下内容替换最后一行,它只会失败:

System.out.println(i.get(0).getClass());
Run Code Online (Sandbox Code Playgroud)

例外:

Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

java generics java-8

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

How to use CLOB with Hibernate and both Postgres and H2

I'm trying to store a long text file into the DBMS. Here is my table definition :

@Entity
@Table(name = "foos")
public class Foo {
    private static final long serialVersionUID = 7111245814238004034L;
    @Id
    @GeneratedValue
    @Column(nullable = false, name = "id")
    private long id;

    @Lob
    @Column(nullable = false, name = "content", length = 100_000)
    private String content;

    public long getId() {
        return id;
    }

    public String getContent() {
        return content;
    }
}
Run Code Online (Sandbox Code Playgroud)

And here is my liquibase changeset :

    <createTable tableName="foos"> …
Run Code Online (Sandbox Code Playgroud)

java postgresql hibernate jpa h2

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

如何以线程安全且高效的方式使用 XPath?

(这里有一个类似的问题,Java XPathFactory thread-safety,但给出的答案是不正确的,因为它忽略了文档声明XPathFactory.newInstance()不是线程安全的事实。)

XPathFactory Javadoc,我们有:

XPathFactory 类不是线程安全的。换句话说,应用程序有责任确保在任何给定时刻至多有一个线程在使用 XPathFactory 对象。鼓励实现将方法标记为同步以保护自己免受损坏的客户端的影响。

XPathFactory 不可重入。在调用 newInstance 方法之一时,应用程序可能不会尝试递归调用 newInstance 方法,即使是从同一线程。

因此,从上面的引用中,我认为XPathFactory.newInstance()不应同时调用(静态方法)。它不是线程安全的。

工厂返回 XPath 对象,其中包含此XPath Javadoc

XPath 对象不是线程安全的,也不是可重入的。换句话说,应用程序有责任确保在任何给定时间不会从多个线程使用一个 XPath 对象,并且在调用评估方法时,应用程序可能不会递归调用评估方法。

从上面的报价,我认为XPath.evaluateXPathExpression.evaluate不应该同时调用。它们不是线程安全的。

通常,当我处理不是线程安全的类时,我只使用局部变量,但因为XPathFactory.newInstance()不是线程安全的,而且它是一个静态方法,我不确定如何安全有效地使用它。我想我可以同步对 的调用newInstance,但我担心性能,因为我的应用程序是一个 XML 消息路由应用程序。(在我的烟雾测试中,newInstance它需要大约 0.4 毫秒。)

我找不到任何以线程安全方式使用 Java XPath 的示例,而且我不确定我知道如何以线程安全但高效的方式使用 XPath。我还需要在单例(特别是Apache Camel Processor)中使用 XPath 的约束。

java xpath multithreading

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

CDI可以将标准库POJO注入EJB吗?

我可以将自己的POJO注入到这样的托管对象中:

import javax.ejb.Stateless;
import javax.inject.Inject;
@Stateless
public class SomeEjb {
    @Inject
    private SomePojo somePojo;
}
Run Code Online (Sandbox Code Playgroud)

我有这个POJO:

// No annotations
public class SomePojo {   
}
Run Code Online (Sandbox Code Playgroud)

这很好用.如果我将EJB注入JSF支持bean,我可以看到值somePojo是非空值,如预期的那样.

但是,如果我尝试注入java.util.DateSomeEjb,我得到部署以下异常:

Severe: Exception while loading the app : WELD-001408 Unsatisfied dependencies for type [Date] with qualifiers [@Default] at injection point [[field] @Inject private SomeEjb.date]
org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [Date] with qualifiers [@Default] at injection point [[field] @Inject private SomeEjb.date]
    at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:311)
Run Code Online (Sandbox Code Playgroud)

SomeEjb现在:

// No annotations
public class …
Run Code Online (Sandbox Code Playgroud)

java ejb cdi

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

如果JSF不支持,为什么我能够将<f:actionListener>绑定到任意方法?

我正在使用Glassfish 3.1.2.2和JSF Mojarra 2.1.6.

我有以下Facelets页面:

<h:form>
  <h:commandLink value="link">
    <f:actionListener binding="#{backingBean.someMethod(1)}"/>
  </h:commandLink>
</h:form>
Run Code Online (Sandbox Code Playgroud)

以下支持bean:

@RequestScoped
@ManagedBean
public class BackingBean {
  public void someMethod(int i) {
    System.out.println("It was called: " + i);
  }
}
Run Code Online (Sandbox Code Playgroud)

当我单击链接时,控制台中出现"Info:It called called:1".

binding读取文档:

图书馆:http://xmlns.jcp.org/jsf/core,http://java.sun.com/jsf/core(Jsf Core)

标签:actionListener

捆绑

值绑定表达式,其值为实现javax.faces.event.ActionListener 的对象.[强调我的]

此外,该问题的接受答案表明,f:actionListener调用任意方法是不可能的.

如果不支持,为什么调用backing bean方法?

jsf binding el actionlistener methodexpression

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

Apache Camel 文件组件“idempotrepository”选项与幂等消费者处理器?

在文件组件的文档中,我看到我们可以通过指定idempotent如下选项来创建幂等读锁:

from("file://inbox?idempotent=true&idempotentRepository=#messageIdRepo")
    .to("file:data/outbox");
Run Code Online (Sandbox Code Playgroud)

但在幂等消费者的文档中,我看到我们还可以指定一个幂等处理器,如下所示:

from("file:data/inbox?noop=true")
    .idempotentConsumer(header("CamelFileName"), someMessageIdRepository)
    .to("file:data/outbox");
Run Code Online (Sandbox Code Playgroud)

这两种创建幂等消费者的方法之间是否存在显着的行为差异?

java apache-camel

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

如果我们将SessionScoped bean注入无状态bean,如果没有HTTP会话会发生什么?

我们的应用程序包含与支持bean和无状态EJB服务交互的Web页面,但也有一个与无状态EJB服务交互的远程客户端.

许多服务查询数据库,然后根据当前用户/调用者过滤结果集(例如,用户只能查看某些记录类型); 也就是说,他们使用程序化而非声明性安全性.

在网络方面,我的直觉是将当前登录的用户存储在SessionBean中,但我希望无状态EJB服务根据当前登录的用户过滤结果集,以便过滤也适用于远程客户端调用.我可以将SessionBean注入无状态EJB服务,但我认为SessionBeans使用HTTP会话,并且因为在远程客户端调用期间没有HTTP会话,所以我看不出它是如何工作的.

我觉得我的方法是错误的,我应该从容器中检索"Principal"; 但是,由于我们的应用程序的开发生命周期,容器管理的安全性尚未设置,但我仍然负责实现负责过滤记录的业务逻辑,而不是以后.

我密切相关的问题:

  1. 是否可以将SessionScoped bean注入无状态EJB,因为知道远程客户端将调用Statelesss EJB?在这种情况下,SessionScoped bean的价值是多少?
  2. 我的支持bean和无状态EJB服务是否应该从容器中检索Principal,而不是SessionScoped bean?
    • 如果是,在设置容器管理的安全性之前,如何替换模拟主体来处理业务逻辑?

ps我是Java EE的新手.

技术:

  • Java EE 6
  • GlassFish 3.1.2.2
  • "支持豆",例如 javax.enterprise.context.SessionScoped
  • "无状态EJB服务",例如 javax.ejb.Stateless
  • "远程客户"; 即一些非Web客户端直接调用无状态bean(通过EJB/RMI)

更新:

有关"远程客户端"的更多详细信息.我不确定如何说这个,因为我是Java EE的新手,但这个"远程客户端"不会通过HTTP.另一个应用程序,我们称之为应用程序X,将从客户端接收XML消息.我认为他们使用证书对客户端进行身份验证.应用程序X将XML转换为POJO并直接调用我的无状态EJB服务.

在这种情况下,我认为我说我不应该SessionBeanStatelessEJB服务注入,因为在应用程序X调用EJB服务时将不会有HTTP会话.我的理解是否正确?

感谢您的耐心等待.我知道我对这些事情的无知.

java architecture ejb java-ee cdi

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

`mv somedir/* someotherdir` 当 somedir 为空时

我正在编写一个自动 bash 脚本,将一些文件从一个目录移动到另一个目录,但第一个目录可能为空:

$ mv somedir/* someotherdir/
mv: cannot stat 'somedir/*': No such file or directory
Run Code Online (Sandbox Code Playgroud)

如果目录为空,如何编写此命令而不产生错误?我应该只使用rmandcp吗?我可以先写一个条件检查来查看目录是否为空,但这感觉超重。

如果目录为空,我很惊讶命令会失败,所以我试图找出我是否缺少一些简单的解决方案。

环境:

  • 猛击
  • RHEL

linux bash

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