package fr.mch.mdo.jms.server; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.ServerSocket; import java.net.URL; import java.net.URLDecoder; import java.util.Date; import java.util.Enumeration; import java.util.Properties; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.MessageConsumer; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; import org.hornetq.jms.server.embedded.EmbeddedJMS; import org.hornetq.spi.core.security.HornetQSecurityManagerImpl; import fr.mch.mdo.restaurant.exception.MdoException; import fr.mch.mdo.restaurant.exception.MdoTechnicalException; import fr.mch.mdo.restaurant.resources.IResources; public class MdoEmbeddedJmsServer extends EmbeddedJMS implements IMdoEmbeddedJmsServer { public MdoEmbeddedJmsServer() { super.configResourcePath = IResources.JMS_SERVER_HORNETQ_CONFIGURATION_FILE; super.jmsConfigResourcePath = IResources.JMS_SERVER_HORNETQ_JMS_FILE; initSecurityManager(); } private void initSecurityManager() { super.securityManager = new HornetQSecurityManagerImpl(); Properties properties = reload(IResources.JMS_HORNETQ_USER_FILE); String username = properties.getProperty(IMdoEmbeddedJmsServer.JMS_USER_NAME_KEY); String password = properties.getProperty(IMdoEmbeddedJmsServer.JMS_USER_PASSWORD_KEY); securityManager.addUser(username, password); String role = properties.getProperty(IMdoEmbeddedJmsServer.JMS_USER_ROLE_KEY); securityManager.addRole(username, role); } private Properties reload(final String configFile) { Properties result = new Properties(); InputStream inputStream = null; try { inputStream = IResources.class.getResourceAsStream(configFile); result.load(inputStream); } catch (IOException e) { e.printStackTrace(); } finally { try { inputStream.close(); } catch (Exception e) { e.printStackTrace(); } } return result; } public static void main(String[] args) throws Exception { MdoEmbeddedJmsServer server = new MdoEmbeddedJmsServer(); server.start(); ServerSocket dummyServer = new ServerSocket(9999); while (true) { ConnectionFactory cf = (ConnectionFactory) server.lookup("/ConnectionFactory"); Queue queue = (Queue) server.lookup("/queue/printerQueue"); // Step 10. Send and receive a message using JMS API Connection connection = null; try { connection = cf.createConnection("printer", "printer"); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer producer = session.createProducer(queue); TextMessage message = session.createTextMessage("Hello sent at " + new Date()); System.out.println("Sending message: " + message.getText()); producer.send(message); MessageConsumer messageConsumer = session.createConsumer(queue); // messageConsumer.setMessageListener(listener); connection.start(); TextMessage messageReceived = (TextMessage) messageConsumer.receive(1000); System.out.println("Received message:" + messageReceived.getText()); } catch (Exception e) { e.printStackTrace(); } finally { if (connection != null) { connection.close(); } } dummyServer.accept(); } // String fileName = "/home/mathieu/development/eclipse/workspaces/montagnesdor/mdo-core/jms/embedded-server/target/classes/fr/mch/mdo/restaurant/resources/jms/hornetq/hornetq-jms.xml"; // fileName = IResources.JMS_SERVER_HORNETQ_JMS_FILE; // Enumeration<URL> urls = Thread.currentThread().getContextClassLoader().getResources(fileName); // URL url = null; // while (urls.hasMoreElements()) // { // url = urls.nextElement(); //System.out.println("1) " + url); // break; // } // // if (fileExists(url)) { // System.out.println("Yes"); // } else { // System.out.println("no"); // } } private static File getFileFromURL(final URL url) throws UnsupportedEncodingException { System.out.println("URLDecoder.decode(url.getFile()) " + URLDecoder.decode(url.getFile(), "UTF-8")); return new File(URLDecoder.decode(url.getFile(), "UTF-8")); } private static boolean fileExists(final URL resourceURL) { try { File f = getFileFromURL(resourceURL); // this was the orginal line, which doesnt work for File-URLs with white System.out.println("f.exists()) " + f.exists()); // spaces: File f = new File(resourceURL.getPath()); Enumeration<URL> resources = Thread.currentThread().getContextClassLoader().getResources(f.getName()); System.out.println("f.getName()) " + f.getName()); while (resources.hasMoreElements()) { URL url = resources.nextElement(); System.out.println("2) " + url); if (url.equals(resourceURL)) { return true; } } } catch (Exception e) { return false; } return false; } @Override public void startServer() throws MdoException { try { super.start(); } catch (Exception e) { throw new MdoTechnicalException(e); } } @Override public void stopServer() throws MdoException { try { super.stop(); } catch (Exception e) { throw new MdoTechnicalException(e); } } }