小编Phi*_*all的帖子

JSR-305注释替代Java 9

到目前为止,我们一直在使用Findbugs JSR-305注释(com.google.code.findbugs:jsr305),包括工具支持(Sonar,Eclipse,Findbugs,...)在内的一切工作正常.

但是我们的理解是Java 9中的Jigsaw将打破JSR-305注释(不允许在两个模块中使用一个包).这在JavaOne 2015上得到了证实.Oracle的推理是JSR-305从未发生过,JSR-250必须支持这些注释.

我们正在寻找可以在Java 8和Java 9中工作的JSR-305注释的替换.如果历史是任何指南,Java 9 GA和Java 8 EOL之间的时间将相当短,我们想修复我们的任何不兼容性提前编码.从理论上讲,我们可以升级JDK的注释模块,但是在我们的工具链中执行此操作似乎需要做很多工作.

annotations static-analysis jsr305 java-platform-module-system java-9

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

我在哪里可以找到Spring 4 OSGi包

我在哪里可以找到Spring 4的OSGi包?我检查了http://ebr.springsource.com/但只能找到Spring 3.2.x并且Maven Central中的工件不是捆绑包.

澄清

我不是在寻找Spring DM或类似产品.我正在寻找"Spring Framework"JAR(spring-core,spring-beans,spring-context,...)作为OSGi包.我不是想在OSGi环境中创建应用程序上下文.我只需要OSGi环境中的(异常)类.

spring osgi

19
推荐指数
4
解决办法
2万
查看次数

释放用NewDirectByteBuffer包装的内存

我有一个用JNI包装的内存区域NewDirectByteBuffer.我想在清洁工中运行免费/发布代码ByteBuffer.有没有办法做到这一点,还是我必须提供一个自定义的免费方法,用户必须使用ByteBuffer

编辑

为了澄清,我自己分配了记忆并给NewDirectByteBuffer自己打电话.我想知道如何与清洁工协调清理工作.

java free java-native-interface memory-management nio

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

发生在直接的ByteBuffer之前

我在一个线程中有一个直接的ByteBuffer(off-heap),并使用JMM给我的一种机制安全地将它发布到另一个线程.之前发生的关系是否扩展到ByteBuffer包装的本机(堆外)内存?如果不是,我怎样才能安全地将直接ByteBuffer的内容从一个线程发布到另一个线程?

编辑

这不是重复的多个线程可以在Java中看到直接映射的ByteBuffer上的写入吗?因为

  • 我不是在谈论一个mmaped()区域,而是一个普遍的堆外区域
  • 我正在安全地发布ByteBuffer
  • 我不是同时修改ByteBuffer的内容,我只是将它从一个线程变为另一个线程

编辑2

这不是使Java的ByteBuffer线程安全选项的重复我不是试图从两个不同的线程同时修改ByteBuffer.我试图从一个线程转到另一个线程并且在由直接ByteBuffer支持的本机内存区域上的语义之前发生.一旦交接,第一个线程将不再修改或读取ByteBuffer.

java multithreading nio happens-before off-heap

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

ResultSet#getDate()语义

我们从已迁移ojdbc6-11.2.0.3.0ojdbc7-12.1.0.1与观察到的变化ResultSet#getDate()语义.之前java.sql.Date通过根据指定的合同将小时,分钟,秒和毫秒设置为零,将返回"标准化" java.sql.Date.与ojdbc7此不再的情况下和java.sql.Date具有小时,分,秒和毫秒根据数据库上的值来设置.

我查看了Javadoc,ResultSet#getDate()并没有明确说出哪些行为是正确的.我会假设旧的行为符合规范的意图.我对吗?我们遇到过驱动程序错误吗?

java oracle datetime jdbc

8
推荐指数
2
解决办法
2270
查看次数

永远不会结束启发式参与者的定期恢复

几天来,我们的日志已经充满了这条消息

2018-06-15 12:19:23 WARN [com.arjuna.ats.arjuna] (Periodic Recovery) Transaction 0:ffff0a983f1e:1f3aa2ff:5a09aa02:d1c08c has 1 heuristic participant(s)!
2018-06-15 12:19:23 WARN [com.arjuna.ats.jta] (Periodic Recovery) ARJUNA016037: Could not find new XAResource to use for recovering non-serializable XAResource XAResourceRecord < resource:null, txid:< formatId=131077, gtrid_length=46, bqual_length=36, tx_uid=0:ffff0a983f1e:1f3aa2ff:5a09aa02:d1c08c, node_name=acme_node, branch_uid=0:ffff0a983f1e:1f3aa2ff:5a09aa02:d1c08d, subordinatenodename=null, eis_name=unknown eis name >, heuristic: TwoPhaseOutcome.FINISH_OK com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord@6569a57c >
2018-06-15 12:19:23 WARN [com.arjuna.ats.arjuna] (Periodic Recovery) Transaction 0:ffff0a983f1e:1f3aa2ff:5a09aa02:d1c08c restored heuristic participant XAResourceRecord < resource:null, txid:< formatId=131077, gtrid_length=46, bqual_length=36, tx_uid=0:ffff0a983f1e:1f3aa2ff:5a09aa02:d1c08c, node_name=acme_node, branch_uid=0:ffff0a983f1e:1f3aa2ff:5a09aa02:d1c08d, subordinatenodename=null, eis_name=unknown eis name >, heuristic: TwoPhaseOutcome.FINISH_OK com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord@6569a57c > …
Run Code Online (Sandbox Code Playgroud)

