You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2007/06/27 10:34:11 UTC
svn commit: r551091 - in
/incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src:
main/java/org/apache/servicemix/bean/
main/java/org/apache/servicemix/bean/support/
test/java/org/apache/servicemix/bean/ test/java/org/apache/servicem...
Author: gnodet
Date: Wed Jun 27 01:34:09 2007
New Revision: 551091
URL: http://svn.apache.org/viewvc?view=rev&rev=551091
Log:
SM-892: memory leak in org.apache.servicemix.bean.BeanEndpoint
Modified:
incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/main/java/org/apache/servicemix/bean/BeanEndpoint.java
incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/main/java/org/apache/servicemix/bean/support/Request.java
incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/ListenerBeanEndpointTest.java
incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/SpringComponentTest.java
incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/beans/ListenerBean.java
Modified: incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/main/java/org/apache/servicemix/bean/BeanEndpoint.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/main/java/org/apache/servicemix/bean/BeanEndpoint.java?view=diff&rev=551091&r1=551090&r2=551091
==============================================================================
--- incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/main/java/org/apache/servicemix/bean/BeanEndpoint.java (original)
+++ incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/main/java/org/apache/servicemix/bean/BeanEndpoint.java Wed Jun 27 01:34:09 2007
@@ -393,8 +393,8 @@
protected void checkEndOfRequest(Request request, Object corId) {
if (request.getExchange().getStatus() != ExchangeStatus.ACTIVE) {
ReflectionUtils.callLifecycleMethod(request.getBean(), PreDestroy.class);
- request.setBean(null);
- request.setExchange(null);
+ //request.setBean(null);
+ //request.setExchange(null);
requests.remove(corId);
}
}
Modified: incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/main/java/org/apache/servicemix/bean/support/Request.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/main/java/org/apache/servicemix/bean/support/Request.java?view=diff&rev=551091&r1=551090&r2=551091
==============================================================================
--- incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/main/java/org/apache/servicemix/bean/support/Request.java (original)
+++ incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/main/java/org/apache/servicemix/bean/support/Request.java Wed Jun 27 01:34:09 2007
@@ -27,10 +27,10 @@
public class Request {
private Object bean;
private MessageExchange exchange;
- private Set<String> sentExchanges = new HashSet<String>();
+ private Set<String> sentExchanges;
// Keep track of callbacks already called, so that the same callback
// can not be called twice
- private Map<Method, Boolean> callbacks = new HashMap<Method, Boolean>();
+ private Map<Method, Boolean> callbacks;
public Request() {
}
@@ -69,6 +69,9 @@
* @param id the id of the exchange sent
*/
public void addSentExchange(String id) {
+ if (sentExchanges == null) {
+ sentExchanges = new HashSet<String>();
+ }
sentExchanges.add(id);
}
@@ -76,7 +79,10 @@
* @return the callbacks
*/
public Map<Method, Boolean> getCallbacks() {
+ if (callbacks == null) {
+ callbacks = new HashMap<Method, Boolean>();
+ }
return callbacks;
}
-}
\ No newline at end of file
+}
Modified: incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/ListenerBeanEndpointTest.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/ListenerBeanEndpointTest.java?view=diff&rev=551091&r1=551090&r2=551091
==============================================================================
--- incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/ListenerBeanEndpointTest.java (original)
+++ incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/ListenerBeanEndpointTest.java Wed Jun 27 01:34:09 2007
@@ -18,6 +18,7 @@
import javax.jbi.messaging.ExchangeStatus;
import javax.jbi.messaging.InOnly;
+import javax.jbi.messaging.InOut;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.servicedesc.ServiceEndpoint;
@@ -46,6 +47,30 @@
exchange.setEndpoint(se);
exchange.getInMessage().setContent(new StringSource("<hello>world</hello>"));
client.sendSync(exchange);
+
+ assertExchangeWorked(exchange);
+
+ ListenerBean bean = (ListenerBean) getBean("listenerBean");
+ MessageExchange answer = bean.getLastExchange();
+
+ log.info("Bean's process() method has been invoked: " + answer);
+
+ assertNotNull("Bean's process() method should bave been invoked", answer);
+ }
+
+ public void testSendingInOutToDynamicEndpointForExchangeProcessorBeanWithFooOperation() throws Exception {
+ // now lets make a request on this endpoint
+ DefaultServiceMixClient client = new DefaultServiceMixClient(jbi);
+
+ DocumentFragment epr = URIResolver.createWSAEPR("bean:listenerBean");
+ ServiceEndpoint se = client.getContext().resolveEndpointReference(epr);
+ assertNotNull("We should find a service endpoint!", se);
+
+ InOut exchange = client.createInOutExchange();
+ exchange.setEndpoint(se);
+ exchange.getInMessage().setContent(new StringSource("<hello>world</hello>"));
+ client.sendSync(exchange);
+ client.done(exchange);
assertExchangeWorked(exchange);
Modified: incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/SpringComponentTest.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/SpringComponentTest.java?view=diff&rev=551091&r1=551090&r2=551091
==============================================================================
--- incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/SpringComponentTest.java (original)
+++ incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/SpringComponentTest.java Wed Jun 27 01:34:09 2007
@@ -18,6 +18,7 @@
import javax.jbi.messaging.ExchangeStatus;
import javax.jbi.messaging.InOnly;
+import javax.jbi.messaging.InOut;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.NormalizedMessage;
import javax.xml.namespace.QName;
@@ -50,6 +51,24 @@
log.info("The bean has been invoked: " + bean.getLastExchange());
}
+ public void testSendingInOutToStaticEndpoint() throws Exception {
+ DefaultServiceMixClient client = new DefaultServiceMixClient(jbi);
+ InOut me = client.createInOutExchange();
+ me.setService(new QName("urn:test", "service"));
+ NormalizedMessage message = me.getInMessage();
+
+ message.setProperty("name", "cheese");
+ message.setContent(new StringSource("<hello>world</hello>"));
+
+ client.sendSync(me);
+ client.done(me);
+ assertExchangeWorked(me);
+
+ ListenerBean bean = (ListenerBean) getBean("listenerBean");
+ assertNotNull("Bean should bave been invoked", bean.getLastExchange());
+
+ log.info("The bean has been invoked: " + bean.getLastExchange());
+ }
protected void assertExchangeWorked(MessageExchange me) throws Exception {
if (me.getStatus() == ExchangeStatus.ERROR) {
Modified: incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/beans/ListenerBean.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/beans/ListenerBean.java?view=diff&rev=551091&r1=551090&r2=551091
==============================================================================
--- incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/beans/ListenerBean.java (original)
+++ incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/beans/ListenerBean.java Wed Jun 27 01:34:09 2007
@@ -19,12 +19,14 @@
import javax.annotation.Resource;
import javax.jbi.messaging.DeliveryChannel;
import javax.jbi.messaging.ExchangeStatus;
+import javax.jbi.messaging.InOnly;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.MessagingException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.servicemix.MessageExchangeListener;
+import org.apache.servicemix.jbi.util.MessageUtil;
/**
* A simple POJO which implements the {@link MessageExchangeListener} interface
@@ -44,8 +46,13 @@
public void onMessageExchange(MessageExchange exchange) throws MessagingException {
this.lastExchange = exchange;
LOG.info("Received exchange: " + exchange);
- exchange.setStatus(ExchangeStatus.DONE);
- channel.send(exchange);
+ if (exchange instanceof InOnly) {
+ exchange.setStatus(ExchangeStatus.DONE);
+ channel.send(exchange);
+ } else if (exchange.getStatus() == ExchangeStatus.ACTIVE) {
+ MessageUtil.transferInToOut(exchange, exchange);
+ channel.send(exchange);
+ }
}
public MessageExchange getLastExchange() {