jhipster websocket stomp

1. ClientForwardController.java 체크
    @GetMapping(value = { "/{path:[^\\.]*}", "/{path:^(?!(websocket|topic)).*}/**/{path:[^\\.]*}"})
    public String forward() {
        return "forward:/";
    }

2. 가이드된대로 websocket Config, security Config 
3. web cors 필터 설정 및 websoket config 시 cors 체크 


websocket endpoint url로 connection 한다음


messageMapping 으로 메세지 발송
sendTo 로 메세지 수신 subscribe


setApplicationDestinationPrefixes 가 설정되어 있을 경우 클라이언트가 메세지를 발송할 URL은 항상 prefix + MessageMapping 로 발송해야 함.

설정안하면 그냥 Mapping되어 있는 URI로 발송








JPA Hibernete 등 db connection 연결 유지

JPA Hibernete 등 db connection 연결 유지를 위해 
validation-query 나 test-on-borrow=true 설정을 사용하지만

해당 방법 보다 

서버 쪽에서 tcpKeepAlive 설정을 활성화 하거나
클라이언트 파트에서 접속시 JDBC URL에 tcpKeepAlive=true 를 설정해 주는것이 더 좋은 방법 

database?tcpKeepAlive=true&currentSchema=xxx

불필요한 로그 및 overload 감소

2022-05-09] 네이버 신규 가입 업체 목록

#네이버 #신규 #가입 #업체 #목록

2022년 5월 9일 #네이버신규가입업체 목록정보 10시 체크

#신생업체기준으로 네이버에 신규로 등록된 업체 목록 정보




https://postfiles.pstatic.net/MjAyMjA1MDlfMTUx/MDAxNjUyMDczNTUxNDI5.PgrlYvqcGBvGW7-QKrCD16dEEzmtfv-s4awceJFwHEog.MiY-7Yw7t9Nbru-c8RwnMbMr5r-4tC7zzdTft43fmxsg.PNG.actionzone/image.png?type=w966






fuse,camel jolokia + metricbeat


fuse,camel jolokia + metricbeat 설정


- module: jolokia
  metricsets: ["jmx"]
  period: 10s
  hosts: ["192.168.1.229:9991","192.168.1.229:9992","192.168.1.229:9993"]
  namespace: "jolokia-fuse"
  path: "/jolokia"
  #path: "/jolokia/?ignoreErrors=true&canonicalNaming=false"
  #username: "user"
  #password: "secret"
  jmx.mappings:
          #    - mbean: 'java.lang:type=Runtime'
          #      attributes:
          #        - attr: Uptime
          #          field: uptime
          #    - mbean: 'java.lang:type=Memory'
          #      attributes:
          #        - attr: HeapMemoryUsage
          #          field: memory.heap_usage
          #        - attr: NonHeapMemoryUsage
          #          field: memory.non_heap_usage
    # GC Metrics - this depends on what is available on your JVM
    #- mbean: 'java.lang:type=GarbageCollector,name=ConcurrentMarkSweep'
    #  attributes:
    #    - attr: CollectionTime
    #      field: gc.cms_collection_time
    #    - attr: CollectionCount
    #      field: gc.cms_collection_count
    - mbean: 'org.apache.camel:type=routes,name=*,context=*'
      attributes:
        - attr: CamelId
          field: camel.camel_id
          event: camel
        - attr: RouteId
          field: camel.route_id
          event: camel
        - attr: Uptime
          field: camel.uptime
          event: camel
        - attr: ExchangesCompleted
          field: camel.exchanges_completed
          event: camel
        - attr: ExchangesFailed
          field: camel.exchanges_failed
          event: camel
        - attr: LastProcessingTime
          field: camel.last_processing_time
          event: camel
        - attr: State
          field: camel.state
          event: camel

  jmx.application:
  jmx.instance:




[root@project-kal metricbeat]# /apps/metricbeat/metricbeat -e

테스트 해보고 정상이면 sh 만들어서 background로 실행하거나 service로 등록이 되어 있을 경우 systemctl start metricbeat 으로 실행 

테스트 할때는 로그를 봐야 할 필요가 있어 그냥 /apps/metricbeat/metricbeat -e 로 실행해 보는것이 좋음.



* 핵심사항
 - metricbeat에서 multirow/dynamic 하게 조회되는 bean에 대하여 metric 구성시 mbean에 *를 활용하여 처리함.
 - 다중행이 리턴되는 쿼리의 경우 아래처럼 동적 복합키가 생성되는데 metricbeat의 jolokia mbean 설정에서 위의 예제와 같이 * 로 처리
 참고로 - mbean: 'org.apache.camel:type=routes,*' 식으로 조회하면 안됨.



