到目前为止,我们一直在使用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
我在哪里可以找到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环境中的(异常)类.
我有一个用JNI包装的内存区域NewDirectByteBuffer.我想在清洁工中运行免费/发布代码ByteBuffer.有没有办法做到这一点,还是我必须提供一个自定义的免费方法,用户必须使用ByteBuffer?
编辑
为了澄清,我自己分配了记忆并给NewDirectByteBuffer自己打电话.我想知道如何与清洁工协调清理工作.
我在一个线程中有一个直接的ByteBuffer(off-heap),并使用JMM给我的一种机制安全地将它发布到另一个线程.之前发生的关系是否扩展到ByteBuffer包装的本机(堆外)内存?如果不是,我怎样才能安全地将直接ByteBuffer的内容从一个线程发布到另一个线程?
编辑
这不是重复的多个线程可以在Java中看到直接映射的ByteBuffer上的写入吗?因为
编辑2
这不是使Java的ByteBuffer线程安全的选项的重复我不是试图从两个不同的线程同时修改ByteBuffer.我试图从一个线程转到另一个线程并且在由直接ByteBuffer支持的本机内存区域上的语义之前发生.一旦交接,第一个线程将不再修改或读取ByteBuffer.
我们从已迁移ojdbc6-11.2.0.3.0到ojdbc7-12.1.0.1与观察到的变化ResultSet#getDate()语义.之前java.sql.Date通过根据指定的合同将小时,分钟,秒和毫秒设置为零,将返回"标准化" java.sql.Date.与ojdbc7此不再的情况下和java.sql.Date具有小时,分,秒和毫秒根据数据库上的值来设置.
我查看了Javadoc,ResultSet#getDate()并没有明确说出哪些行为是正确的.我会假设旧的行为符合规范的意图.我对吗?我们遇到过驱动程序错误吗?
几天来,我们的日志已经充满了这条消息
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 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似乎暗示不然.
我需要一个表示年,月,周,日,小时,分钟,秒的间隔数据类型.前三个(年,月,日)可以完成,Period最后三个(小时,分钟,秒)可以完成,Duration但是它们似乎都没有.理想情况下,我希望避免实现自定义TemporalAmount.
我正在使用递归公用表表达式来获取一批序列号。以下查询适用于 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) 我是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)