Lcr-4

QueryController.java

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

package

 

 

information.sh.lp.web.controller;

 

import

 

 

information.sh.lp.infoBean.Log;

import

 

 

information.sh.lp.infoBean.LogFilter;

import

 

 

information.sh.lp.model.LogDAO;

import

 

 

information.sh.lp.web.service.BeanFactory;

import

 

 

information.sh.lp.web.service.LogReceiver;

 

import

 

 

java.io.IOException;

import

 

 

java.util.ArrayList;

import

 

 

java.util.Calendar;

 

import

 

 

javax.servlet.http.HttpServletRequest;

import

 

 

javax.servlet.http.HttpServletResponse;

 

import

 

 

org.springframework.web.servlet.ModelAndView;

import

 

 

org.springframework.web.servlet.mvc.multiaction.MultiActionController;

/**

*

*

 

 

@author

Li,

Chengri

*

*/

public

 

 

class QueryController extends

MultiActionController {

 

 

private String resultPage

;

 

 

private String detailPage

;

 

 

private String notFoundPage

;

 

 

private String invalidatePage

;

 

 

 

public void

setNotFoundPage(String notFoundPage){

 

 

this.notFoundPage

=notFoundPage;

}

 

 

public

String getNotFoundPage(){

 

 

return this.notFoundPage

;

}

 

 

public void

setDetailPage(String detailPage){

 

 

this.detailPage

=detailPage;

}

 

 

public

String getDetailPage(){

 

 

return this.detailPage

;

}

 

 

public void

setResultPage(String resultPage) {

 

 

this.resultPage

= resultPage;

}

 

 

public

String getResultPage() {

 

 

return this.resultPage

;

}

 

 

public

String getInvalidatePage(){

 

 

return this.invalidatePage

;

}

 

 

public void

setinvalidatePage(String invalidatePage){

 

 

this.invalidatePage

=invalidatePage;

}

 

 

/**

*

*

 

 

@param

req

*

 

 

@param

res

*

 

 

@return

Query logs according to the parameters in request.

*/

 

 

public

ModelAndView query(HttpServletRequest req, HttpServletResponse res) {

 

 

//make sure the user logged in.

String userName=(String)req.getSession().getAttribute(

 

"userName"

);

 

 

if(userName==null||""

.equals(userName)){

 

 

new ModelAndView(invalidatePage

);

}

 

 

long

st=Calendar.getInstance().getTimeInMillis();

ArrayList<Log> allLogs;

String order = req.getParameter(

 

"order"

);

String startTime = req.getParameter(

 

"startTime"

);

String endTime = req.getParameter(

 

"endTime"

);

String thread = req.getParameter(

 

"thread"

);

String level=

 

""

;

 

 

if(req.getParameter("cError")!=null

){

level+=req.getParameter(

 

"cError"

);

}

 

 

if(req.getParameter("cWarn")!=null

){

level+=req.getParameter(

 

"cWarn"

);

}

 

 

if(req.getParameter("cInfo")!=null

){

level+=req.getParameter(

 

"cInfo"

);

}

 

 

if(req.getParameter("cDebug")!=null

){

level+=req.getParameter(

 

"cDebug"

);

}

String message = req.getParameter(

 

"message"

);

String position = req.getParameter(

 

"position"

);

String pjName=req.getParameter(

 

"project"

);

 

 

if (startTime == null || ""

.equals(startTime)) {

startTime =

 

"1900-08-31 01:00:00"

;

}

 

 

if (endTime == null || ""

.equals(endTime)) {

endTime =

 

"2100-10-13 06:00:00"

;

}

LogFilter filter =

 

new

LogFilter(startTime, endTime, thread, level,message, position,order,pjName);

LogDAO lop =(LogDAO) BeanFactory.getBean(

 

"logDAO"

);

LogReceiver logReceiver=(LogReceiver)BeanFactory.getBean(

 

"logReceiver"

);

 

 

 

//Flush the messages in the cache

 

 

if (logReceiver.getEvents()!=null

&&!logReceiver.getEvents().isEmpty()) {

 

 

try

{

logReceiver.writeLogs(logReceiver.getEvents());

logReceiver.getEvents().clear();

}

 

catch

(IOException e) {

e.printStackTrace();

}

}

allLogs = lop.queryLog(filter);

 

 

if(allLogs==null

){

 

 

return new ModelAndView(this

.getNotFoundPage());

}

req.getSession().setAttribute(

 

"allLogs"

, allLogs);

ModelAndView mAndv =

 

new ModelAndView(this.getResultPage(), "allLogs"

,allLogs);

 

 

long

et=Calendar.getInstance().getTimeInMillis();

System.

 

out.println("Cost time:"+(et-st)/1000+"s"

);

 

 

return

mAndv;

}

 

 

public

ModelAndView list(HttpServletRequest req, HttpServletResponse res) {

ArrayList<Log> allLogs = (ArrayList<Log>) req.getSession().getAttribute(

 

"allLogs"

);

ModelAndView mAndv =

 

new ModelAndView(this.getResultPage(), "allLogs"

,allLogs);

 

 

return

mAndv;

}

 

 

public

ModelAndView detail(HttpServletRequest req, HttpServletResponse res) {

Integer recordIndex =

 

new Integer(req.getParameter("recordIndex"

));

ModelAndView mAndv =

 

new ModelAndView(this

.getDetailPage(),

 

 

"recordIndex"

, recordIndex);

 

 

return

mAndv;}}

 

