Niklas,
Okay, well I have now tried using the
org.apache.mina.integration.spring.SocketConnectorFactoryBean with my
Client implementation and it doesn't work for what I'm trying to
do. Or, I quite simply might not know what I'm doing ;-)
Anyway, here are two methods that I use to create the client
socket connection. The first works and doesn't use Spring to
configure it. The second is using the technique that you
described in your previous email, but never connects, or at least never
passes events to my handler. Also note that the way that I
configure the filters in the first method has a name value relationship
that I can't seem to create using the Spring configuration in
XML. Perhaps this is the problem? Anyway, here's the code:
public void connect() {
log.info("connecting to Jabber...");
ThreadPoolFilter ioThreadPoolFilter = new ThreadPoolFilter();
ThreadPoolFilter protocolThreadPoolFilter = new ThreadPoolFilter();
IoConnector connector = new SocketConnector(); //notice that I use new here
log.debug("connector: " +
connector); //returns connector:
[EMAIL PROTECTED]
connector.getFilterChain().addFirst("ioThreadPool", ioThreadPoolFilter);
connector.getFilterChain().addLast("protocolThreadPool",
protocolThreadPoolFilter);
connector.setConnectTimeout(connectTimeOut);
try {
ConnectFuture future = connector.connect(new InetSocketAddress(
bridgeAccountDAO.getJabberServerHostName(),
bridgeAccountDAO.getJabberServerPort()),
(IoHandler) sessionHandler);
session = future.getSession();
// set the globally accessable version for other threads to
// access:
Scope.setJabberSession(session);
} catch (IOException e) {
System.err.println("Failed to connect.");
e.printStackTrace();
}
}
public void connectUsingSpring() {
log.info("connecting to Jabber with Spring...");
IoConnector connector =
(IoConnector) ctx.getBean("socketConnector"); //I use the
ApplicationContext to retrieve the bean
log.debug("connector: " +
connector); //also returns connector:
org.apache.mina.transport.socket.nio.SocketConnector
ConnectFuture future = connector.connect(new InetSocketAddress(
bridgeAccountDAO.getJabberServerHostName(),
bridgeAccountDAO.getJabberServerPort()),
(IoHandler) sessionHandler);
try {
session = future.getSession();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// set the globally accessable version for other threads to
// access:
Scope.setJabberSession(session);
}
Here are the MINA references in the XML config that I'm using for the ApplicationContext:
<bean id="sessionHandler" class="edu.harvard.mgh.lcs.servers.bridge.JabberSessionHandlerImpl">
<property name="bridgeAccountDAO">
<ref local="bridgeAccountDAO"/>
</property>
<property name="jabbberMessageProcessor">
<ref local="jabberMessageProcessor"/>
</property>
<property name="protocolCodecFactory">
<ref local="protocolCodecFactory"/>
</property>
</bean>
<bean id="socketConnector"
class="org.apache.mina.integration.spring.SocketConnectorFactoryBean">
<property name="filters">
<list>
<ref local="threadPoolFilter"/> <!-- notice that I can't do a
mapping like it's done with Java code -->
<ref local="protocolCodecFilter"/>
</list>
</property>
<property name="connectTimeout" value="300000"/>
</bean>
<bean id="protocolCodecFactory"
class="edu.harvard.mgh.lcs.servers.bridge.codecfilters.JabberCodecFactory">
<property name="charsetName" value="UTF-8"/>
</bean>
<bean id="protocolCodecFilter"
class="org.apache.mina.filter.codec.ProtocolCodecFilter">
<constructor-arg ref="protocolCodecFactory"/>
</bean>
<bean id="threadPoolFilter"
class="org.apache.mina.filter.ThreadPoolFilter">
<!-- Threads will be named IoWorker-1, IoWorker-2, etc -->
<constructor-arg value="IoWorker"/>
<property name="maximumPoolSize" value="10"/>
</bean>
I'm probably missing something obvious here, so let me know if you see anything.
Thanks,
Chris
- Re: MINA FactoryBeans Chris Allen
- Re: MINA FactoryBeans Niklas Therning
- Re: MINA FactoryBeans Niklas Therning
- Re: MINA FactoryBeans Chris Allen
- Re: MINA FactoryBeans Niklas Therning
- Re: MINA FactoryBeans Chris Allen
- Re: MINA FactoryBeans Chris Allen
- Re: MINA FactoryBeans Chris Allen
