======================
STS + Spring Boot 환경에서 Documsnts4j를 이용하여 Docx를 PDF로 변환하는 코드를 구현하였습니다.
STS의 개발 환경에서 구현하다 보니 Embedded Tomcat에서는 잘 동작하는데, 막상 서비스를 위해 Tomcat에 배포를 하니 Documtns4j의 Convert가 제대로 수행되지 않았습니다.
Convert 수행시 Exception는 다음과 같습니다.
com.documents4j.throwables.ConverterAccessException: The converter seems to be shut down
at com.documents4j.util.Reaction$ConverterAccessExceptionBuilder.make(Reaction.java:117) ~[documents4j-util-all-1.0.2.jar:na]
at com.documents4j.util.Reaction$ExceptionalReaction.apply(Reaction.java:75) ~[documents4j-util-all-1.0.2.jar:na]
at com.documents4j.conversion.ExternalConverterScriptResult.resolve(ExternalConverterScriptResult.java:70) ~[documents4j-transformer-api-1.0.2.jar:na]
at com.documents4j.conversion.ProcessFutureWrapper.evaluateExitValue(ProcessFutureWrapper.java:48) ~[documents4j-util-transformer-process-1.0.2.jar:na]
at com.documents4j.conversion.ProcessFutureWrapper.get(ProcessFutureWrapper.java:36) ~[documents4j-util-transformer-process-1.0.2.jar:na]
at com.documents4j.conversion.ProcessFutureWrapper.get(ProcessFutureWrapper.java:11) ~[documents4j-util-transformer-process-1.0.2.jar:na]
at com.documents4j.job.AbstractFutureWrappingPriorityFuture.run(AbstractFutureWrappingPriorityFuture.java:78) ~[documents4j-util-conversion-1.0.2.jar:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_74]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_74]
at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_74]
Documnts4j는 VBScript를 이용하여 변환을 수행합니다.
4:36:16.109 INFO c.d.c.msoffice.MicrosoftWordBridge - From-Microsoft-Word-Converter was started successfully
14:36:16.112 INFO com.documents4j.job.LocalConverter - The documents4j local converter has started successfully
14:36:16.124 INFO c.d.c.msoffice.MicrosoftWordBridge - Requested conversion from C:\Users\gmpark\AppData\Local\Temp\1575264973533-0\68ed3e6b-ab29-47ff-8ee5-fafebe14c5a6\temp1 (application/vnd.com.documents4j.any-msword) to C:\Users\gmpark\AppData\Local\Temp\1575264973533-0\68ed3e6b-ab29-47ff-8ee5-fafebe14c5a6\temp2 (application/vnd.com.documents4j.pdf-a)
MicrosoftWordBridge가 정상적으로 수행되었고, VBScript도 정상적으로 생성하였습니다.
먼저, 해당 VBScript가 정상적으로 수행되는지 확인해봅니다.
(대상 파일 : C:\test.docx, 결과 파일 : C:\test.pdf, 변환 포맷 : 999(PDFA)
cd C:\Users\gmpark\AppData\Local\Temp\1575264973533-0
script word_convert754050868.vbs C:\test.docx C:\test.pdf 999
정상적으로 변환이 되네요…
Documents4j가 생성해준 VBScription는 이상이 없으니, Java에서 실행시켜주는게 문제일 것 같네요.
STS 환경에선 정상적으로 수행이 됬으니, Tomcat 설정을 확인해봅니다.
Tomcat은 기본적으로 Local Service account로 실행되도록 설정이 되어 있네요.
해당 설정을 Local System account로 변경하고 재시작하였습니다.
정상적으로 수행이 되네요!!
Tomcat이 Local Service accout 권한인 경우 Word를 실행시키지 못해 발생하는 문제인 것 같네요.
앞으로 Tomcat으로 배포시 유의해야 할 것 같습니다
|-- 국가기술자격
| |-- 한국산업인력공단
| | |-- 멀티미디어콘텐츠제작전문가
| | |-- 사무자동화산업기사
| | |-- 전자계산기조직응용기사
| | |-- 정보관리기술사
| | |-- 정보기기운용기능사
| | |-- 정보처리기능사
| | |-- 정보처리기사
| | |-- 정보처리산업기사
| | |-- 컴퓨터시스템응용기술사
| |-- 대한상공회의소
| | |-- 워드프로세서
| | |-- 전산회계운용사
| | |-- 전자상거래관리사
| | |-- 전자상거래운용사
| | |-- 컴퓨터활용능력
| | |-- 한국인터넷진흥원
| | |-- 정보보안기사
| | |-- 정보보안산업기사
| |-- 한국콘텐츠진흥원
| | |-- 게임그래픽전문가
| | |-- 게임기획전문가
| | |-- 게임프로그래밍전문가
|-- 국가공인자격
| |-- 한국정보통신진흥협회
| | |-- 공무원정보이용능력평가(NIT)
| | |-- 디지털정보활용능력(DIAT)
| | |-- 리눅스마스터
| | |-- 인터넷정보관리사
| |-- 한국정보평가협회
| | |-- CS Leaders(관리사)
| | |-- PC Master(정비사)
| |-- 피씨티
| | |-- PC활용능력평가시험(PCT)
| |-- 대한상공회의소
| | |-- 컴퓨터운용사
| |-- 대한정보통신기술
| | |-- 정보기술프로젝트관리전문가(IT-PMP)
| |-- 한국데이터베이스진흥원
| | |-- SQL
| | |-- 데이터분석전문가
| | |-- 데이터분석준전문가
| | |-- 데이터아키텍처전문가(DAP)
| |-- 한국사물인터넷협회
| | |-- RFID기술자격검정(RFID-GL/RFID-SL)
| |-- 한국정보통신자격협회
| | |-- PC정비사
| | |-- 네트워크관리사
| |-- 한국정보화진흥원
| | |-- 정보시스템감리사
|-- 국제전문자격
| |-- Cisco
| | |-- Cisco Certified Network Associate(CCNA)
| | |-- Cisco Certified network Professional(CCNP): Routing and Switching
| | |-- Cisco Certified network Professional(CCNP): Collabroration
| | |-- Cisco Certified network Professional(CCNP): Data Center
| | |-- Cisco Certified network Professional(CCNP): Cluod
| | |-- Cisco Certified network Professional(CCNP): Security
| | |-- Cisco Certified network Professional(CCNP): Wireless
| | |-- Cisco Certified network Professional(CCNP): Service Provider
| | |-- Cisco Certified Internetwork Expert(CCIE): Enterprise Infrastructure
| | |-- Cisco Certified Internetwork Expert(CCIE): CCIE Enterprise Wireless
| | |-- Cisco Certified Internetwork Expert(CCIE): Data Center
| | |-- Cisco Certified Internetwork Expert(CCIE): Security
| | |-- Cisco Certified Internetwork Expert(CCIE): service Provider
| | |-- Cisco Certified Architect
| |-- IBM
| | |-- IBM Certified Systems Expert
| | |-- IBM Certified Advanced Technical Expert
| | |-- IBM Certified System Administrator
| |-- Microsoft
| | |-- Microsoft Certified Professional(MCP)
| | |-- Microsoft Certified Solutions Associate(MCSA): BI Reporting
| | |-- Microsoft Certified Solutions Associate(MCSA): Microsoft Dynamics 365 for Operations
| | |-- Microsoft Certified Solutions Associate(MCSA): Office 365
| | |-- Microsoft Certified Solutions Associate(MCSA): SQL 2016 BI Development
| | |-- Microsoft Certified Solutions Associate(MCSA): SQL 2016 Database Administration
| | |-- Microsoft Certified Solutions Associate(MCSA): SQL 2016 Database Development
| | |-- Microsoft Certified Solutions Expert(MCSE): Business Applications
| | |-- Microsoft Certified Solutions Expert(MCSE): Core Infrastructure
| | |-- Microsoft Certified Solutions Expert(MCSE): Data Management and Analytics
| | |-- Microsoft Certified Solutions Expert(MCSE): Mobility
| | |-- Microsoft Certified Solutions Expert(MCSE): Productivity
| | |-- Microsoft Office Specialist(MOS)
| | |-- Microsoft Technology Associate(MTA)
| | |-- Microsoft Professional Program(MPP)
| |-- Google
| | |-- Google Analytics Individual Qualification(GAIQ)
| |-- Oracle
| | |-- Oracle Certified Junior Associate(OJA)
| | |-- Oracle Certified Associate(OCA)
| | | |-- Oracle Database Administrator Certified Associate
| | | |-- Oracle PL/SQL Developer Certified Associate
| | | |-- Oracle Database SQL Certified Associate
| | | |-- Oracle Certified Associate, Java Programmer
| | |-- Oracle Certified Professional(OCP)
| | | |-- Oracle Database Administration Certified Professional
| | | |-- Oracel Database PL/SQL Developer Certified Professional
| | | |-- Oracle Certified Professional, MySQL Database Administrator
| | | |-- Oracle Certified Professional, MySQL Developer
| | | |-- Oracle Certified Professional: Java SE Developer
| | | |-- Oracle Certified Professional, Java EE Application Developer
| | |-- Oracle Certified Master(OCM)
| | | |-- Oracle Database Administration Certified Master
| | | |-- Oracle Certified Master, Java EE Enterprise Architect
| | |-- Oracle Certified Specialist(OCS)
| | | |-- Oracle Identity Governance Suite 11g PS3 Certified Implementation Specialist
| | | |-- Oracle Database 12c Certified Implementation Specialist
| | | |-- Oracle Real Application Clusters 12c Certified Implementation Specialist
| | |-- Oracle Certified Expert(OCE)
| | | |-- Oracle Certified Expert, Oracle Database 12c: Performance Management and Tuning
| | | |-- Oracle Certified Expert, Oracle Database 12c: RAC and Grid Infrastructure Administrator
| | | |-- Oracle Database 12c Maximum Availability Certified Expert
| | | |-- Oracle Database 12c Maximum Availability Certified Master
| |-- Adobe
| | |-- Adobe Certified Associate(ACA)
| |-- Autodesk
| | |-- Autodesk Certified User(ACU)
| | |-- Autodesk Certified Professional(ACP)
| |-- CompTIA
| | |-- CompTIA netowrk+
| | |-- CompTIA Linux
| | |-- CompTIA Server+
| | |-- CompTIA Storage+
| | |-- CompTIA Mobile App Security+
| | |-- CompTIA Security+
| | |-- CompTIA Advanced Security Practitioner
| | |-- CompTIA Strata IT Fundamentals
| | |-- CompTIA A+
| | |-- CompTIA CDIA+
| | |-- CompTIA Cloud+
| | |-- CompTIA CTT+
| | |-- CompTIA Mobility+
| | |-- CompTIA Project+
| | |-- CompTIA Cloud Essentials
| | |-- CompTIA Healthcare IT Technician
| |-- LPI
| | |-- Linux Essentials
| | |-- LPIC1 Linux administratior
| | |-- LPIC2 Linux Engineer
| | |-- LPIC3 Enterprise professional(Mixed Environment/Security/Virtualization&HA)
| |-- Redhat
| | |-- Red Hat Certified System Administrator(RHCSA)
| | |-- Red Hat Certified Engineer(RHCE)
| | |-- Red Hat Certified Architect(RHCA)
| | | |-- Red Hat Certified Architeca(RHCA) in Infrastructure
| | | | |-- Red Hat Certified System Administrator in Red Hat OpenStack
| | | | |-- Red Hat Certified Specialist In Hybrid Cloud Management
| | | | |-- Red hat Certified Specialist in Containerized Application Development
| | | | |-- Red Hat Certified Specialist in OpenShift Administration
| | | | |-- Red Hat Certified Engineer in Red Hat OpenStack
| | | | |-- Red Hat Certified Virtualization Administrator
| | | | |-- Red Hat Certified Specialist in Linux Diagnostics and Troubleshooting
| | | | |-- Red Hat Certified Specialist in Deployment and Systems Management
| | | | |-- Red Hat Certified Specialist in Configuration Management
| | | | |-- Red Hat Certified Specialist in Ansible Automation
| | | | |-- Red Hat Certified Specialist in Server Security and Hardening
| | | | |-- Red Hat Certified Specialist in High Availability Clustering
| | | | |-- Red Hat Certified Specialist in Linux Performance Tuning
| | | | |-- Red Hat Certified Specialist in Security: Linux
| | | | |-- Red Hat Certified Specialist in OpenShift Application Development
| | | |-- Red Hat Certified Architect(RHCA) in Enterprise Applications
| | | | |-- Red Hat Certified Specialist in Enterprise Application Server Administration
| | | | |-- Red Hat Certified Specialist in Containerized Application Development
| | | | |-- Red Hat Certified Specialist in OpenShift Administration
| | | | |-- Red Hat Certified Specialist in Configuration Management
| | | | |-- Red Hat Certified Specialist in Ansible Automation
| | | | |-- Red Hat Certified Specialist in Camel Development
| | | | |-- Red Hat Certified Specialist in Fast-Cache Application Development
| | | | |-- Red Hat Certified Specialist in Business Rules
| | | | |-- Red Hat Certified Specialist in Business Process Design
| | | | |-- Red Hat Certified Specialist in OpenShift Application Development
| | |-- Red Hat Certified Engineer in Red Hat OpenStack
| | |-- Red Hat Certified Enterprise Application Developer
| | |-- Red Hat Certified Enterprise Microservices Developer
| | |-- Red Hat Certified System Administrator in Red Hat OpenStack
| |-- C++ Insitute
| | |-- C Programming Language Certification Assiociate
| | |-- C++ Certified Assiociate Programmer
| | |-- C++ Certified Professional Programmer
현재 운영 중인 블로그는 Jekyll을 이용하여 Gaohaoyang님의 테마를 적용하였습니다.
Jekyll 설치 관련하여서는 많은 글들이 있지만, 나중에 다시 환경을 구성해야 할 경우에 참고하기 위한 기록입니다.
OS : Ubuntu18.04LTS on Windows10
> sudo apt install ruby
> sudo apt install ruby-dev
> sudo gem install jekyll
> sudo gem install jekyll-paginate
> jekyll s
데이터가 모든 디스크에 분산되어 저장된다.
데이터가 2개의 디스크에 중복으로 저장된다.
데이터가 모든 디스크에 분산되어 저장되고, ECC(Error Correction COde)는 별도의 디스크에 저장된다. 현재 거의 사용 하지 않음
바이트 단위의 데이터를 모든 디스크에 분산하여 저장하고 패리티 정보는 별도의 디스크에 저장된다. (= RAID-0 + 패러티(바이트) 디스크)
블럭 단위의 데이터를 모든 디스크에 부산하여 저장하고 패리티 정보는 별도의 디스크에 저장된다. (= RAID-0 + 패러티(블럭) 디스크)
블럭 단위의 데이터와 패러티 정보가 모든 디스크에 분산되어 저장된다. 데이터를 블럭 단위로 모든 디스크에 나뉘어 저장하고 패리티 정보도 모든 디스크에 분산되어 저장된다. (= RAID-4 - 패러티(블럭) 디스크)
블럭 단위의 데이터와 패리티 정보(2회)가 모든 디스크에 분산되어 저장된다. (= RAID-5 + 2차 패러티)
RAID-0을 구성한 후 RAID-1으로 구성 RAID-10과 차이점은 RAID-0을 먼저 구성하느냐 RAID-1을 먼저 구성하느냐의 차이임 (RAID-0 + RAID-1)
RAID-1을 구성한 후 RAID-0으로 구성 RAID-01보다 유리 (RAID-0 + RAID-1)
C# 프로젝트 생성
참조에 OracleManagedDataAccess 추가

using Oracle.ManagedDataAccess.Client;
string serverAddress = "localhost";
string serviceName = "ORCL";
string userId = "scott";
string userPw = "000000";
string connectStr = string.Format("Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT=1521))(CONNECT_DATA=(SERVICE_NAME={1})));User Id={2};Password={3};", serverAddress, serviceName, userId, userPw);
using (OracleConnection cnn = new OracleConnection(connectStr))
{
cnn.Open();
/*************************** Create *************************************/
OracleCommand insertCmd = new OracleCommand();
insertCmd.Connection = cnn;
insertCmd.CommandText = "INSERT INTO USERS(ID, USERNAME) VALUES (:id, :NAME)";
insertCmd.Parameters.Add("ID", OracleDbType.Int32);
insertCmd.Parameters.Add("USERNAME", OracleDbType.Varchar2, 50);
insertCmd.Parameters[0].Value = 1;
insertCmd.Parameters[1].Value = "test";
int affected = insertCmd.ExecuteNonQuery();
Console.WriteLine("# Result : " + affected);
/*************************** Read *************************************/
// Select - ExecuteScalar
OracleCommand selectCmd = new OracleCommand();
selectCmd.Connection = cnn;
selectCmd.CommandText = "SELECT USERNAME FROM USERS WHERE ID=1";
object result = selectCmd.ExecuteScalar();
Console.WriteLine("# Result : " + result);
// Select - DataTable
DataSet ds = new DataSet();
OracleDataAdapter da = new OracleDataAdapter("SELECT * FROM USERS", cnn);
da.Fill(ds, "USERS");
DataTable dt = ds.Tables["USERS"];
foreach (DataRow dr in dt.Rows)
{
Console.WriteLine(string.Format("ID = {0}, USERNAME = {1}", dr["ID"], dr["USERNAME"]));
}
/*************************** Update *************************************/
OracleCommand updateCmd = new OracleCommand();
updateCmd.Connection = cnn;
updateCmd.CommandText = "UPDATE USERS SET USERNAME = :USERNAME WHERE ID = :ID";
updateCmd.Parameters.Add("USERNAME", OracleDbType.Varchar2, 150);
updateCmd.Parameters.Add("ID", OracleDbType.Int32);
updateCmd.Parameters[0].Value = "test2";
updateCmd.Parameters[1].Value = 1;
affected = updateCmd.ExecuteNonQuery();
Console.WriteLine("# Result : " + affected);
/*************************** Delete *************************************/
OracleCommand deleteCmd = new OracleCommand();
deleteCmd.Connection = cnn;
deleteCmd.CommandText = "DELETE FROM USERS WHERE ID = :ID";
deleteCmd.Parameters.Add("ID", OracleDbType.Int32);
deleteCmd.Parameters[0].Value = 1;
affected = deleteCmd.ExecuteNonQuery();
Console.WriteLine("# Result : " + affected);
}
서버 탐색기 - 연결 추가 클릭

데이터 소스 변경 - Oracle 데이터베이스 - ODP.NET, 관리되는 드라이버 선택

연결 정보 입력

데이터 연결 확인

ODP.NET을 사용하기 위해서는 OracleManagedDataAccess.dll을 참조에 추가하면 된다.
관련 라이브러리들을 직접 다운로드 받아 추가하여도 되지만, Nuget을 이용하거나 ODT(Oracle Developer Tools) for Visual Studio를 설치하는 것을 권장한다.
(ODAC로는 테스트를 해보지 않았음)
솔루션 탐색기에서 참조 또는 프로젝트를 선택 -> 오른쪽 단추 클릭 하고 NuGet 패키지 관리..클릭

찾아보기 - ODP.NET 검색하여 설치 클릭

라이센스 동의 버튼 클릭

설치 완료
