小编Jus*_*tin的帖子

byte []的正确hibernate注释

我有一个使用hibernate 3.1和JPA注释的应用程序.它有一些具有byte []属性的对象(1k - 200k大小).它使用JPA @Lob注释,而hibernate 3.1可以在所有主要数据库上读取这些内容 - 它似乎隐藏了JDBC Blob供应商的特性(应该这样做).

@Entity
public class ConfigAttribute {
  @Lob
  public byte[] getValueBuffer() {
    return m_valueBuffer;
  }
}
Run Code Online (Sandbox Code Playgroud)

我们不得不升级到3.5,当我们发现hibernate 3.5 在postgresql中打破(并且不会修复)这个注释组合时(没有解决方法).到目前为止我还没有找到明确的解决方法,但我注意到如果我只是删除了@Lob,它使用了postgresql类型的bytea(有效,但只适用于postgres).

annotation                   postgres     oracle      works on
-------------------------------------------------------------
byte[] + @Lob                oid          blob        oracle
byte[]                       bytea        raw(255)    postgresql
byte[] + @Type(PBA)          oid          blob        oracle
byte[] + @Type(BT)           bytea        blob        postgresql

once you use @Type, @Lob seems to not be relevant
note: oracle seems to have deprecated the "raw" type since 8i.
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来拥有一个可以在主要数据库之间移植的带注释的类(具有blob属性).

  • 注释byte …

java database postgresql hibernate blob

110
推荐指数
5
解决办法
9万
查看次数

终于回来"发生了吗?"

我试图说服自己在finally子句中采取的操作发生在函数返回之前(在内存一致性意义上).从JVM规范,很显然,在一个线程中,程序顺序应该是驱动之前发生关系-如果一个发生b按照程序顺序,然后 前发生 b.

但是,我还没有看到任何明确说明返回之前最终发生的事情,那么它呢?或者,编译器是否可以通过某种方式重新排序finally子句,因为它只是简单地记录.

激励示例:我有一个线程从数据库中取出对象并将它们放入ArrayBlockingQueue中,另一个线程将它们取出.我有一些try- finally用于事件计时的块,我看到在log语句之前返回的影响

线程1:

