Tag: java

JMS连接,会话和生产者/消费者之间的关系

我想发送一批20k JMS消息到同一个队列。 我使用10个线程分割任务,所以每个线程都会处理2k个消息。 我不需要交易。 我想知道是否有一个连接,一个会话,10个生产者是否是推荐的方式? 如果我有一个生产者共享所有线程怎么样? 我的邮件是否会被损坏或是否会被同步发送(不会提高性能)? 如果我总是连接到相同的队列,那么决定是否创build新连接或会话的一般准则是什么? 谢谢你,很抱歉,一次问很多。 (这里有一个类似的问题,但是它并没有完全回答我正在寻找的东西。 长时间的JMS会话。保持JMS连接/ JMS会话总是打开一个不好的实践? )

你应该为Java枚举定义一个null / unknown值吗?

当你定义一个枚举的东西,可以在你的界面“未定义”,如果你 定义一个单独的枚举值,或 只是使用enumValue = null这些情况? 例如, serviceX.setPrice(Price priceEnum) enum Price { CHEAP, EXPENSIVE, VERRRY_EXPENSIVE, UNKNOWN } 和priceEnum.UNKNOWN需要时 要么 enum Price { CHEAP, EXPENSIVE, VERRRY_EXPENSIVE } 和priceEnum = null时需要? 对此有一点辩论。 一些想到的点: 使用Price.UNKNOWN保存一些“if(price == null)”代码。 您可以在一个开关柜中处理价格x的所有值 根据视图技术,可能更容易本地化Price.UNKNOWN 在代码中使用Price.UNKNOWNtypes的原因“幻数”问题,IMO。 这里我们有Price.UNKNOWN,其他地方可能是Color.UNDEFINED,Height.NULLVALUE等等 使用priceValue = null与Java中处理其他数据types的方式更加一致。 对于未知值,我们有Integer i = null,DomainObject x = null,String s = null,不是吗? Price.UNKNOWN强制您决定是否允许所有用例的空值。 我们可能有方法Price getPrice(),它可能会返回Price.UNKNOWN和setPrice(Price p),这是不允许接受Price.UNKNOWN的。 由于Price.UNKNOWN总是包含在枚举的值中,所以这些接口看起来有点不清洁。 […]

Scala中有没有游戏引擎?

我不知道是否有任何Scala写的游戏引擎,或者从Scala中很容易获得?

将命令行parameter passing给以编程方式运行的JUnittesting用例