oracle xa wildfly ibm-mq

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

Nashorn不再使用BigDecimal

我们从Oracle JDK 8u77升级到8u92,突然之前运行的脚本不再有效.最小的复制者是:

Map<String, Object> attributes = Collections.singletonMap("GROSSREIMBAMOUNT", BigDecimal.ZERO);
String script = "GROSSREIMBAMOUNT.toFixed(2)";

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");

for (Entry<String, Object> entry : attributes.entrySet()) {
  jsEngine.put(entry.getKey(), entry.getValue());
}

System.out.println(jsEngine.eval(script));
Run Code Online (Sandbox Code Playgroud)

以前我们得到了

0.00
Run Code Online (Sandbox Code Playgroud)

但现在我们得到了.

TypeError: GROSSREIMBAMOUNT.toFixed is not a function
Run Code Online (Sandbox Code Playgroud)

typeof现在返回object之前返回的位置number.

我的问题是这种行为故意还是一个错误?我首先虽然这将是一个错误,但JDK-8010732似乎暗示不然.

java nashorn

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

小时,分钟和秒的时间段

我需要一个表示年,月,周,日,小时,分钟,秒的间隔数据类型.前三个(年,月,日)可以完成,Period最后三个(小时,分钟,秒)可以完成,Duration但是它们似乎都没有.理想情况下,我希望避免实现自定义TemporalAmount.

java jsr310

6
推荐指数
2
解决办法
2327
查看次数

使用 HSQLDB 生成基于 CTE 的序列

我正在使用递归公用表表达式来获取一批序列号。以下查询适用于 Postgres、SQL Server 和 H2(减去该VALUES部分)。

WITH RECURSIVE t(n, level_num) AS (
    SELECT next value for seq_parent_id as n,
           1 as level_num
      FROM (VALUES(0))

    UNION ALL

    SELECT next value for seq_parent_id as n,
           level_num + 1 as level_num
      FROM t
     WHERE level_num < ?)
SELECT n FROM t
Run Code Online (Sandbox Code Playgroud)

但是,使用 HSQLDB 2.4.0 我得到以下异常

java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: T
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
    at org.hsqldb.jdbc.JDBCStatement.executeQuery(Unknown Source)
    ... 
Caused by: org.hsqldb.HsqlException: user lacks …
Run Code Online (Sandbox Code Playgroud)

sql sequence hsqldb common-table-expression

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

异步Servlet异常

我是JavaEE 6的新手,我了解到它支持名为AsyncServlets的异步servlet.所以我尝试使用JavaEE6创建一个小程序.

这是我的servlet代码

@WebServlet(name = "AsyncServlet", urlPatterns = {"/AsyncServlet"}, asyncSupported=true)
public class AsyncServlet extends HttpServlet {


    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        AsyncContext aCtx = request.startAsync(request, response);
        Executor executor = Executors.newSingleThreadExecutor();
        executor.execute(new MyClass(aCtx));
        System.out.println("Original thread is freed");
    }




} 
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行servlet时,我得到一个异常java.lang.IllegalStateException:不支持.我正在使用tomcat 7.0.14作为服务器.我没有创建web.xml.这段代码中的问题在哪里?

编辑:

这是异常的完整堆栈跟踪

SEVERE: Servlet.service() for servlet [AsyncServlet] in context with path [/AsyncTest] threw exception
java.lang.IllegalStateException: Not supported.
at org.apache.catalina.connector.Request.startAsync(Request.java:1618)
at org.apache.catalina.connector.RequestFacade.startAsync(RequestFacade.java:1031)
at javax.servlet.ServletRequestWrapper.startAsync(ServletRequestWrapper.java:379)
at com.icbt.demo.servlet.AsyncServlet.doGet(AsyncServlet.java:30)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at …
Run Code Online (Sandbox Code Playgroud)

java servlet-3.0 java-ee-6 tomcat7

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