Tag: tomcat

Java WebSockets:远程端点处于状态

我正在尝试实现一些基于websockets的应用程序,它将与JS客户端密切沟通。 发送消息的代码非常原始: synchronized (session) { if (session.isOpen()) { session.getBasicRemote().sendText(message); } } 对于罕见的发送,它工作正常,但当几个线程试图通过相同的会话(套接字)发送一些消息时,抛出下一个exception(请注意,它不是multithreading问题,因为代码块是通过会话同步的): java.lang.IllegalStateException: The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for called method at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.checkState(WsRemoteEndpointImplBase.java:1015) at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.textStart(WsRemoteEndpointImplBase.java:978) at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendString(WsRemoteEndpointImplBase.java:161) at org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:37) 谷歌目前并没有这种类型的例外,在这个问题上打了几个小时后,仍然没有解决方案。 Java 7.0.21,在Tomcat 7.0.52和Tomcat 8.0.3上测试。 任何答案都非常感谢! 提前致谢。 更新3/11/2014:我使用Jetty 9.1测试了我的应用程序,但没有发生此exception。 我假设这是Tomcat实现错误。

jps没有显示Tomcat进程

我在Ubuntu 10.10上运行Tomcat 6.0.31并使用tge Sun JDK(java-6-sun)。 虽然tomcat正在运行,但是当我运行jps (Java虚拟机进程状态工具)时,它的进程并没有显示出来。 我看到的唯一输出是jps进程本身的pid。 为什么Tomcat进程不显示?

处理大型Java项目中的内存泄漏的最佳实践?

在我参与的几乎所有大型Java项目中,我都注意到应用程序的服务质量随着容器的正常运行时间而降低。 这很可能是由于代码中的内存泄漏造成的。 解决此问题的正确方法显然是追溯问题的根本原因并修复代码中的泄漏。 解决问题的快速而简单的方法就是重新启动Tomcat(或者您正在使用的任何servlet容器)。 这是我的三个问题: 假设您选择通过跟踪问题的根本原因(内存泄漏)来解决问题,您将如何收集数据以放大问题? 假设您通过简单地重新启动容器来选择快速而肮脏的加速方式,您将如何收集数据以选择最佳重启周期? 您是否能够在很长一段时间内部署和运行项目而无需重新启动servlet容器以重新获得快速? 或偶尔的servlet重新启动一个人必须接受的东西?

如何使用EclipseLink和Spring配置动态编织?

如何使用EclipseLink和Spring配置动态编织? 现在我正在尝试使用Junit测试,但后来我必须让它与Tomcat一起工作(我的部门已经标准化了10年之久)。 我遇到两个主要问题: 1. Spring需要一个加载时间织布工: 例外: java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:181) at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109) Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘org.springframework.context.weaving.AspectJWeavingEnabler#0’: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘loadTimeWeaver’: Initialization of bean failed; nested exception is java.lang.IllegalStateException: ClassLoader [sun.misc.Launcher$AppClassLoader] does NOT provide an ‘addTransformer(ClassFileTransformer)’ method. Specify […]

tomcat请求的资源()不可用

