| 1 package com.protomatter.syslog; 2 3 52 53 import java.io.*; 54 import java.net.*; 55 import java.util.*; 56 import java.text.*; 57 58 import javax.jms.*; 59 import javax.naming.*; 60 61 import com.protomatter.syslog.xml.*; 62 import com.protomatter.util.*; 63 64 308 public class SyslogServer 309 { 310 313 private SyslogServer() 314 { 315 super(); 316 } 317 318 322 public static final void main(String args[]) 323 { 324 if (args.length != 1) 325 { 326 System.out.println(Syslog.getResourceString(MessageConstants.SERVER_USAGE_MESSAGE) + ": SyslogServer config-file"); 327 System.exit(0); 328 } 329 330 try 331 { 332 System.out.println(MessageFormat.format( 333 Syslog.getResourceString(MessageConstants.SERVER_LOADING_MESSAGE), 334 new Object [] { args[0] })); 335 Properties props = new Properties(); 336 props.load(new FileInputStream(new File(args[0]))); 337 Properties systemProps = System.getProperties(); 338 Enumeration e = systemProps.keys(); 339 while (e.hasMoreElements()) 340 { 341 String key = (String )e.nextElement(); 342 props.put(key, systemProps.getProperty(key)); 343 } 344 345 String syslogConfig = props.getProperty("Syslog.config.xml"); 346 if (syslogConfig == null) 347 { 348 System.out.println(MessageFormat.format( 349 Syslog.getResourceString(MessageConstants.SERVER_CONFIG_PROP_ERROR_MESSAGE), 350 new Object [] { "Syslog.config.xml" })); 351 System.exit(0); 352 } 353 System.out.println(Syslog.getResourceString(MessageConstants.CONFIGURING_SYSLOG_MESSAGE)); 354 SyslogXML.configure(new File(syslogConfig)); 355 356 System.out.println(Syslog.getResourceString(MessageConstants.SERVER_INIT_JNDI_MESSAGE)); 358 Context ctx = new InitialContext(props); 359 360 String topicName = props.getProperty("jms.topic"); 361 if (topicName != null) 362 { 363 System.out.println(Syslog.getResourceString(MessageConstants.SERVER_LISTEN_JMS_TOPIC_MESSAGE)); 364 String factoryName = props.getProperty("jms.connection.factory"); 365 366 String user = (String )props.getProperty("jms.connection.user"); 367 String pass = (String )props.getProperty("jms.connection.pass"); 368 369 Topic topic = (Topic)ctx.lookup(topicName); 370 371 TopicConnectionFactory tcf = (TopicConnectionFactory)ctx.lookup(factoryName); 372 TopicConnection connection = null; 373 if (user != null) 374 connection = tcf.createTopicConnection(user, pass); 375 else 376 connection = tcf.createTopicConnection(); 377 TopicSession session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); 378 379 String selector = props.getProperty("jms.message.selector"); 380 381 TopicSubscriber subscriber = null; 382 if (selector != null) 383 subscriber = session.createSubscriber(topic, selector, false); 384 else 385 subscriber = session.createSubscriber(topic); 386 subscriber.setMessageListener(new InternalMessageListener()); 387 388 System.out.println(Syslog.getResourceString(MessageConstants.SERVER_STARTING_JMS_MESSAGE)); 389 connection.start(); 390 } 391 else 392 { 393 String jndiName = props.getProperty("jndi.name"); 394 jndiName = "com.protomatter.syslog.remote." + jndiName; 395 String receiverClass = props.getProperty("receiver.class"); 396 if (receiverClass == null) 397 receiverClass = "com.protomatter.syslog.RemoteLogReceiverImpl"; 398 System.out.println(MessageFormat.format( 399 Syslog.getResourceString(MessageConstants.SERVER_BINDING_MESSAGE), 400 new Object [] { jndiName })); 401 Class theClass = Class.forName(receiverClass); 402 RemoteLogReceiver receiver = (RemoteLogReceiver)theClass.newInstance(); 403 404 ctx.rebind(jndiName, receiver); 405 } 406 407 System.out.println(Syslog.getResourceString(MessageConstants.SERVER_SUSPEND_MESSAGE)); 408 Object sync = new Object (); 409 synchronized(sync) 410 { 411 sync.wait(); 412 } 413 } 414 catch (Exception x) 415 { 416 x.printStackTrace(); 417 } 418 } 419 420 private static class InternalMessageListener 421 implements MessageListener, JMSConstants 422 { 423 public void onMessage(Message msg) 424 { 425 try 426 { 427 if (!(msg instanceof TextMessage)) 428 return; 429 TextMessage m = (TextMessage)msg; 430 if (!JMS_PROP_MSG_TYPE_VALUE.equals(m.getStringProperty(JMS_PROP_MSG_TYPE))) 431 return; 432 433 long time = m.getLongProperty(JMS_PROP_TIME); 434 String host = m.getStringProperty(JMS_PROP_HOST); 435 String channel = m.getStringProperty(JMS_PROP_CHANNEL); 436 String logger = m.getStringProperty(JMS_PROP_LOGGER); 437 String message = m.getStringProperty(JMS_PROP_MESSAGE); 438 int level = m.getIntProperty(JMS_PROP_LEVEL); 439 String threadName = m.getStringProperty(JMS_PROP_THREAD); 440 String detail = m.getText(); 441 442 Syslog.log(InetAddress.getByName(host), logger, channel, message, detail, level, null, threadName, time); 444 } 445 catch (JMSException x) 446 { 447 x.printStackTrace(); 448 } 449 catch (Exception xx) 450 { 451 xx.printStackTrace(); 452 } 453 } 454 } 455 } 456 | Popular Tags |