warden容器能否运行交互式的java应用?
2014-02-17 21:55
197 查看
大概从13年11月份一直在纠结这个问题,在warden容器里面,其实是无法运行交互式的应用的。
我来举两个非常简单的java例子,一个是每隔1s输出一次时间的循环,另一个是从命令行读取int,并输出。
程序1:
import java.util.Date;
public final class ConsoleTest {
public static void main(String[] args) throws InterruptedException {
while(1==1) {
Date date = new Date();
System.out.println(date.toString());
Thread.sleep(1000);
}
}
}
程序2:
import java.util.Scanner;
public class InputTest{
public static void main(String []args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
System.out.println("n="+n);
}
}
结果程序1可以成功部署,但是程序2不行。
刚开始,我只是怀疑,可能跟warden容器不支持带有输入等待的进程有关。
但是,没有证据佐证,而且从理论上讲,warden只是一个运行进程的小型linux容器,为啥有这种莫名其妙的限制。再加上老师也是这个意见。
于是我开始各种跑偏,怀疑是我写的buildpack有问题(因为我最终希望部署的是一个tuscany应用,需要自己提供buildpack)
怀疑设置的java环境变量有问题,主要是XMX和XSS,各种调节参数,都没有用。
郁闷的13年结束了,我也没有意识到这可能是warden容器的设计理念的问题。当然,现在我还是不能确信这一点,但是通过上面2个简单的java程序的验证,
我相信这种可能性很大,并且正在发邮件,需求帮助。
最后,我将tuscany部署成功后的一段等待用户输入的代码给注释掉了,终于可以在CF平台上成功部署tuscany应用了。
痛哭流涕啊,由于这个问题,14年的春节都没过好,中间一度想要放弃,还好在导师的帮助下,坚持下来了,总算是有点进步。
我来举两个非常简单的java例子,一个是每隔1s输出一次时间的循环,另一个是从命令行读取int,并输出。
程序1:
import java.util.Date;
public final class ConsoleTest {
public static void main(String[] args) throws InterruptedException {
while(1==1) {
Date date = new Date();
System.out.println(date.toString());
Thread.sleep(1000);
}
}
}
程序2:
import java.util.Scanner;
public class InputTest{
public static void main(String []args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
System.out.println("n="+n);
}
}
结果程序1可以成功部署,但是程序2不行。
刚开始,我只是怀疑,可能跟warden容器不支持带有输入等待的进程有关。
但是,没有证据佐证,而且从理论上讲,warden只是一个运行进程的小型linux容器,为啥有这种莫名其妙的限制。再加上老师也是这个意见。
于是我开始各种跑偏,怀疑是我写的buildpack有问题(因为我最终希望部署的是一个tuscany应用,需要自己提供buildpack)
怀疑设置的java环境变量有问题,主要是XMX和XSS,各种调节参数,都没有用。
郁闷的13年结束了,我也没有意识到这可能是warden容器的设计理念的问题。当然,现在我还是不能确信这一点,但是通过上面2个简单的java程序的验证,
我相信这种可能性很大,并且正在发邮件,需求帮助。
最后,我将tuscany部署成功后的一段等待用户输入的代码给注释掉了,终于可以在CF平台上成功部署tuscany应用了。
痛哭流涕啊,由于这个问题,14年的春节都没过好,中间一度想要放弃,还好在导师的帮助下,坚持下来了,总算是有点进步。
相关文章推荐
- Docker运行java应用,应用日志时间和容器时间不一致
- 有关java桌面应用如何在别的电脑上运行
- 运行Java应用必须通过main()方法吗?
- Java并发容器(一) CocurrentHashMap的应用及实现
- Java EE是 J2EE的一个新的名称,之所以改名,目的还是让大家清楚J2EE只是Java企业应用.随着WEB和EJB容器概念诞生,使得软件应用业开始担心SUN的伙伴们是否还在Java平台上不断推出
- 用 Deployment 运行应用 - 每天5分钟玩转 Docker 容器技术(123)
- 创建容器及Dokcer中运行应用
- Android studio 出现java.lang.NoClassDefFoundError错误的一种解决方案 5.0以下机型无法运行应用报错
- 有关java桌面应用如何在别的电脑上运行
- Docker Java应用日志时间和容器时间不一致
- Java应用程序运行时监控方法(一)——JVMTI的应用
- 借助开源工具高效完成Java应用的运行分析
- 用Annotation,Future,动态代理实现自己的JAVA方法运行超时应用
- 借助开源工具高效完成Java应用的运行分析
- Java应用打包后运行需要注意编码问题
- Java进阶之反射的简单应用:通过反射运行配置文件内容
- Java程序运行在Docker等容器环境有哪些新问题
- Tomcat容器运行struts2+spring+mybatis架构的java web应用程序简单分析
- 用 Deployment 运行应用 - 每天5分钟玩转 Docker 容器技术(123)