프린터가 조회없이 인쇄 작업을 처리 할 수 있는지 확인
나는 싸우고있다 PrintServiceLookup
; 이 lookupPrintServices(DocFlavor flavor, AttributeSet attributes)
방법은 초기 실행으로 응용 프로그램에서 프린터를 감지하는 데 지나치게 느립니다. 네트워크 프린터가 100 대 이상인 클라이언트는이 코드를 처음 실행할 때이 코드를 실행하는 동작이 제대로 수행되지 않는다고보고했습니다.
조회 결과가 캐시되는 것을 확인한 후 처음에는 별도의 스레드 (시작시 실행 됨) 내에 더미 조회를 배포했습니다. 그러나 특정 클라이언트의 경우이 솔루션이 작동하지 않습니다.
현재 환경이 없으며 정확한 성능 문제의 원인을 알 수 없습니다.
및 검색 을 수행 하지 않고PrintService
주어진 MediaSizeName
을 지원 하는지 확인하려고합니다 . 그래서 사용 가능한 모든 s 및 기본값을 가져옵니다 .DocFlavor
AttributeSet
PrintService
PrintService
private static final PrintService[] PRINTSERVICES =
PrintServiceLookup.lookupPrintServices(null, null);
private static final PrintService DEFAULTSERVICE =
PrintServiceLookup.lookupDefaultPrintService();
그리고는 취득 PrintService
과를 MediaSizeName
클라이언트 요청에서. 마지막으로의 지원 PrintService
여부를 묻습니다 MediaSizeName
.
private void checkPrintServiceForMediaSize(PrintService pservice) throws MediaSizeNotSupportedException{
if(!pservice.isAttributeValueSupported(_mediaSizeName,null,null))
throw new MediaSizeNotSupportedException("This media size is not supported by the selected printer.");
}
API는 선언 그 때 isAttributeValueSupported(Attribute attrval,DocFlavor flavor,AttributeSet attributes)
널 (null)로 호출 DocFlavor
하고AttributeSet
이 메소드는이 인쇄 서비스가 문서 특징 및 속성 세트의 가능한 조합에 대해 주어진 인쇄 속성 값을 지원하는지 여부를 알려줍니다.
지금까지 올바르게 작동했습니다. 그러나 프린터가 선택한 페이지 크기를 지원하는 경우 이것이 수행하는 방법인지 확실하지 않습니다.
이 문제에 대한 피드백과 경험에 감사드립니다.
최신 정보
접근 방식을 구현할 무렵 워크 스테이션에 심각한 네트워크 문제가있는 것으로 결정되어 파악하는 데 시간이 좀 걸렸습니다. 마지막으로, 네트워크로드를 시뮬레이션하기 위해 네트워킹 도구 인 SoftPerfect 연결 에뮬레이터로 구현을 테스트 했으며 결과가 크게 향상되지 않았습니다.
이 질문을 계속 테스트하고 업데이트하겠습니다. 제가 해결책을 찾고 여기 사람들과 공유 할 수 있기를 바랍니다. 초기 조회는 다음과 같습니다.
private static final PrintService[] PRINTSERVICES =
PrintServiceLookup.lookupPrintServices(null, null);
여전히 문제를 일으키고 있습니다.
업데이트 2
베타 빌드는 최종적으로 클라이언트 환경에서 테스트되었으며 인쇄 대화 상자의 성능이 약 5 배 향상되었습니다 (이제 동일한 환경에서 프린터의 초기 풀링이 약 5 분에 비해 약 1 분이 소요됨). 여전히 초기 대기 시간은 허용되는 시간이 아니지만 지금은 내가 할 수있는 최선의 방법입니다. 우리는 또한 클라이언트로부터 인쇄 서버가 사용되고 있다는 소식을 들었고 의견 (@Wardy)의 제안에 따라이 방향으로 나아갈 것입니다. 바라건대, 우리는 인쇄 서버의 장점을 활용할 수 있습니다.
보다 적극적인 캐싱. 클라이언트가 조회를 한 번 수행하고 재시작 사이에 캐시를 유지하도록합니다. 더 좋은 방법은 모든 클라이언트가 액세스 할 수있는 중앙 데이터 저장소에 캐시를 저장하는 것입니다.
네트워크 프린터와 그 기능은 그렇게 자주 변경되지는 않지만 결국 캐시를 업데이트해야하지만 "누가"와 "언제"는 환경에 따라 달라진다고 가정합니다.
백그라운드에서 현재 검색을 실행하는 클라이언트가 캐시를 업데이트 할 수 있으며 변경 사항이 감지되면 캐시를 업데이트합니다. 어쨌든 지속적으로 실행되는 중앙 구성 요소가 있다면 고정 된 간격으로 확인할 수있는 좋은 장소가 될 것입니다.
어떤 종류의 디렉터리 서비스가있는 경우 각 프린터에 연결하기 전에 해당 프린터 목록을 캐시와 비교하여 네트워크 및 CPU 부하를 줄이는 기능을 얻을 수 있습니다.
프린터의 목록이 LDAP에 저장되어있는 경우 사용하는 프린터를 조회하려고 할 수 있습니다 LDAP를 .
'Programing' 카테고리의 다른 글
모든 문자열을 바꾸는 방법은 무엇입니까? (0) | 2020.11.19 |
---|---|
텍스트 및 그룹 노드에 대한 dojox.gfx 경계 상자 (0) | 2020.11.19 |
Facebook에서 이메일이 확인되었는지 확인할 수 있습니까? (0) | 2020.11.19 |
pgAdmin을 사용하여 PostgreSQL 함수 디버그 (0) | 2020.11.19 |
Spark 코드 구성 및 모범 사례 (0) | 2020.11.19 |