public Batch fetch() {
    try {
        log("fetch()+");
        return queryDatabase();
    }
    finally {
        log("fetch()-");
    }
     ...
    workQueue.put(fetch());
Run Code Online (Sandbox Code Playgroud)

线程2:

log("take()+");
Batch b = workQueue.take();
log("take()-");
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,这是以意想不到的顺序打印出来的.虽然,是的,不同线程中的日志记录语句可能无序出现,但存在至少20毫秒的时间差.

124 ms : take()+
224 ms : fetch()+
244 ms : take()-
254 ms : fetch()-
Run Code Online (Sandbox Code Playgroud)

请注意,这与最终特朗普回归的问题并不完全相同.我不是要问将返回什么,而是询问内存一致性和执行顺序.

java multithreading try-catch-finally

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

用spring动态注册事务监听器?

我有一个springframework应用程序,我想在其中添加一个事务监听器到当前正在进行的事务.动机是触发通知下游系统的提交后动作.我正在使用@Transactional围绕某个服务方法包装事务 - 这是我想要创建/注册事务监听器的地方.我想做一些"喜欢"以下的事情.

public class MyService {
 @Transaction
 public void doIt() {
  modifyObjects();

  // something like this
  getTransactionManager().registerPostCommitAction(new 
   TransactionSynchronizationAdapter() {
     public void afterCommit() { 
      notifyDownstream(); 
     }
  });
 }
}
Run Code Online (Sandbox Code Playgroud)

Spring有一个TransactionSynchronization接口和适配器类,它看起来正是我想要的; 但是,如何使用当前事务或事务管理器动态注册一个,并不是很明确.如果我可以避免它,我宁愿不继承JtaTransactionManager的子类.

问:有没有人这样做过.

问:注册我的适配器最简单的方法是什么?

spring transactions jta

12
推荐指数
2
解决办法
9241
查看次数

如何检测Swing线程策略违规

我正在寻找一种自动方法来检测我的代码中违反Swing的单线程策略.我正在寻找一些类似AOP代码的内容,当你在swing应用程序运行时你将它放入虚拟机中并让它记录在EDT之外修改swing组件的任何地方.

我不是AOP人,但我想在每个java.swing.*类周围创建一个AOP代理

AOP_before(Method m, Object args[]) {
 if (!isEventDispatchThread(Thread.currentThread()) {
  logStack(new RuntimeException("violation!"));
 }

 invoke(m, args);
}
Run Code Online (Sandbox Code Playgroud)

有人知道这样做的项目或实用程序吗?

java debugging swing multithreading

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

为什么java没有字节类型后缀?

所以,Java有文字很长型后缀:(123L),双类型后缀(43.21D),浮点后缀(1.234F).那么......为什么没有字节类型后缀?例如,在编写一些测试代码时,必须在将它们用作函数参数时强制转换所有字节.

ByteBuffer b = ByteBuffer.allocate(100);
b.put((byte)3);   // super annoying
b.put(3b);        // if only
Run Code Online (Sandbox Code Playgroud)

很显然,使用B或b是行不通的,因为它会与指定的十六进制或八进制字节(关键语言功能)的能力相冲突.但是其他一些字母,比如Z z?或Y y(对于bYte)?

java byte language-design

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

ByteBuffer可以实现DataOutput/DataInput吗?

java.nio.ByteBuffer没有实现java.io.DataOutputjava.io.DataInput是否有一些微妙的原因,或者作者是不是选择这样做?映射调用似乎很简单(例如putInt() - > writeInt()).

我(以及其他一些显然)的基本问题是较旧的类,它们知道如何使用通用接口序列化/序列化自己:DataInput/DataOutput.我想重用我的自定义序列化而无需为ByteBuffer编写自定义代理.

java serialization nio bytebuffer

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

如何防止maven检查外国存储库?

当我使用maven构建时,我看到它检查所有类型的外部存储库,以查找只有我的本地构建应该生成的工件.我怎么能告诉它com.myorg组只能在本地存储库中找到?基本上我想做m2eclipse在工作区分辨率上做的事情,但是在命令行上.

[INFO] snapshot com.myorg:core:0.0.1-SNAPSHOT: checking for updates from sun-jms
[INFO] snapshot com.myorg:core:0.0.1-SNAPSHOT: checking for updates from hibernate
[INFO] snapshot com.myorg:util:0.0.1-SNAPSHOT: checking for updates from sun-jms
[INFO] snapshot com.myorg:util:0.0.1-SNAPSHOT: checking for updates from hibernate
...
Run Code Online (Sandbox Code Playgroud)

背景: 我有一个分层的maven项目(一个级别).我想做一个完整的构建,所以我去顶部做mvn clean install.

  • com.myorg(父母)
    • 的pom.xml
    • com.myorg.core
      • 的pom.xml
    • com.myorg.util
      • 的pom.xml

maven-2

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

maven程序集忽略依赖工件的finalName

我有一个分层maven项目,我正在尝试为几个子模块构建一个本机安装程序.我使用我的产品名称作为前缀:<finalName>xyz-${artifactId}</finalName>在父POM中,以便我的所有工件罐都有一个标准的命名约定.

xyz-parent
 +-- util
      +--- target/xyz-util.jar
 +-- core
      +--- target/xyz-core.jar
 +-- app1 <--- "builds an installer as part of the package phase"
      +--- target/xyz-app1.jar
 +-- app2 <--- "builds an installer as part of the package phase"
      ...
Run Code Online (Sandbox Code Playgroud)

我需要将所有依赖的jar实现到一个目录中(因为inno setup对maven一无所知).因此,对于作为安装程序的每个子模块,我计划使用maven-assembly-plugin,然后在我的inno设置中使用以下内容:

Source: "target\pkg\lib\*.jar"; DestDir: "{app}\external";  Flags: ignoreversion;
Run Code Online (Sandbox Code Playgroud)

当我运行时mvn clean package,我得到一个target/xyz-app1-bin/xyz-app1/lib包含所有相关罐子的目录,但是我的兄弟项目生成的罐子都没有正确的最终名称(例如我有util-0.0.1-SNAPSHOT.jar而不是xyz-util.jar)

这个问题似乎与这篇文章类似,但我不知道"附加"是什么(可能已弃用).

maven-2 maven-assembly-plugin

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

Java:将NIO与System.in一起使用

是否可以将NIO与System.in一起使用?

我想以某种方式将'stdin'视为可选择的频道.有没有人找到办法做到这一点?

java nio system.in

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

在java中查找原子/日志页面文件

我正在寻找一个可嵌入的库来从java进行原子文件I/O. 我需要该库来支持以下功能.

  • 基本页面管理 - 分配/释放页面和读/写
  • 原子(全部或全部)写入(基本上是记录的I/O)
  • 一个简单的二进制页面格式(需要C++可读)

  • 它不需要那么快(或并发),只需简单可靠.

有没有人过去使用过符合条件的东西?

我调查过的事情

我发现kaha db项目的内部结构很有用,但是开发似乎已经转变为一个名为hawtdb的fusesoure项目.Hawt目前似乎依赖于内存映射I/O,这听起来很不错,但是除非你使用64位JVM +操作系统(由于JVM地址空间限制),否则限制你可以访问2GB页面文件的大小.

我正在考虑的一些替代方案是Cassandra项目,但我不知道它是否可嵌入.我看过德比(运行时创建了大量文件)和H2(看起来很有希望,但我看起来并不太深).这些似乎具有相对复杂的页面文件格式,似乎提供的远远超过我的需要. MySQL确实提供了页面文件格式的文档,但它也有点复杂.

java file-io atomic

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

为什么jsp:include参数不可见

关于访问jsp:param值,我有与此海报完全相同的基本问题;完全按照他的榜样对我不起作用。通过jsp:include传递的参数似乎没有显示在包含的文件中。我的设置有什么特别之处吗?

呼叫者:

<div>
    <jsp:include page="../../../common/callee.jsp">
        <jsp:param name="justinVar" value="primary" />
    </jsp:include>      
</div>
Run Code Online (Sandbox Code Playgroud)

callee.jsp:

<i>method 1: [</i><b><%= request.getParameter("justinVar") %></b><i>]</i>
<p/>
<i>method 2: [</i><b>${param.justinVar}</b><i>]</i>
<p/>
<i>method 3: [</i><b>${justinVar}</b><i>]</i>
<p/>
Run Code Online (Sandbox Code Playgroud)

最终输出:

method 1: [null]

method 2: []

method 3: [] 
Run Code Online (Sandbox Code Playgroud)

更新:以下解决方法确实起作用,这似乎是错误的,但是也许它起作用的事实揭示了一些不起作用的事实。

<c:set var="justinVar" value="justinVARisHere" scope="request" />
<jsp:include page="../../../common/callee.jsp" />
Run Code Online (Sandbox Code Playgroud)

jsp param jspinclude

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

在FutureTask.cancel之后,ScheduledExecutorService工作线程保持中断状态(true)

我有一个任务,我计划通过ScheduledThreadPoolExecutor.scheduleAtFixedRate(任务,费率,...)定期运行.用户可以手动取消此任务,这将调用ScheduledFuture.cancel(true).出于某种原因,可能取决于它们取消此任务的时间,在我的任务的run()方法退出后,工作线程(执行程序用来运行我的任务)似乎保持中断状态.

虽然工作线程(从池中取出并重用)在使用现有钩子(通过ThreadPoolExecutor.beforeExecute()ThreadPoolExecutor.afterExecute())开始新任务之前将会清除其中断状态.但它不会在默认实现中执行此操作.

我有两个问题:

  • 如何将工作线程置于设置中断状态的状态?
  • 为什么默认实现在开始新任务之前不清除中断状态?

java concurrency multithreading interrupt executorservice

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