BeanFactory.java

 

package

 

 

information.sh.lp.web.service;

 

import

 

 

org.springframework.context.ApplicationContext;

import

 

 

org.springframework.context.support.ClassPathXmlApplicationContext;

 

public

 

 

class BeanFactory {

 

private static ApplicationContext context = null;

 

private static final String[] systemConfigFileName = {"citi/sh/lp/configFiles/springBean-config.xml"};

 

private static Exception exception;

 

 

 

private static synchronized ApplicationContext getApplicationContext(){

 

if(context==null){

 

try{

 

context=new ClassPathXmlApplicationContext(systemConfigFileName);

}

catch(Exception e){

e.printStackTrace();

 

exception = e;

}

}

 

return context;

}

 

 

public void setContext(ApplicationContext context){

BeanFactory.

context=context;

}

 

 

public static boolean isBeanExist(String beanName) {

 

return getApplicationContext().containsBean(beanName);

}

 

 

public static Object getBean(String beanName) {

 

if(exception!=null) {

 

return null;

}

 

return getApplicationContext().getBean(beanName);

}

}

 

 

 

LogReceiver.java

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

package

 

 

information.sh.lp.web.service;

 

import

 

 

information.sh.lp.infoBean.ContextInfo;

import

 

 

information.sh.lp.model.IndexDAO;

import

 

 

information.sh.lp.util.FileUtilTool;

 

import

 

 

java.io.BufferedWriter;

import

 

 

java.io.File;

import

 

 

java.io.FileWriter;

import

 

 

java.io.IOException;

import

 

 

java.text.SimpleDateFormat;

import

 

 

java.util.ArrayList;

import

 

 

java.util.Calendar;

import

 

 

java.util.HashMap;

import

 

 

java.util.Hashtable;

import

 

 

java.util.Iterator;

 

import

 

 

javax.jms.JMSException;

import

 

 

javax.jms.ObjectMessage;

import

 

 

javax.jms.Queue;

import

 

 

javax.jms.QueueConnection;

import

 

 

javax.jms.QueueConnectionFactory;

import

 

 

javax.jms.QueueReceiver;

import

 

 

javax.jms.QueueSession;

import

 

 

javax.jms.Session;

import

 

 

javax.naming.Context;

import

 

 

javax.naming.InitialContext;

import

 

 

javax.naming.NamingException;

 

public

 

 

class LogReceiver implements

