Tag: tomcat

Jersey SSE – eventOutput.write在发送第一条消息后抛出nullpointer

我使用Jersey实现了一个Restful Web界面,用于通过HTTP将从内部JMS发布者收到的消息发送到外部客户端。 我已经设法将测试消息发送到Java客户端,但线程在完成write()执行,关闭连接并阻止进一步通信之前抛出空指针exception。 这是我的资源类: @GET @Path(“/stream_data”) @Produces(SseFeature.SERVER_SENT_EVENTS) public EventOutput getServerSentEvents(@Context ServletContext context){ final EventOutput eventOutput = new EventOutput(); new Thread( new ObserverThread(eventOutput, (MService) context.getAttribute(“instance”)) ).start(); return eventOutput; } 这是我的线程的运行方法: public class ObserverThread implements Observer, Runnable { //constructor sets eventOutput & mService objects //mService notifyObservers() called when JMS message received //text added to Thread’s message queue […]

org.apache.axis2.AxisFault:在Webservice中传递对象数组时,Unknow类型无法序列化

我创建了一个以DTO作为参数的Web服务。 DTO包含一系列对象。 我已经生成了WSDL,骨架和客户端。 我试图调用webservice,如果我传递字符串数组说:Serializable [] array = new String [] {“a”,“n”}; 它工作正常。 现在我的要求是传递HashMaps数组我无法这样做,即使HashMap实现了Serializable。 HashMap hashMap1 = new HashMap(); HashMap hashMap2 = new HashMap(); hashMap1.put(“key1”, “value1”); hashMap2.put(“key1”, “value1”); Serializable[] maps = new HashMap[] { hashMap1, hashMap2 }; myDTO.setParams(maps); request.setDTO(myDTO); InvokeServiceResponse response = stub.serviceMethod(request); 我正在使用Axis2。 2.1.5,Tomcat 6和Eclipse Helios。 堆栈跟踪我在这里粘贴参考。 org.apache.axis2.AxisFault: Unknow type can not serialize at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430) […]

停止Tomcat不会删除Derby db.lck

(编辑:我已经为问题添加了一笔赏金。我找到了一个解决方法(在下面发布的答案),但我希望有人可以解释为什么首先需要解决方法。) 我有一个Spring webapp,它在开发过程中连接到Derby数据库。 这在第一次运行webapp时工作正常,但在后续运行中,它在启动时失败,“Derby的另一个实例可能已经启动了数据库”SQLException。 我知道这是因为当我关闭Tomcat时,与Derby的连接没有被关闭,即使我希望Spring自动处理它。 所以我的问题是,如何正确断开与Derby的连接? 不仅在手动停止Tomcat期间,而且在热部署新的.war文件期间? 我想避免使用Derby服务器,我也使用注释而不是XML配置。 这是我原来的PersistConfig类: package com.example.spring.config; import java.beans.PropertyVetoException; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import org.apache.derby.jdbc.EmbeddedDataSource; import org.hibernate.SessionFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.datasource.SimpleDriverDataSource; import org.springframework.jdbc.datasource.embedded.ConnectionProperties; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseConfigurer; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; import org.springframework.orm.hibernate4.HibernateExceptionTranslator; import org.springframework.orm.hibernate4.HibernateTransactionManager; import org.springframework.orm.hibernate4.LocalSessionFactoryBean; import org.springframework.orm.jpa.JpaVendorAdapter; import org.springframework.orm.jpa.vendor.Database; import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import org.springframework.transaction.annotation.EnableTransactionManagement; […]

HTTP状态404 Eclipse Tomcat 7

我在尝试运行我的应用程序时收到错误404。 Tomcat服务器,启动和同步。 动态模块版本为2.5。 以前我使用动态模块版本3.o但它没有用。 我在其中一篇post中读到最好使用2.5。 所以我创建了新项目,仍然得到这个4044错误。 我认为这是技术错误。

Tomcat – Servlet响应阻塞 – 刷新问题