{"request":{"mbean":"org.apache.camel:context=*,name=*,type=routes","type":"read"},"value":{"org.apache.camel:context=ke-test-eg001,name=\"IF_TEST_101\",type=routes":{"StatisticsEnabled":true,"EndpointUri":"timer:\/\/TIMER_101?period=10000","CamelManagementName":"ke-test-eg001","ExchangesCompleted":1848,"LastProcessingTime":0,"ExchangesFailed":0,"Description":null,










웹과 관련한 New Line에 관하여

웹과 관련한 New Line에 관하여

1.    한줄띄기의 New line 문자는 \r, \n, \n\r에 한하여 이루어 져야 한다.

A.    LF, CR, CR+LF

B.     CHR(10), CHR(13), CHR(13) + CHR(10)

2.    \r\n은 두줄이 띄워져야 정상이다 

A.    CHR(10) + CHR(13)

3.    PRE Tag에서는 CHR(10) LF 은 무시된다

    따라서 CRLF, LFCR 모두 한줄만 띄워진다.

4.    Textarea tag에서는 모두 정상적으로 적용된다.

5.    PRE TAG에서 정상과 동일하게 표시 하려면 CHR(10)CHR(13)으로 바꿔주어야 한다

A.    그러나 CRLF는 정상적으로 한줄만 띄우게 해야하고

B.     LFCR은 두줄이 띄워지는게 정상이므로

C.     CRLF  \n\r\n으로 replace하고

D.    \r은 모두 \n으로replace 해야 한다.




//pre tag에서 new line을 원본처럼 표시하기 위해
// pre tag에서는 \r은 무시되고 \n만 적용되므로
changeNewLinePreTag(str:any){
if(!!str){
str = str.replace(/\r\n/gi, "\n"); //LFCR은 한줄이어야 하고
str = str.replace(/\r/gi, "\n"); //LF는 CR로 변경한다.
}
return str;
}

angular 동일한 route url reload 시키기


해당 컴포넌트에 roure event를 subscribe 한 후 destroy에서 해당 이벤트를 unsubscribe 한다.


this.router.navigated = false;
this.router.onSameUrlNavigation = "reload";  // 현재URL로 이동시 이벤트를 발생 시킨다.
this.router.navigate([MAIN_URI]);




=================== component ============================================



constructor 구문에서

         this.navigationSubscription = this.router.events.subscribe((e: any) => {
            // route의 onSameUrlNavigation을 RELOAD로 설정할경우 동일한 라우트로 요청이 되더라도 
            // 네비게이션 이벤트가 발생한다. 
            if (e instanceof NavigationEnd) {
              this.ngOnInit();
            }
        });



ngOnInit 구문에서 동일 url 이동시 이벤트를 다시 ignore 시킨다. 
this.router.onSameUrlNavigation = "ignore";


==========================================================
destroy

ngOnDestroy() {
        //this.eventManager.destroy(this.eventSubscriber);
        if(this.interval) clearInterval(this.interval);
        if(this.navigationSubscription) this.navigationSubscription.unsubscribe();
    }

liqquibase sqlfile path IO Exception

liqquibase sqlfile path IO Exception

changeset xml의 위치 경로기준으로 설정해야 함.

-- inittial_function.xml
   <sqlFile dbms="postgresql"
path="oracle/test.sql"
encoding="UTF-8"
relativeToChangelogFile="true"
endDelimiter="/"
splitStatements="true"/>
    oracle/
           / test.sql


========================================================
보통 config 기준으로 설정할때
config/
       liquibase/
                  master.xml
                  changelog/
                              changelog.xml
                  function/
                             function.xml


xml 파일 위치 기준에서 상대경로로 지정

                           

electron angular desktom app 만들기



https://alligator.io/angular/electron/
https://angularfirebase.com/lessons/desktop-apps-with-electron-and-angular/




https://electronjs.org/docs



angular] object의 양방향 바인딩 조심



angular 코딩시 ng2-smart-table 에 source를 바인딩 하고 rowSelect 이벤트를 할당 한후 


<ng2-smart-table [settings]="codeSettings"
[source]="rmCodeGroupsLocal"
(deleteConfirm)="onDeleteConfirm($event)"
(rowSelect)="onCodeGroupSelect($event)"
(editConfirm)="onSaveConfirm($event)"
#flowTable
></ng2-smart-table>



다음과 같이 이벤트를 구현하였을때 
this.currCodeGroup = event.data 와 같이 구현할 경우 this.currCodeGroup 객체의 값을 this.currCodeGroup.id = "" 과깉이 초기화 하였을 경우 smart-table의 소스 데이타도 같이 초기화 되는 현상을 발견 했다.

object의 = 연산이 양방향으로 적용되는 듯 하여 Object.assign 구문을 사용하여 값만 copy 되도록 변경 한 후 정상적으로 기능이 동작 함을 확인 함.

currCodeGroup:CodeGroup ;  //CodeGroup 모델타입임.


onCodeGroupSelect(event):void {
console.log("selected code group");
console.log(event);
//this.currCodeGroup = event.data;
//this.newCodeGroup = this.currCodeGroup;
//값 copy
this.currCodeGroup = Object.assign({}, event.data);
this.newCodeGroup = Object.assign({}, this.currCodeGroup);

this.loadCodes();
}






java File delete 오류



java servlet에서 File 을 delete하는 구문에서 등록 후 짧은 시간안에 삭제 구문을 수행 할때 file의 상태가 read, writeable 상태 인데도 불구하고 삭제 되지 않는 현상이 발생했다.
시간이 좀 지나면 정상적으로 삭제가 되긴 한다.

스텍 오버플로우의 조언에 따라 삭제 구문 앞에 System.gc(); 를 추가 하니 감쪽같이 해당 현상이 사라진다..

System.gc(); 
deleteDirectory(new File(wsdlWebappDir));

1 2 3 4 5 6 7 8 9 10 다음