Runnable {

 

 

 

private QueueConnectionFactory queueConnectionFactory

;

 

 

private QueueConnection queueConnection

;

 

 

private QueueSession queueSession

;

 

 

private Queue queue

;

 

 

private QueueReceiver receiver

;

 

 

private ArrayList<information.sh.lp.jms.JMSLoggingEvent> events

;

 

 

public

ArrayList<information.sh.lp.jms.JMSLoggingEvent> getEvents(){

 

 

return events

;

}

 

 

@Override

 

 

public void

run(){

Object obj;

 

 

events=new

ArrayList<information.sh.lp.jms.JMSLoggingEvent>();

System.

 

out.println("Starting receive log....."

);

 

 

try

{

initial();

 

 

receiver = queueSession.createReceiver(queue

);

 

 

while (true

) {

obj =

 

receiver

.receive();

 

 

if (obj instanceof

ObjectMessage) {

 

obj = ((ObjectMessage) obj).getObject();

 

 

if (obj instanceof

information.sh.lp.jms.JMSLoggingEvent) {

 

 

events

.add((information.sh.lp.jms.JMSLoggingEvent)obj);

}

 

 

if(events.size()>=ContextInfo.RECEIVER_CACHE_SIZE

){

writeLogs(

 

events

);

 

 

events

.clear();

}

}

}

}

 

catch

(NamingException namee) {

System.

 

out.println("naming exception"

);

namee.printStackTrace();

}

 

catch

(JMSException jmse) {

 

 

//If the server shutdown, there is no need to print the exception.

 

 

if(!(jmse instanceof

weblogic.jms.common.IllegalStateException)){

System.

 

out.println("jms exception is "

+ jmse);

jmse.printStackTrace();

}

}

 

catch

(IOException ioe) {

System.

 

out.println("io exception"

);

ioe.printStackTrace();

}

 

finally

{

 

 

try

{

 

 

//When the server shutdown, check the cache, if there is message then write them.

 

 

if(!events

.isEmpty()){

writeLogs(

 

events

);

 

 

events

.clear();

}

System.

 

out.println("Shut down server"

);

close();

}

 

catch

(JMSException e) {

e.printStackTrace();

}

 

catch

(IOException ioe){

ioe.printStackTrace();

}

}

}

 

 

/**

* Function: Initial queueConnectionFactory, queueConnection, queue and other variables.

*

 

 

@throws

NamingException

*

 

 

@throws

JMSException

*/

 

 

public void initial() throws

NamingException, JMSException {

Hashtable env =

 

new

Hashtable();

env.put(Context.

 

INITIAL_CONTEXT_FACTORY, ContextInfo.JNDI_FACTORY

);

env.put(Context.

 

PROVIDER_URL, ContextInfo.PROVIDER_URL

);

InitialContext ctx =

 

new

InitialContext(env);

 

 

queueConnectionFactory = (QueueConnectionFactory) ctx.lookup(ContextInfo.JMS_FACTORY

);

 

 

queueConnection = queueConnectionFactory

.createQueueConnection();

 

 

queueSession = queueConnection.createQueueSession(false,Session.AUTO_ACKNOWLEDGE

);

 

 

queue = (Queue) ctx.lookup(ContextInfo.QUEUE

);

 

 

queueConnection

.start();

}

 

 

/**

* Function: store logs into local files

*

 

 

@param

events

*

 

 

@throws

IOException

*/

 

 

public void writeLogs(ArrayList<information.sh.lp.jms.JMSLoggingEvent> events) throws

IOException{

HashMap pjAndio=

 

new

HashMap();

ArrayList<File> logDirs=

 

new

ArrayList<File>();

Iterator i=events.iterator();

information.sh.lp.jms.JMSLoggingEvent e;

 

 

while

(i.hasNext()){

e=(information.sh.lp.jms.JMSLoggingEvent)i.next();

String projectName=e.getProjectName();

BufferedWriter bw=(BufferedWriter)pjAndio.get(projectName);

 

 

if(bw==null

){

SimpleDateFormat sdf=

 

new SimpleDateFormat(ContextInfo.DATE_FORMAT

);

Calendar cld=Calendar.getInstance();

cld.setTimeInMillis(e.getTimeStamp());

bw=locateFile(projectName,sdf.format(cld.getTime()));

pjAndio.put(projectName, bw);

logDirs.add(

 

new File(ContextInfo.DATA_DIR+"//"

+projectName));

}

String str=

 

""

;

String SPLITER=ContextInfo.

 

LOG_PROPER_SPLITER

;

SimpleDateFormat sdf=

 

new SimpleDateFormat(ContextInfo.DATE_FORMAT

);

Calendar cld=Calendar.getInstance();

cld.setTimeInMillis(e.getTimeStamp());

str =

 

""

+sdf.format(cld.getTime()) +

SPLITER+ e.getThreadName() +

SPLITER+ e.getLevel() +

SPLITER+ e.getLocationInformation().

 

fullInfo

+

SPLITER+ e.getMessage()+

 

 

"/n"

;

bw.write(str);

System.

 

out.println("Receive a message!"

+Calendar.getInstance().getTime());

}

i=pjAndio.keySet().iterator();

 

 

while

(i.hasNext()){

String value=(String)i.next();

BufferedWriter bw=(BufferedWriter)pjAndio.get(value);

bw.flush();

}

IndexDAO d=(IndexDAO)BeanFactory.getBean(

 

"indexDAO"

);

 

 

for(int

k=0;k<logDirs.size();k++){

File tempf=logDirs.get(k);

d.buildIndex(tempf);

}

}

 

 

/**

*

*

 

 

@param

projectName Project name

*

 

 

@param

date The current log`s start time, used to name file

*

 

 

@return

BufferedWriter, which is already wrapped by corresponding file

*

 

 

@throws

IOException

*/

 

 

public BufferedWriter locateFile(String projectName,String date) throws

IOException {

BufferedWriter bw;

File f;

f =

 

new File(ContextInfo.DATA_DIR

);

 

 

 

//root directory is not exist

 

 

if

(!f.exists()) {

 

 

//create root directory

f.mkdir();

ContextInfo.

 

DATA_DIR

=f.getAbsolutePath();

 

 

 

//create project directory

f=

 

new File(ContextInfo.DATA_DIR+"//"

+projectName);

f.mkdir();

 

String fileName=date.replace(

 

':', '-'

);

 

 

//create log file according to log date

f=

 

new File(ContextInfo.DATA_DIR+"//"+projectName+"//"+fileName+".txt"

);

bw=

 

new BufferedWriter(new FileWriter(f.getAbsolutePath(),true

));

}

 

else

{

f=

 

new File(ContextInfo.DATA_DIR+"//"

+projectName);

 

 

//if project directory is not exist

 

 

if

(!f.exists()||!f.isDirectory()){

f.mkdir();

String fileName=date.replace(

 

':', '-'

);

f=

 

new File(ContextInfo.DATA_DIR+"//"+projectName+"//"+fileName+".txt"

);

bw=

 

new BufferedWriter(new FileWriter(f.getAbsolutePath(),true

));

 

 

return

bw;

}

 

 

 

//find the last modified file in the project directory

ArrayList<File> files=FileUtilTool.subFiles(f);

 

 

int

index=0;

 

 

long

lastmodify=0;

 

 

for (int

i = 0; i < files.size(); i++) {

 

 

if

(files.get(index).isFile()&&files.get(i).lastModified() > lastmodify) {

lastmodify = files.get(i).lastModified();

index=i;

}

}

 

 

// if the last modified file is too large then create a new file.

 

 

if(files.get(index).length()>ContextInfo.LOG_FILE_SIZE

){

String fileName=date.replace(

 

':', '-'

);

f=

 

new File(ContextInfo.DATA_DIR+"//"+projectName+"//"+fileName+".txt"

);

bw=

 

new BufferedWriter(new FileWriter(f.getAbsolutePath(),true

));

 

 

return

bw;

}

bw=

 

new BufferedWriter(new FileWriter(files.get(index).getAbsolutePath(),true

));

}

 

 

return

bw;

}

 

 

/**

* Function: release source

*

 

 

@throws

JMSException

*/

 

 

public void close() throws

JMSException {

 

 

receiver

.close();

 

 

queueSession

.close();

 

 

queueConnection

.close();

}}

 

 

