001package var.mom.jms.tasks; 002 003import java.util.Random; 004 005import javax.jms.Connection; 006import javax.jms.ConnectionFactory; 007import javax.jms.JMSException; 008import javax.jms.Message; 009import javax.jms.MessageConsumer; 010import javax.jms.MessageListener; 011import javax.jms.MessageProducer; 012import javax.jms.Queue; 013import javax.jms.Session; 014import javax.jms.TextMessage; 015import javax.jms.Topic; 016import javax.naming.Context; 017import javax.naming.InitialContext; 018import javax.naming.NamingException; 019 020public class PasswordCandidateGenerator implements MessageListener { 021 private Connection connection; 022 private Session session; 023 private MessageProducer producer; 024 private MessageConsumer consumer; 025 private Random random; 026 private boolean stopped = false; 027 028 public PasswordCandidateGenerator() throws NamingException, JMSException { 029 this.random = new Random(); 030 Context ctx = new InitialContext(); 031 ConnectionFactory factory = (ConnectionFactory) ctx.lookup("ConnectionFactory"); 032 this.connection = factory.createConnection(); 033 this.session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 034 Queue taskQueue = (Queue) ctx.lookup(Conf.TASK_QUEUE); 035 this.producer = this.session.createProducer(taskQueue); 036 Topic successTopic = (Topic) ctx.lookup(Conf.SUCCESS_TOPIC); 037 this.consumer = this.session.createConsumer(successTopic); 038 this.consumer.setMessageListener(this); 039 this.connection.start(); 040 } 041 042 @Override 043 public void onMessage(Message message) { 044 this.stopped = true; 045 System.out.println("Password gefunden. PasswordCandidateGenerator wird gestoppt."); 046 } 047 048 public void sendMessage(String text) throws JMSException { 049 TextMessage message = this.session.createTextMessage(); 050 message.setText(text); 051 this.producer.send(message); 052 } 053 054 public String generatePasswordCandidate(int length) { 055 StringBuilder buffer = new StringBuilder(length); 056 final int letterA = 97; 057 final int letterZ = 122; 058 for (int i = 0; i < length; i++) { 059 buffer.append((char) (letterA + (int) (this.random.nextFloat() * ((letterZ - letterA) + 1)))); 060 } 061 return buffer.toString(); 062 } 063 064 public static void main(String[] args) { 065 PasswordCandidateGenerator node = null; 066 try { 067 node = new PasswordCandidateGenerator(); 068 while (!node.stopped) { 069 node.sendMessage(node.generatePasswordCandidate(8)); 070 } 071 } catch (NamingException | JMSException e) { 072 System.err.println(e); 073 } finally { 074 try { 075 if ((node != null) && (node.producer != null)) { 076 node.producer.close(); 077 } 078 if ((node != null) && (node.session != null)) { 079 node.session.close(); 080 } 081 if ((node != null) && (node.connection != null)) { 082 node.connection.close(); 083 } 084 } catch (JMSException e) { 085 System.err.println(e); 086 } 087 } 088 } 089 090}