我知道这是一个非常常见的问题,因为我在包括SO在内的多个论坛中发现了许多与此相关的问题。 但我还没有找到解决方案我的web.xml(位于WEB-INF) SMSProjectNew index.html ReceiveMessagesServlet ReceiveMessagesServlet com.sendreceive.ReceiveMessagesServlet ReceiveMessagesServlet /ReceiveMessagesServlet html页面index.html,位于WebContent文件夹中 Insert title here The application started successfully version 1:27 最后是servlet,ReceiveMessagesServlet,位于src \ com.sendreceive包com.sendreceive中; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ReceiveMessagesServlet extends HttpServlet { private static final long serialVersionUID = 1L; public ReceiveMessagesServlet() { super(); // TODO Auto-generated constructor stub } […]

编写jax-ws Web服务并在没有XSD的情况下生成WSDL

我在java上为tomcat应用服务器编写了一个简单的JAX-WS Web服务。 我有一个接口和实现类: 接口 @WebService(name = “myWs”) @SOAPBinding(style = Style.RPC) public interface IMyWs { @WebMethod(operationName = “getUser”) Response getUser(@WebParam(name = “phone”, mode = Mode.IN) String phone); } 履行 @WebService(endpointInterface = “ge.mari.IMyWs”) public class MyWs implements IMyWs { @Override public Response getUser(String phone) { // SOME CODE return response; } } 我的问题是,在我的wsdl文件中,响应类是在xsd文件中定义的。 这是我的wsdl文件的片段 如何使Web服务生成WSDL文件中的所有类型而不是单独的XSD文件? 我应该更改任何配置或添加一些注释到我的Web服务?

使用jersey ServletContainer时从web.xml获取配置数据

我正在使用泽西在Tomcat中创建一个webapp。 我还没有创建一个Servlet,我只使用了jersey ServletContainer和一些Resource类。 我的web.xml: Jersey REST Service com.sun.jersey.spi.container.servlet.ServletContainer com.sun.jersey.config.property.packages com.mycompany.myproduct.rest 1 Jersey REST Service /* 我的webapp需要读取一些配置值。 我的印象是这样做的好方法是使用context-Params,如下所示: … This is a context parameter example ContextParam ContextParam value 这是最好的方法吗? 如何从我的资源类中访问这些上下文参数? 这是一个示例资源类: @Path(“/api/ping”) public class PingResource { @GET @Produces(MediaType.TEXT_PLAIN) public String helloWorld() { return “pong”; } }

在数据库更新期间防止会话超时

背景 Web应用程序调用存储过程以执行密集数据库更新。 web.xml的相关部分更新为四小时: 240 可用于该解决方案的技术包括Java 1.4.2,Struts 2,Tomcat 5.5和Apache commons。 大多数其他技术(例如jQuery)是不允许的。 问题 更新大约需要一个小时才能运行,但是四小时的配置值违反了公司标准(有充分理由)。 生产中不允许四小时超时配置。 题 在数据库更新执行时,什么将确保请求不会超时? 思路 前两种情况我担心的是,生成的进程最终将被Servlet容器杀死。 页面刷新 将数据库更新过程生成为后台任务。 让Servlet不断刷新页面以检查完成情况。 JavaScript Ping 将数据库更新过程生成为后台任务。 让JavaScript代码ping服务器一段时间。 类似于在JSF中长时间处理期间防止会话超时 ,但没有jQuery。 更新服务器 编写一个侦听请求的简单服务器: Servlet向侦听器发送请求。 侦听器运行更新。 由于服务器独立于Tomcat运行,因此不会发生会话超时。 数据库更新将运行完成而不会被终止。 这有很多问题(error handling不是我最关心的问题),并且可能是最后的选择。 优化 优化查询以在30分钟内完成(最大允许超时)是可能的,但很可能无法充分优化查询。 硬件 不幸的是,升级数据库硬件不是一种选择。 非常感谢!

使用Vaadin生成慢速HTML

我是一个有问题的开发人员;)目前我们的项目已接近尾声(使用Vaadin)但是…… 我们在其中一个视图中显示简单数据时遇到了一些麻烦。 (显示超过500 KB的数据,以及Vaadin完成生成后超过15K DOM元素… +批次,批次和批次完成之前的很多秒)。 我的任务是找出如何使这个尽可能小和尽快,所以我的第一个猜测是使用一些其他布局,而不是那些可用于标准Vaadin的布局。 我使用了WeeLayout,DashLayout和CssLayout(默认),比较如下: weeLayout – page size: 990 KB – DOM elements (SMALL): 1454 – DOM elements (BIG): 15423 cssLayout – page size: 886 KB – DOM elements (SMALL): 1434 – DOM elements (BIG): 13799 DashLayout – page size: 938 KB – DOM elements (SMALL): 1408 – DOM elements (BIG): […]

FileInputStream在哪个文件夹中查找?

我用的是这条线 FileInputStream stream = new FileInputStream(“myfile.properties”); 在不指定路径的情况下打开属性文件。 在Apache Tomcat上运行时,无法找到该文件。 我将文件放入应用程序的根文件夹中。 Java在哪个文件夹中查找? 我无法改变路径,因为代码不是我的。