[
https://issues.apache.org/jira/browse/DIRMINA-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17904073#comment-17904073
]
Alexander B edited comment on DIRMINA-1185 at 12/9/24 9:20 AM:
---------------------------------------------------------------
This is the main part of the class for this scenario. We use the object of type
{_}AbstractIoService _to handle other cases (like _NioSocketConnector{_}) in
the code aswell on a more abstract way. But for this exception, just the code
for NioSocketAcceptor is executed.
{code:java}
public class Sink extends IoHandlerAdapter {
private AbstractIoService acceptor;
protected void init() {
acceptor = new NioSocketAcceptor();
((NioSocketAcceptor)acceptor).setReuseAddress(true);
acceptor.getStatistics().setThroughputCalculationInterval(1);
acceptor.setHandler(this);
InetSocketAddress address = new InetSocketAddress(2004);
((NioSocketAcceptor)acceptor).bind(address);
}
protected void dispose() {
if (null != acceptor) {
((NioSocketAcceptor)acceptor).unbind();
}
}
// all overwritten mina methods for IoHandlerAdapter
}
{code}
The tomcat is included via pom.xml
{code:java}
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<id>tomcat-run</id>
<goals>
<goal>exec-war-only</goal>
</goals>
<phase>package</phase>
<configuration>
<path>/</path>
<serverXml>src/main/tomcatconf/server.xml</serverXml>
<attachartifactclassifier>server</attachartifactclassifier>
<attachartifactclassifiertype>jar</attachartifactclassifiertype>
</configuration>
</execution>
</executions>
</plugin>
{code}
For HTTPS the user specific `<serverXml>` is included and looks like:
{code:java}
<Service name="Catalina">
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000"
maxThreads="100" scheme="https" secure="true" SSLEnabled="true"
keystoreFile="<PathToKeystoreFile>" keystorePass="<PasswordForKeystore>"
clientAuth="false" sslProtocol="TLS"/>
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps" unpackWARs="true"
autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u
%t "%r" %s %b" />
</Host>
</Engine>
</Service>
{code}
was (Author: abuechel):
This is the main part of the class for this scenario. We use the object of type
_AbstractIoService _to handle other cases (like _NioSocketConnector_) in the
code aswell on a more abstract way. But for this exception, just the code for
NioSocketAcceptor is executed.
{code:java}
public class Sink extends IoHandlerAdapter {
private AbstractIoService acceptor;
protected void init() {
acceptor = new NioSocketAcceptor();
((NioSocketAcceptor)acceptor).setReuseAddress(true);
acceptor.getStatistics().setThroughputCalculationInterval(1);
acceptor.setHandler(this);
InetSocketAddress address = new InetSocketAddress(2004);
((NioSocketAcceptor)acceptor).bind(address);
}
protected void dispose() {
if (null != acceptor) {
((NioSocketAcceptor)acceptor).unbind();
}
}
// all overwritten mina methods for IoHandlerAdapter
}
{code}
The tomcat is incldude via pom.xml
{code:java}
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<id>tomcat-run</id>
<goals>
<goal>exec-war-only</goal>
</goals>
<phase>package</phase>
<configuration>
<path>/</path>
<serverXml>src/main/tomcatconf/server.xml</serverXml>
<attachartifactclassifier>server</attachartifactclassifier>
<attachartifactclassifiertype>jar</attachartifactclassifiertype>
</configuration>
</execution>
</executions>
</plugin>
{code}
For HTTPS the user specific `<serverXml>` is included and looks like:
{code:java}
<Service name="Catalina">
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000"
maxThreads="100" scheme="https" secure="true" SSLEnabled="true"
keystoreFile="<PathToKeystoreFile>" keystorePass="<PasswordForKeystore>"
clientAuth="false" sslProtocol="TLS"/>
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps" unpackWARs="true"
autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u
%t "%r" %s %b" />
</Host>
</Engine>
</Service>
{code}
> Question about Unbinding NioAcceptor
> ------------------------------------
>
> Key: DIRMINA-1185
> URL: https://issues.apache.org/jira/browse/DIRMINA-1185
> Project: MINA
> Issue Type: Bug
> Components: Core
> Affects Versions: 2.1.8
> Reporter: Alexander B
> Priority: Major
>
> Hi there,
> We have an application (Tomcat7 , Java8), which uses Mina 2.1.8. The
> intention is to open a port (in this example 2004) and close this connection
> object in case nobody will be connected. Then after a moment a new binding
> should be performed on this object.
> Until today this Tomcat ran on HTTP. I have switched to HTTPS and actually I
> did not touch any code, which includes/extends any Mina-classes.
> In the first case (Tomcat running on HTTP), there is an instance of
> NioSocketAcceptor, which will be `unbind()`, if there is no connection after
> a specific time. Then a reconnect (new bind on port 2004) will be performed
> and the same port will be opened again. This works fine.
> In the second case (Tomcat running on HTTPS with the following changes: I
> created a keystore, integrated it into the project and adapted tomcat's
> server.xml) after a specific time I called unbind() on the
> NioSocketAccepter-object and then a reconnect we will performed again. In
> this moment, the new binding crashes with the message :
> ```
> java.io.IOException: Error while binding on 0.0.0.0/0.0.0.0:2004
> at
> org.apache.mina.transport.socket.nio.NioSocketAcceptor.open(NioSocketAcceptor.java:301)
> at
> org.apache.mina.transport.socket.nio.NioSocketAcceptor.open(NioSocketAcceptor.java:52)
> at
> org.apache.mina.core.polling.AbstractPollingIoAcceptor$Acceptor.registerHandles(AbstractPollingIoAcceptor.java:621)
> at
> org.apache.mina.core.polling.AbstractPollingIoAcceptor$Acceptor.run(AbstractPollingIoAcceptor.java:518)
> at
> org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> at java.lang.Thread.run(Thread.java:748)
> Caused by: java.net.BindException: Address already in use: bind
> at sun.nio.ch.Net.bind0(Native Method)
> at sun.nio.ch.Net.bind(Net.java:461)
> at sun.nio.ch.Net.bind(Net.java:453)
> at
> sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:222)
> at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:85)
> at
> org.apache.mina.transport.socket.nio.NioSocketAcceptor.open(NioSocketAcceptor.java:296)
> ... 7 common frames omitted
> ```
> Do you know, if there are any issues regarding the unbinding process in Mina
> in combination with a running Tomcat on HTTPS? Or do I have to change any
> implementation including mina classes?
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]