BuildIndexServlet.java

 

package

 

 

information.sh.lp.web.servlet;

 

import

 

 

information.sh.lp.model.IndexDAO;

import

 

 

information.sh.lp.web.service.BeanFactory;

 

import

 

 

javax.servlet.http.HttpServlet;

 

/**

* Servlet implementation class BuildIndexServlet

*/

public

 

 

class BuildIndexServlet extends HttpServlet {

 

 

public BuildIndexServlet() {

 

super();

IndexDAO indexDao=(IndexDAO)BeanFactory.getBean(

"indexDAO");

indexDao.buildIndex();

System.

out.println("Build indexes finish");

}

}

 

 

StartRecevierServlet.java

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

package

 

 

information.sh.lp.web.servlet;

 

import

 

 

information.sh.lp.web.service.BeanFactory;

import

 

 

information.sh.lp.web.service.LogReceiver;

 

import

 

 

javax.servlet.ServletException;

import

 

 

javax.servlet.http.HttpServlet;

 

public

 

 

class StartRecevierServlet extends

HttpServlet {

 

 

public void init() throws

ServletException {

 

 

super

.init();

LogReceiver lr = (LogReceiver) BeanFactory.getBean(

 

"logReceiver"

);

Thread logReceiver =

 

new

Thread(lr);

System.

 

out.println("starting log receiver ....."

);

logReceiver.start();

System.

 

out.println("starting log receiver successfully"

);}}

 

 

 

