James Server v3/POP protocols-pop3 Dev_Kyle 2014. 9. 23. 17:57 ㅁ SMTP , POP, IMAP 중에 pop 이 그나마 만만해보여서 먼저~ <!-- POP3 Server --> <import resource="classpath:META-INF/spring/pop3server-context.xml"/> <bean id="pop3server" class="org.apache.james.pop3server.netty.POP3ServerFactory"> <property name="protocolHandlerLoader" ref="protocolhandlerloader"/> <property name="fileSystem" ref="filesystem"/> </bean> @PostConstruct public void init() throws Exception { servers = createServers(log, config); for (AbstractConfigurableAsyncServer server: servers) { server.init(); } } @PostConstruct public final void init() throws Exception { if (isEnabled()) { buildSSLContext(); preInit(); executionHandler = createExecutionHander(); bind(); mbeanServer = ManagementFactory.getPlatformMBeanServer(); registerMBean(); getLogger().info("Init " + getServiceType() + " done"); } } @Override protected void preInit() throws Exception { super.preInit(); POP3Protocol protocol = new POP3Protocol(getProtocolHandlerChain(), theConfigData, new ProtocolLoggerAdapter(getLogger())); coreHandler = new BasicChannelUpstreamHandler(protocol, getEncryption()); } @Override protected String getDefaultJMXName() { return "pop3server"; } @Override protected ChannelUpstreamHandler createCoreHandler() { return coreHandler; } @Override protected Class<? extends HandlersPackage> getCoreHandlersPackage() { return CoreCmdHandlerLoader.class; } public abstract class AbstractProtocolAsyncServer extends AbstractConfigurableAsyncServer { private ProtocolHandlerChainImpl handlerChain; private ProtocolHandlerLoader loader; private HierarchicalConfiguration config; @Inject public void setProtocolHandlerLoader(@Named("protocolhandlerloader") ProtocolHandlerLoader loader) { this.loader = loader; } @Override protected void preInit() throws Exception { super.preInit(); handlerChain = new ProtocolHandlerChainImpl(loader, config.configurationAt("handlerchain"), jmxName, getCoreHandlersPackage(), getJMXHandlersPackage()); handlerChain.init(); } public class ProtocolHandlerChainImpl implements ProtocolHandlerChain { private final ProtocolHandlerLoader loader; private final HierarchicalConfiguration handlerchainConfig; private final String jmxName; private final String coreHandlersPackage; private final String jmxHandlersPackage; private final List<Object> handlers = new LinkedList<Object>(); public ProtocolHandlerChainImpl(ProtocolHandlerLoader loader, HierarchicalConfiguration handlerchainConfig, String jmxName, Class<? extends HandlersPackage> coreHandlersPackage, Class<? extends HandlersPackage> jmxHandlersPackage) { this.loader = loader; this.handlerchainConfig = handlerchainConfig; this.jmxName = jmxName; this.coreHandlersPackage = coreHandlersPackage.getName(); this.jmxHandlersPackage = jmxHandlersPackage.getName(); } @SuppressWarnings("unchecked") public void init() throws Exception { List<org.apache.commons.configuration.HierarchicalConfiguration> children = handlerchainConfig.configurationsAt("handler"); // check if the coreHandlersPackage was specified in the config, if // not add the default if (handlerchainConfig.getString("[@coreHandlersPackage]") == null) handlerchainConfig.addProperty("[@coreHandlersPackage]", coreHandlersPackage); String coreHandlersPackage = handlerchainConfig.getString("[@coreHandlersPackage]"); if (handlerchainConfig.getString("[@jmxHandlersPackage]") == null) handlerchainConfig.addProperty("[@jmxHandlersPackage]", jmxHandlersPackage); String jmxHandlersPackage = handlerchainConfig.getString("[@jmxHandlersPackage]"); HandlersPackage handlersPackage = (HandlersPackage) loader.load(coreHandlersPackage, addHandler(coreHandlersPackage)); registerHandlersPackage(handlersPackage, null, children); if (handlerchainConfig.getBoolean("[@enableJmx]", true)) { DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder(); builder.addProperty("jmxName", jmxName); HandlersPackage jmxPackage = (HandlersPackage) loader.load(jmxHandlersPackage, addHandler(jmxHandlersPackage)); registerHandlersPackage(jmxPackage, builder, children); } for (HierarchicalConfiguration hConf : children) { String className = hConf.getString("[@class]", null); if (className != null) { handlers.add(loader.load(className, hConf)); } else { throw new ConfigurationException("Missing @class attribute in configuration: " + ConfigurationUtils.toString(hConf)); } } wireExtensibleHandlers(); } 공유하기 URL 복사카카오톡 공유페이스북 공유엑스 공유 게시글 관리 구독하기Life == Dev 저작자표시 비영리 변경금지