我试图从Java类运行JUnittesting: JUnitCore core = new JUnitCore(); core.addListener(new RunListener()); core.run(classToRun); 问题是我的JUnittesting需要一个在JUnittesting本身当前硬编码的数据库连接。 我正在寻找的是一种以编程方式运行JUnittesting的方法(上图),但将一个数据库连接传递给我,在我的Java类中创build,运行testing,而不是在JUnit类中进行硬编码。 基本上是类似的东西 JUnitCore core = new JUnitCore(); core.addListener(new RunListener()); core.addParameters(java.sql.Connection); core.run(classToRun); 然后在classToRun中: @Test Public void Test1(Connection dbConnection){ Statement st = dbConnection.createStatement(); ResultSet rs = st.executeQuery("select total from dual"); rs.next(); String myTotal = rs.getString("TOTAL"); //btw my tests are selenium testcases:) selenium.isTextPresent(myTotal); } 我对@Parameters有所了解,但在这里似乎并不适用,因为它更多地用不同的值运行相同的testing用例。 我希望我所有的testing用例都能共享一个数据库连接,通过configuration文件传递给我的java客户端,然后运行这些testing用例(也通过configuration文件传入)。 这可能吗? PS我明白这似乎是一个奇怪的做事方式。

如果catch和finally块都抛出exception,会发生什么?

如果catch和finally块都抛出exception,会发生什么?

在JDBC中,当自动提交是错误的并且没有设置明确的保存点时,回滚是好的样式还是浪费?

假设你有以下代码: Connection conn; try { conn = … // get connection conn.setAutoCommit(false); … // Do some modification queries and logic conn.commit() } catch(SQLException e) { conn.rollback() // Do we need this? conn.close() } 在这段代码中,如果有一个exception,closures连接(因为自动提交是closures的),还是显式的回滚,然后closures连接,是否更好? 没有保存点。 我觉得添加回滚调用是有意义的,因为: 1)未来有人可能会添加保存点,但忘记添加回滚 2)它提高了可读性 3)不应该花费任何东西,对吧? 但显然,这些都不是特别引人注目。 任何标准的做法? 注意:我知道在closures和回滚时需要重复try / catch。 实际上我有一个中间件抽象数据库访问和照顾,但我想知道是否添加它是多余的。

使用ServletOutputStream在Java servlet中编写非常大的文件,而不存在内存问题

我正在使用IBM Websphere Application Server v6和Java 1.4,并试图将大型CSV文件写入ServletOutputStream以供用户下载。 目前文件从50-750MB不等。 较小的文件不会造成太多的问题,但是对于较大的文件,它看起来正在写入堆中,然后导致出现OutOfMemory错误并closures整个服务器。 这些文件只能通过HTTPS传递给已通过身份validation的用户,这就是为什么我通过Servlet服务他们,而不是将他们粘在Apache中。 我使用的代码是(在这个附近删除了一些绒毛): resp.setHeader("Content-length", "" + fileLength); resp.setContentType("application/vnd.ms-excel"); resp.setHeader("Content-Disposition","attachment; filename=\"export.csv\""); FileInputStream inputStream = null; try { inputStream = new FileInputStream(path); byte[] buffer = new byte[1024]; int bytesRead = 0; do { bytesRead = inputStream.read(buffer, offset, buffer.length); resp.getOutputStream().write(buffer, 0, bytesRead); } while (bytesRead == buffer.length); resp.getOutputStream().flush(); } finally { […]

没有API时如何获取Android电子市场数据?

据我所知,没有API(官方或非官方)访问Android电子市场上的应用程序的信息(信息,如标题,图标,说明,下载,评论等)。但是,有几个网站无论如何已经设法编译这些信息。 我的问题是:这是如何做的? 几个猜测。 手动(不可能,由于数量) 实现官方应用程序使用的协议(通过反编译或观察数据包) 用官方应用程序运行某种debugging器来提取实时数据 使用某种自动化+屏幕截图+文字识别(看起来很复杂) 修改(打开)源以写入日志文件 我只是好奇如何做到这一点,因为我当然不知道。 谢谢。

如何在C#中生成HMAC-SHA1?

我正在尝试使用C#使用REST API。 API创build者已经提供了PHP,Ruby和Java的示例库。 我正在挂上它的一部分,我需要生成一个HMAC 。 以下是他们提供的示例库中的工作方式。 PHP hash_hmac('sha1', $signatureString, $secretKey, false); ruby digest = OpenSSL::Digest::Digest.new('sha1') return OpenSSL::HMAC.hexdigest(digest, secretKey, signatureString) Java的 SecretKeySpec signingKey = new SecretKeySpec(secretKey.getBytes(), HMAC_SHA1_ALGORITHM); Mac mac = null; mac = Mac.getInstance(HMAC_SHA1_ALGORITHM); mac.init(signingKey); byte[] bytes = mac.doFinal(signatureString.getBytes()); String form = ""; for (int i = 0; i < bytes.length; i++) { String str = […]

Java中的unicode换行符(\ u000d)

我们来看下面的Java代码片段。 public class Main { public static void main(String[] args) { // new Character(' \u000d System.out.println("Hello"); } } 在上面的代码中,虽然main()方法中的唯一一行被注释掉了,但它在控制台上显示输出Hello ,即使看起来这条注释行包含一些语法错误。 如果这一行没有注释,它将不会工作,导致编译时错误。 为什么在这里输出“Hello”?