WebInfoDispatcher.java

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

package

 

 

information.sh.lp.web.servlet;

 

import

 

 

java.io.IOException;

import

 

 

java.util.ArrayList;

import

 

 

java.util.List;

 

import

 

 

javax.servlet.ServletException;

import

 

 

javax.servlet.http.HttpServlet;

import

 

 

javax.servlet.http.HttpServletRequest;

import

 

 

javax.servlet.http.HttpServletResponse;

/**

* Function: Use to dispatch the request to the jsp which in the WEB

 

-INF file

*

 

@author cl69735

*

*/

public

 

 

class WebInfoDispatcher extends HttpServlet {

 

protected void doGet(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

String jsp = request.getRequestURI();

 

int start = jsp.indexOf("dis_") + "dis_".length();

jsp = jsp.substring(start);

request.getRequestDispatcher(

"/WEB-INF/jsp/" + jsp).forward(request,

response);

}

 

 

@Override

 

protected void doPost(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

 

 

FileAppTest.java

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

package

 

 

information.sh.lp;

import

 

 

information.sh.lp.jms.JMSQueueAppender;

import

 

 

information.sh.lp.jms.JmsLogger;

 

import

 

 

org.apache.log4j.Logger;

import

 

 

org.apache.log4j.PatternLayout;

 

public

 

 

class

FileAppTest {

 

 

 

public static Logger log

;

 

 

 

public static void

main(String args[]){

 

String pjName=

 

"Project12344"

;

PatternLayout layout =

 

new

PatternLayout();

layout.setConversionPattern(

 

"%5p %d (%F:%L) - %m%n"

);

JMSQueueAppender JMS_APPENDER =

 

new

JMSQueueAppender(layout, pjName);

JMS_APPENDER.setProviderUrl(

 

"t3://localhost:7001"

);

JMS_APPENDER.setInitialContextFactory(

 

"weblogic.jndi.WLInitialContextFactory"

);

JMS_APPENDER.setQueueBindingName(

 

"IbosQueue"

);

JMS_APPENDER.setQueueConnectionFactoryBindingName(

 

"IbosQueueConnectionFactory"

);

JMS_APPENDER.activateOptions();

 

 

log=JmsLogger.getLogger(FileAppTest.class

,JMS_APPENDER);

 

System.

 

out.println("Start"

);

 

 

for (int

i = 1; i <=10; i++) {

 

 

log.info("The info "

+ i);

}

System.

 

out.println("Finish"

);}}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值