@@ -96,46 +96,65 @@ private DBUtil(){
9696		}
9797	}
9898
99- 	private  static  Connection  getConnection () throws  SQLException {
100- 
101- 		if  (instance  == null )
102- 			instance  = new  DBUtil ();
103- 		
104- 		if  (instance .connection  == null  || instance .connection .isClosed ()){
99+ 	import  com .google .cloud .kms .v1 .KeyManagementServiceClient ;
100+ 	import  com .google .cloud .kms .v1 .CryptoKeyPathName ;
101+ 	import  com .google .cloud .kms .v1 .DecryptResponse ;
102+ 	import  com .google .protobuf .ByteString ;
103+ 	
104+ 		private  static  Connection  getConnection () throws  SQLException  {
105+ 	
106+ 			if  (instance  == null )
107+ 				instance  = new  DBUtil ();
105108
106- 			//If there is a custom data source configured use it to initialize 
107- 			if  (instance .dataSource  != null ){
108- 				instance .connection  = instance .dataSource .getConnection ();	
109+ 			if  (instance .connection  == null  || instance .connection .isClosed ()) {
109110
110- 				if  (ServletUtil .isAppPropertyTrue ("database.reinitializeOnStart" )){
111- 					instance .initDB ();
111+ 				// If there is a custom data source configured use it to initialize 
112+ 				if  (instance .dataSource  != null ) {
113+ 					instance .connection  = instance .dataSource .getConnection ();	
114+ 					
115+ 					if  (ServletUtil .isAppPropertyTrue ("database.reinitializeOnStart" )) {
116+ 						instance .initDB ();
117+ 					}
118+ 					return  instance .connection ;
112119				}
113- 				return  instance .connection ;
114- 			}
115- 			
116- 			// otherwise initialize connection to the built-in Derby database 
117- 			try  {
118- 				//attempt to connect to the database 
119- 				instance .connection  = DriverManager .getConnection (PROTOCOL +"altoro" );
120120
121- 				if  (ServletUtil .isAppPropertyTrue ("database.reinitializeOnStart" )){
122- 					instance .initDB ();
123- 				}
124- 			} catch  (SQLException  e ){
125- 				//if database does not exist, create it an initialize it 
126- 				if  (e .getErrorCode () == 40000 ){
127- 					instance .connection  = DriverManager .getConnection (PROTOCOL +"altoro;create=true" );
128- 					instance .initDB ();
129- 				//otherwise pass along the exception 
130- 				} else  {
131- 					throw  e ;
121+ 				// Otherwise initialize connection to the built-in Derby database 
122+ 				try  {
123+ 					// Retrieve the database connection string from KMS 
124+ 					String  projectId  = "your-project-id" ;
125+ 					String  locationId  = "your-location-id" ;
126+ 					String  keyRingId  = "your-key-ring-id" ;
127+ 					String  cryptoKeyId  = "your-crypto-key-id" ;
128+ 	
129+ 					KeyManagementServiceClient  client  = KeyManagementServiceClient .create ();
130+ 					CryptoKeyPathName  keyName  = CryptoKeyPathName .of (projectId , locationId , keyRingId , cryptoKeyId );
131+ 	
132+ 					byte [] ciphertext  = Base64 .getDecoder ().decode ("your-base64-encoded-ciphertext" );
133+ 					DecryptResponse  response  = client .decrypt (keyName , ByteString .copyFrom (ciphertext ));
134+ 					String  connectionString  = response .getPlaintext ().toStringUtf8 ();
135+ 	
136+ 					// Attempt to connect to the database 
137+ 					instance .connection  = DriverManager .getConnection (connectionString );
138+ 					
139+ 					if  (ServletUtil .isAppPropertyTrue ("database.reinitializeOnStart" )) {
140+ 						instance .initDB ();
141+ 					}
142+ 				} catch  (SQLException  e ) {
143+ 					// If database does not exist, create it and initialize it 
144+ 					if  (e .getErrorCode () == 40000 ) {
145+ 						// Similar retrieval for creation connection string if needed. 
146+ 						instance .connection  = DriverManager .getConnection (PROTOCOL  + "altoro;create=true" );
147+ 						instance .initDB ();
148+ 					} else  {
149+ 						throw  e ;
150+ 					}
151+ 				} catch  (IOException  e ) {
152+ 					throw  new  SQLException ("Failed to retrieve database connection string from KMS" , e );
132153				}
133154			}
134- 
155+ 			
156+ 			return  instance .connection ;	
135157		}
136- 		
137- 		return  instance .connection ;	
138- 	}
139158
140159	/* 
141160	 * Create and initialize the database 
0 commit comments