在播放控制台上发出"run"命令时,如何更改播放框架中播放框架使用的默认端口.
这适用于playframework 2.0 beta.
在命令行或application.conf中使用http.port配置参数似乎没有任何效果:
C:\dev\prototype\activiti-preso>play run --http.port=8080
[info] Loading project definition from C:\dev\prototype\activiti-preso\project
[info] Set current project to activiti-preso (in build file:/C:/dev/prototype/activiti-preso/)
Windows, really? Ok, disabling colors.
--- (Running the application from SBT, auto-reloading is enabled) ---
[error] org.jboss.netty.channel.ChannelException: Failed to bind to: 0.0.0.0/0.0.0.0:9000
[error] Use 'last' for the full log.
Run Code Online (Sandbox Code Playgroud) 我想要实现的是"动态"(即基于配置文件中定义的属性)启用/禁用子Spring XML上下文导入的能力.
我想象的是:
<import condition="some.property.name" resource="some-context.xml"/>
Run Code Online (Sandbox Code Playgroud)
解析属性的位置(布尔值)和true时导入上下文,否则不导入.
到目前为止我的一些研究:
编写自定义NamespaceHandler(和相关类),以便我可以在自己的命名空间中注册自己的自定义元素.例如:<myns:import condition="some.property.name" resource="some-context.xml"/>
这种方法的问题在于我不想从Spring复制整个资源导入逻辑,对我来说,我需要委派什么才能做到这一点.
DefaultBeanDefinitionDocumentReader以扩展"import"元素解析和解释的行为(在importBeanDefinitionResource方法中发生).但是我不确定我可以在哪里注册此扩展程序.在工作中,我们的一个目标平台是运行Linux的资源受限的迷你服务器(内核2.6.13,基于旧的Fedora Core的自定义分发).该应用程序是用Java编写的(Sun JDK 1.6_04).Linux OOM杀手被配置为在内存使用超过160MB时终止进程.即使在高负载期间,我们的应用程序也永远不会超过120MB,并且与其他一些活跃的本机进程一起使用,我们仍然可以在OOM限制范围内.
但是,事实证明,Java Runtime.getRuntime().exec()方法是从Java执行外部进程的规范方法,在Linux上有一个特别不幸的实现,导致生成的子进程(暂时)需要相同数量的内存作为父进程,因为复制了地址空间.最终的结果是,一旦我们运行Runtime.getRuntime().exec(),我们的应用程序就会被OOM杀手杀死.
我们目前通过让一个单独的本机程序执行所有外部命令来解决这个问题,并通过套接字与该程序进行通信.这不是最佳的.
在网上发布了这个问题之后,我得到了一些反馈,表明这不应该发生在Linux的"更新"版本上,因为它们使用copy-on-write实现了posix fork()方法,可能意味着它只会复制它需要的页面在需要时修改而不是立即修改整个地址空间.
我的问题是:
背景:我有一个小的Python应用程序,让开发人员在我们公司发布软件的生活更轻松一些.我使用py2exe为Windows构建可执行文件.应用程序以及二进制文件都会检入Subversion.人们只需从SVN检出目录即可进行分发.该程序有大约6种不同的Python库依赖项(例如ElementTree,Mako)
情况:开发人员希望破解此工具的来源,然后在不必构建二进制文件的情况下运行它.目前这意味着他们需要一个python 2.6解释器(这很好),并且还使用easy_install在本地安装了6个库.
问题
轶事:这个过程越独立,就越容易重复.我让我的机器更换为新机器,并经历了不必要的过程,不得不对依赖项进行逆向工程,重新安装distutils,在线搜索库并让它们安装(参见上面的公司互联网限制).
我们正在经历一个非常难以追踪的问题,我们在尝试迭代一组未编组对象时有时会看到ClassCastExceptions .最重要的一点是,有时,在重新启动后的特定代码工作正常.这似乎指向了并发/时间/竞争条件的方向.我可以确认JAXBContext,marshallers和unmarshallers都没有被同时使用.我们已经通过锁定序列化对它们的访问.
但是,由于我们在OSGi平台上运行,其中各个捆绑包通过Spring DM异步初始化,因此可能有2个不同的捆绑包同时创建其JAXBContext.
在任何情况下,我都会感谢任何可能导致这些间歇性 ClassCastExceptions 的解释的指针.间歇性很重要,因为它们表明代码本身通常工作正常,但某些外部因素似乎会影响行为.
这是异常的一个具体示例(注意我删除了公司特定的东西):
Caused by: java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.ElementNSImpl cannot be cast to com.foobar.TunnelType
at com.foobar.NetMonitorImpl.getVpnStatus(NetMonitorImpl.java:180)
Run Code Online (Sandbox Code Playgroud)
第180行的那个方法是for()构造循环在一个解组对象内部的TunnelType对象集合(所述解组工作正常BTW).
鉴于实际的对象解组很好,JAXB在物理上是否可以将ElementNSImpl对象留在嵌套集合中?
运行环境:
我们在具有内存限制的半嵌入式设备上部署应用程序.我们正在分析应用程序的堆转储并攻击最大的消费者.
我们将Spring 2.5和Spring DM 1.1一起使用,我们注意到我们的一些包含更复杂的Spring上下文的bundle会占用相当多的内存,因为Spring似乎保留了包含从XML解析的所有BeanDefinition的整个对象图. .我认为,一旦应用程序初始化并注入所有内容,大部分内容都是不必要的.
是否有Spring的配置选项允许控制此行为?在某种低内存模式下运行?扔掉所有不必要的东西?交易计算时间的大小?
我有一个混合Java/Scala的项目,它是使用Scala库的Java GUI代码.有没有办法编写Scala代码,以便在编译时发出Java枚举?到目前为止我尝试过的方法(密封的case类,扩展Enumeration)似乎生成了正常的类,这使得从Java中使用它们比直接枚举更加繁琐.
假设一个try块中有三个连续的函数调用,并且它们都抛出相同类型的异常.我怎样才能弄清楚哪个函数调用在处理时抛出了捕获的异常?
我想使用 PKCS#7 作为一些加密、签名内容的容器格式,并且我们需要在 CBC 模式下使用 AES 和基于 ISO 10126 的填充。我似乎找不到用于此组合的算法标识符的具体参考。我可以发明自己的工具,但会失去与其他工具的互操作性。
我有以下Java代码来获取给定URL的HTML页面的全部内容.这可以以更有效的方式完成吗?欢迎任何改进.
public static String getHTML(final String url) throws IOException {
if (url == null || url.length() == 0) {
throw new IllegalArgumentException("url cannot be null or empty");
}
final HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
final BufferedReader buf = new BufferedReader(new InputStreamReader(conn.getInputStream()));
final StringBuilder page = new StringBuilder();
final String lineEnd = System.getProperty("line.separator");
String line;
try {
while (true) {
line = buf.readLine();
if (line == null) {
break;
}
page.append(line).append(lineEnd);
}
} finally {
buf.close();
}
return page.toString();
} …Run Code Online (Sandbox Code Playgroud)