From 589901b03688e073eb85b5b51a58cec3c8d5d5e9 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Sun, 7 Aug 2016 23:46:00 +0300 Subject: juick-ws: do not use servlet api directly, refactor components as InitializingBean --- .../com/juick/ws/components/XMPPComponent.java | 46 ++++++++++++---------- 1 file changed, 25 insertions(+), 21 deletions(-) (limited to 'juick-ws/src/main/java/com/juick/ws/components/XMPPComponent.java') diff --git a/juick-ws/src/main/java/com/juick/ws/components/XMPPComponent.java b/juick-ws/src/main/java/com/juick/ws/components/XMPPComponent.java index 544d9179..327b8e71 100644 --- a/juick-ws/src/main/java/com/juick/ws/components/XMPPComponent.java +++ b/juick-ws/src/main/java/com/juick/ws/components/XMPPComponent.java @@ -4,18 +4,21 @@ import com.juick.User; import com.juick.server.MessagesQueries; import com.juick.server.SubscriptionsQueries; import com.juick.server.UserQueries; +import com.juick.ws.s2s.*; import com.juick.xmpp.*; import com.juick.xmpp.extensions.JuickMessage; import com.juick.xmpp.extensions.Nickname; import com.juick.xmpp.extensions.XOOB; -import com.juick.ws.s2s.*; import org.apache.commons.dbcp2.BasicDataSource; import org.apache.commons.lang3.math.NumberUtils; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.core.env.Environment; import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Component; import org.xmlpull.v1.XmlPullParserException; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; +import javax.inject.Inject; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; @@ -34,7 +37,8 @@ import java.util.logging.Logger; * * @author ugnich */ -public class XMPPComponent implements ServletContextListener, Stream.StreamListener, +@Component +public class XMPPComponent implements InitializingBean, DisposableBean, Stream.StreamListener, Message.MessageListener, Iq.IqListener, Presence.PresenceListener { private static final Logger logger = Logger.getLogger(XMPPComponent.class.getName()); @@ -54,6 +58,8 @@ public class XMPPComponent implements ServletContextListener, Stream.StreamListe private final List outCache = Collections.synchronizedList(new ArrayList<>()); private JdbcTemplate sql; final public HashMap childParsers = new HashMap<>(); + @Inject + Environment env; public void addConnectionIn(ConnectionIn c) { synchronized (getInConnections()) { @@ -172,25 +178,23 @@ public class XMPPComponent implements ServletContextListener, Stream.StreamListe } @Override - public void contextInitialized(ServletContextEvent sce) { + public void afterPropertiesSet() { logger.info("component initialized"); - Properties conf = new Properties(); try { - conf.load(sce.getServletContext().getResourceAsStream("/WEB-INF/juick.conf")); - HOSTNAME = conf.getProperty("hostname"); - componentName = conf.getProperty("componentname"); - int componentPort = NumberUtils.toInt(conf.getProperty("component_port"), 5347); - int s2sPort = NumberUtils.toInt(conf.getProperty("s2s_port"), 5269); - JID Jid = new JID(conf.getProperty("xmppbot_jid")); - STATSFILE = conf.getProperty("statsfile"); - keystore = conf.getProperty("keystore"); - keystorePassword = conf.getProperty("keystore_password"); - brokenSSLhosts = Arrays.asList(conf.getProperty("broken_ssl_hosts", "").split(",")); - bannedHosts = Arrays.asList(conf.getProperty("banned_hosts", "").split(",")); + HOSTNAME = env.getProperty("hostname"); + componentName = env.getProperty("componentname"); + int componentPort = NumberUtils.toInt(env.getProperty("component_port"), 5347); + int s2sPort = NumberUtils.toInt(env.getProperty("s2s_port"), 5269); + JID Jid = new JID(env.getProperty("xmppbot_jid")); + STATSFILE = env.getProperty("statsfile"); + keystore = env.getProperty("keystore"); + keystorePassword = env.getProperty("keystore_password"); + brokenSSLhosts = Arrays.asList(env.getProperty("broken_ssl_hosts", "").split(",")); + bannedHosts = Arrays.asList(env.getProperty("banned_hosts", "").split(",")); BasicDataSource dataSource = new BasicDataSource(); - dataSource.setDriverClassName(conf.getProperty("datasource_driver", "com.mysql.jdbc.Driver")); - dataSource.setUrl(conf.getProperty("datasource_url")); + dataSource.setDriverClassName(env.getProperty("datasource_driver", "com.mysql.jdbc.Driver")); + dataSource.setUrl(env.getProperty("datasource_url")); setSql(new JdbcTemplate(dataSource)); bot = new JuickBot(this, Jid); @@ -200,7 +204,7 @@ public class XMPPComponent implements ServletContextListener, Stream.StreamListe Socket routerSocket = null; try { routerSocket = new Socket("localhost", componentPort); - setRouter(new StreamComponent(new JID("s2s"), routerSocket.getInputStream(), routerSocket.getOutputStream(), conf.getProperty("xmpp_password"))); + setRouter(new StreamComponent(new JID("s2s"), routerSocket.getInputStream(), routerSocket.getOutputStream(), env.getProperty("xmpp_password"))); getRouter().addChildParser(new JuickMessage()); getRouter().addListener((Stream.StreamListener) this); getRouter().addListener((Message.MessageListener) this); @@ -234,7 +238,7 @@ public class XMPPComponent implements ServletContextListener, Stream.StreamListe @Override - public void contextDestroyed(ServletContextEvent sce) { + public void destroy() { synchronized (getOutConnections()) { for (Iterator i = getOutConnections().iterator(); i.hasNext();) { ConnectionOut c = i.next(); -- cgit v1.2.3