在Eclipse环境中,我有项目A.A对项目或库B和C具有依赖性.(如果它们是项目或库则没有区别)B依赖于LibX.v1,C依赖于LibX.v2.在运行时,A将需要B.jar和C.jar.另外,B.jar中的类需要LibX.v1,而C.jar中的类需要LibX.v2.作为同一个库的不同版本,LibX.v1和LibX.v2具有相同的类,因此可能会在运行时从错误的库版本加载类,从而导致很多麻烦.我该如何处理这种情况?
亲切的问候Seref
在请求帮助管理Java中相同库的不同版本的依赖关系之后,有人建议我应该看看OSGI实现.在最后期限的压力下,我真的可以使用一些帮助来帮助我从无休止的OSGI文档中挖掘出来.我有一个工作的应用程序,它将使用一个新的框架.框架使用我已经使用的不同版本的jar,所以我想将新框架打包为OSGI包.我可以保留我的应用程序,并将OSGI包仅用作JVM中的容器吗?这意味着我将仅使用OSGI包来从JVM的其余部分中隔离一组类,以避免不同版本的类之间发生冲突.换句话说,我想使用OSGI而不将我的所有代码都带到基于OSGI的设置.
亲切的问候Seref
我无法使用 ZeroMQ C++ 包装器来接收多部分消息。使用 C 版本的相同代码工作得很好,但它会导致一个异常,而 C++ 根本没有解释。多部分处理代码如下:
int _tmain(int argc, _TCHAR* argv[])
{
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_REP);
socket.bind("tcp://*:5555");
while(true) {
// the following two lines lead to exception
zmq::message_t request;
socket.recv(&request);
//zmq_msg_t message;
//zmq_msg_init (&message);
//zmq_recv (socket, &message, 0);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它非常简单;这个版本不行。但是如果我注释掉 while 循环中的前两行并取消注释当前注释的(C 版本)代码,它就可以工作。这是 Windows XP sp3、Zeromq 2.1.1 和 Visual Studio 2010 Express。
如果我发送单部分消息,两个版本都可以正常工作。我究竟做错了什么?
我正在实现一个基于实体属性值的持久性机制.所有数据库访问都是通过Hibernate完成的.我有一个包含节点路径的表,它非常简单,只是一个id,一个路径(字符串)路径数量很少,大约有几千个.
主表有数百万行,而不是重复路径,我已经规范化了自己的表的路径.以下是插入主表时我想要的行为
1)检查路径表中是否存在路径(通过实体管理器查询,使用路径值作为参数)
2)如果它不存在,插入并获取id(通过实体管理器持久化)
3)将id作为外键值放入主表行,并将其插入主表中.
对于一组域对象,这将发生数千次,对应于主表和其他一些表中的大量行.因此,使用如下的单个事务重复上述步骤:
EntityTransaction t = entityManager.getTransaction();
t.begin();
//perform steps given above, check, and then persist etc..
t.commit();
Run Code Online (Sandbox Code Playgroud)
当我执行第2步时,它会给整个操作带来巨大的性能下降.它正在乞求缓存,因为过了一段时间,该表最多只有10-20k条目,非常罕见的新插入.我试图用Hibernate做到这一点,并且失去了将近2天.
我正在使用Hibernate 4.1,带有JPA注释和ECache.我试图启用查询缓存,甚至在整个插入过程中使用相同的查询对象,如下所示:
Query call = entityManager.createQuery("select pt from NodePath pt " +
"where pt.path = :pathStr)");
call.setHint("org.hibernate.cacheable", true);
call.setParameter("pathStr", pPath);
List<NodePath> paths = call.getResultList();
if(paths.size() > 1)
throw new Exception("path table should have unique paths");
else if (paths.size() == 1){
NodePath path = paths.get(0);
return path.getId();
}
else {//paths null or has zero size
NodePath newPath = new …Run Code Online (Sandbox Code Playgroud) 当使用pydev时,ctrl + f9打开一个方便的窗口,让我选择在当前文件中运行哪个单元测试.是否有相同功能的调试版本?
Linqpad是唯一一个类似脚本的环境,我可以使用我的大型代码库.它是唯一适合我的环境的原因是其他解决方案(ironpython等)始终无法从app.config正确加载配置,但linqpad.config工作正常
问题是,我有多个配置文件,每次我想将其中一个用于脚本时,我必须转到linqpad安装目录,将正确的配置文件重命名为linqpad.config并重启linq.几乎没有生产力.
我试过通过以下方式设置文件:
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"C:\Shared\app.config");
Run Code Online (Sandbox Code Playgroud)
但它没有任何效果.有什么办法可以更改将在Linqpad中的C#程序的Main()方法中使用的配置文件吗?如果我可以调用一个设置要使用的配置文件的函数,然后运行我的其余代码,那就太好了.
我正在使用接受此问题的答案的代码片段.我只是添加了一个字节数组来使用UTF-16,如下所示:
final char[] chars = Character.toChars(0x1F701);
final String s = new String(chars);
final byte[] asBytes = s.getBytes(StandardCharsets.UTF_8);
final byte[] asBytes16 = s.getBytes(StandardCharsets.UTF_16);
Run Code Online (Sandbox Code Playgroud)
chars 有2个元素,这意味着Java中有两个16位整数(因为代码点在BMP之外).
asBytes 有4个元素,对应32位,这是我们需要用字符表示两个16位整数,所以它是有道理的.
asBytes16有6个元素,这让我很困惑.当32位足以表示此unicode字符时,为什么我们最终得到2个额外字节?
我知道答案中也有类似的问题,其中一些问题是在我输入时提供给我的.然而,它们似乎都没有提供没有绝对路径的解决方案.
我在SVN项目中有两个项目,他们需要以共享方式使用一些.cpp和.h文件.我根本找不到避免绝对路径的方法,这些路径与我查看代码的目录直接相关.尝试使用代码的每个人都很可能必须首先修改这些变量.
没有使用变量(最多),我看不到任何解决方案.我有什么最近的技巧/发展吗?
随着Oracle方面的最新公告,我们已经开始制定一项计划,逐步淘汰从Sun JVM迁移到我们最终将采用的任何可靠和免费的替代方案.
开放式JDK显然将成为一个主要的选择,现在IBM已经宣布了它的重点,但在稳定性和可靠性方面,它需要一些时间来替代Sun现有的JVM.
是否有任何JVM选项,它们为现实生活中的关键任务应用程序提供动力?据我所知,IBM的JVM不能在IBM硬件之外使用.
如果您知道任何可能有助于我们描绘JVM域图片的替代方案,那么您的反馈将非常受欢迎.
我们在Eclipse生态系统方面做了大量工作,并使用jboss应用程序服务器进行了备份,我们现在非常有兴趣知道我们的选择,因为访问Oracle的JVM可能需要许可费.
我正在使用ASM(字节码修改库),它以字节码命名格式提供对类型名称的访问,例如,报告String字段具有描述:Ljava/lang/String
我需要为某些类调用Class.forName,但是我需要类型名称的源代码形式,例如java.lang.String.
有没有办法从内部名称转换为Java源格式?