我正在使用Tomcat 6.0.36和JRE 1.5.0,我正在开发Windows 7上的开发工作。 作为我正在做的一些工作的概念certificate,从Java代码我是HTTP通过套接字将一些XML发布到servlet。 然后servlet回传xml。 在我的第一个实现中,我将两端的输入流交给XML文档工厂,以提取通过线路发送的xml。 这在servlet中顺利运行但在客户端失败了。 事实certificate它在客户端失败了,因为响应的读取阻塞了文档工厂超时并在整个响应到来之前抛出exception。 (文档工厂的行为现在没有实际意义,因为正如我在下面描述的那样,我在不使用文档工厂的情况下遇到了相同的阻塞问题。) 为了尝试解决这个阻塞问题,我提出了一个更简单的客户端代码版本和servlet。 在这个更简单的版本中,我从等式中删除了文档构建器。 双方的代码现在只是从各自的输入流中读取文本。 不幸的是,我仍然对响应有这个阻塞问题,正如我在下面描述的那样,它只是通过简单地调用response.flushBuffer()来解决。 谷歌搜索只搜索了我能找到的一个相关主题( Tomcat没有刷新响应缓冲区 ),但这不是完全相同的问题。 我已经包含了我的代码并解释了下面的确切问题。 这是我的servlet代码(请记住,这是一个简单的概念validation代码,而不是生产代码), import java.io.InputStreamReader; import java.io.LineNumberReader; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public final class EchoXmlServlet extends HttpServlet { public void init(ServletConfig config) throws ServletException { System.out.println(“EchoXmlServlet loaded.”); } public void doGet(HttpServletRequest request, HttpServletResponse […]

Tomcat 6文件上传策略

我一直在使用tomcat,但仍然无法找到一个好的方法来上传文件。 只是想知道你们如何处理文件上传。 您知道如何在应用程序中创建符号链接到另一个fs。 但是默认情况下,tomcat会移除符号链接以及符号链接中的所有内容。 所以这为自动部署添加了额外的步骤。 我知道有补丁可以改变行为。 但这将为tomcat升级添加额外的步骤,并且补丁可能永远不可用。 我使用fckeditor(带有它的servlet连接器),spring,struts 1/2,有时只是用于fileupload的普通servlet。 做这个的最好方式是什么? 另一个要求是,上传文件应该是可查看的并且位置很好,这样备份脚本可以轻松备份,理想情况下不在应用程序内(或者只是应用程序中的符号链接) 欢迎任何评论! =)

从Java 6 + Tomcat 6升级到Java 8 + Tomcat 8时的垃圾收集器使用情况

我们正在从Java 6和Tomcat 6升级到Java 1.8.0_45和Tomcat 8.0.23,Linux服务器,64位。 我正在比较内存使用情况,而我正面临一种奇怪的行为。 这就是Eden Space在Tomcat 8中使用Java 8的方式,没有流量,只是启动和空闲: 这就是Java 6的标准,对我来说是标准的: 两个JVM的配置方式基本相同,基本上: XX:+UseParallelGC -XX:+UseParallelOldGC -XX:+DisableExplicitGC -Xms768m -Xmx2048m -Xmn400m 使用Java 8和Tomcat 8,小型GC几乎总是在运行,而tomcat日志显示如下: 1301,121: [GC (Allocation Failure) [PSYoungGen: 408960K->352K(409088K)] 1126151K->717559K(1915392K), 0,0093033 secs] [Times: user=0,02 sys=0,00, real=0,01 secs] 您是否知道JVM 8的一些特殊配置或我必须做的事情才能拥有与之前相同的行为? 编辑: 30分钟后,伊甸园空间是:

在Tomcat 8上配置SSL和连接超时

我设置了一个密钥库并从openssl.com获得了SSL证书。 我遵循的具体步骤如下: https : //drive.google.com/file/d/0B6PUGo7cBLcDTzdkc0pzT2pTMk0/view?usp=sharing 不幸的是,即使完全按照他们对tomcat的说明并使用客户支持,我的https连接也会超时。 好像tomcat已启动并运行,正在侦听端口443,但我不知道如何更深入地调试。 Http请求服务很好,所以我知道tomcat本身工作正常。 [ec2-user@ip- logs]$ sudo netstat -tunlp | grep 443 tcp6 0 0 :::443 :::* LISTEN 19407/java [ec2-user@ip- logs]$ ps -ef | grep java root 19407 1 1 23:03 pts/0 00:00:06 /usr/java/jre1.8.0_60//bin/java -Djava.util.logging.config.file=/usr/apache-tomcat-8.0.26//conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/apache-tomcat-8.0.26//endorsed -classpath /usr/apache-tomcat-8.0.26//bin/bootstrap.jar:/usr/apache-tomcat-8.0.26//bin/tomcat-juli.jar -Dcatalina.base=/usr/apache-tomcat-8.0.26/ -Dcatalina.home=/usr/apache-tomcat-8.0.26/ -Djava.io.tmpdir=/usr/apache-tomcat-8.0.26//temp org.apache.catalina.startup.Bootstrap start ec2-user 19449 18021 0 23:13 pts/0 00:00:00 […]

Out Of Memory Tomcat(无法创建新的本机线程)

在给出错误tomcat退出(关闭)之后,我正在为我的tomcat中的一个部署我的应用程序而持续outofmemory错误。 我拿了日志文件,发现了这个 SEVERE: Error allocating socket processor java.lang.OutOfMemoryError: unable to create new native thread at java.lang.Thread.start0(Native Method) at java.lang.Thread.start(Thread.java:597) at org.apache.tomcat.util.net.JIoEndpoint$Worker.start(JIoEndpoint.java:513) at org.apache.tomcat.util.net.JIoEndpoint.newWorkerThread(JIoEndpoint.java:744) at org.apache.tomcat.util.net.JIoEndpoint.createWorkerThread(JIoEndpoint.java:723) at org.apache.tomcat.util.net.JIoEndpoint.getWorkerThread(JIoEndpoint.java:757) at org.apache.tomcat.util.net.JIoEndpoint.processSocket(JIoEndpoint.java:789) at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:355) at java.lang.Thread.run(Thread.java:619) 18 Feb, 2015 5:43:30 PM org.apache.tomcat.util.net.JIoEndpoint createWorkerThread INFO: Maximum number of threads (750) created for connector with address null and port 80 […]

如何清除ResourceBundle缓存

这是使用Guice在Tomcat上运行的webapp。 根据文档,我们应该能够调用ResourceBundle.clearCache(); 清除ResourceBundle缓存并可能从bundle属性文件中获取最新信息。 我们还尝试了以下方法: Class klass = ResourceBundle.getBundle(“my.bundle”).getClass().getSuperclass(); Field field = klass.getDeclaredField(“cacheList”); field.setAccessible(true); ConcurrentHashMap cache = (ConcurrentHashMap) field.get(null); cache.clear(); // If i debug here I can see the cache is now empty! 和 ResourceBundle.clearCache(this.class.getClassLoader()); 我期待的行为是: 启动tomcat并点击页面,然后显示“Hello World” 将包含“Hello World”的属性文件更改为“Goodbye Earth” 使用servlet清除缓存 点击页面,期待看到’Goodbye Earth’ 所以问题是,ResourceBundle.clearCache()实际上是如何工作的? 还有一些我们需要清除的通用文件缓存吗?