title: error in configure oracle db to Quartz.net scheduler
body: <p>I am new to the forum and also learning to build Quartz.Net for one of the business needs. The requirement is to have Quartz running as a windows service and the scheduling happens via a WCF service which interacts with a Asp.Net website. All the house keeping of Jobs related activities will be handled via this WCF service making calls to quartz windows service. What I have achieved is this model works perfectly fine when I am using RAMJobStore but when I am using AdoJobStore for Oracle DB i do not see the relevant tables getting updated with JOb Details and triggers. I have downloaded the Quartz.net server and installed it as windows service without making any changes to its code.</p>
  
  <p>I have changed the implementation as suggested but now i am getting the error as below:</p>
  
  <p><strong>Failed to obtain DB connection from data source 'QuartzDB': System.ArgumentException: '"Data Source' is an invalid connection string attribute</strong></p>
  
  <p><strong>[EDITED]:</strong>
  The edited Config of quartz server is as below:</p>
  
  <pre><code>quartz.scheduler.instanceName = ServerScheduler
      quartz.scheduler.instanceId = "AUTO
  
      # configure thread pool info
      quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartz
      quartz.threadPool.threadCount = 10
      quartz.threadPool.threadPriority = Normal
  
      quartz.jobStore.misfireThreshold = 60000
      quartz.jobStore.type = Quartz.Impl.AdoJobStore.JobStoreTX, Quartz
      quartz.jobStore.tablePrefix = QRTZ_
      quartz.jobStore.clustered = true
      quartz.jobStore.driverDelegateType = Quartz.Impl.AdoJobStore.OracleDelegate, Quartz
      quartz.jobStore.dataSource = QuartzDB
      quartz.jobStore.useProperties = true
      quartz.dataSource.QuartzDB.connectionString = "Data Source=quartzdb;User Id=XXXX;Password=YYYY";
      quartz.dataSource.QuartzDB.provider = OracleODP-20
  
      # export this server to remoting context
      quartz.scheduler.exporter.type = Quartz.Simpl.RemotingSchedulerExporter, Quartz
      quartz.scheduler.exporter.port = 555
      quartz.scheduler.exporter.bindName = QuartzScheduler
      quartz.scheduler.exporter.channelType = tcp
      quartz.scheduler.exporter.channelName = httpQuartz
  </code></pre>
  
  <p>Below is the [Edited] GetScheduler implementation at the WCF service level:</p>
  
  <p>private static IScheduler GetScheduler()
              {
                  try
                  {
                    var properties = new NameValueCollection();</p>
  
  <pre><code>         properties["quartz.scheduler.instanceName"] = "RemoteClient"; 
           properties["quartz.threadPool.threadCount"] = "0"; 
           properties["quartz.scheduler.proxy"] = "true";
           properties["quartz.scheduler.proxy.address"] = string.Format("tcp://{0}:{1}/{2}", "localhost", "555",
                                                                               "QuartzScheduler");
                  // Get a reference to the scheduler
                  var sf = new StdSchedulerFactory(properties);
  
                  return sf.GetScheduler();
  </code></pre>
  
  <p>}</p>
  
  <p>The CreateJob and Trigger as defined in WCF service as below:</p>
  
  <pre><code>public string ScheduleJob&lt;T&gt;(string jobName, string jobGroup, string triggerName, string triggerGroup) where T : IJob
          {
              try
              {
                  var scheduler = GetScheduler();
                  if (scheduler != null)
                  {
                      var jobKey = new JobKey(jobName, jobGroup);
                      var job = JobBuilder.Create&lt;T&gt;()
                          .WithIdentity(jobKey)
                          //.StoreDurably()
                          //.RequestRecovery(true)
                          .Build();
  
                      ICronTrigger triggerObject = CreateCronTrigger(triggerName, triggerGroup);
                      if (triggerObject != null)
                      {
                          // Validate that the job doesn't already exists
                          //if (scheduler.CheckExists(new JobKey(jobKey)))
                          //{
                          //    scheduler.ScheduleJob(job, triggerObject);
                          //}
                          scheduler.ScheduleJob(job, triggerObject);
                          //scheduler.Start();
  
                          return "SUCCESS";
                      }
                      _log.FatalFormat("{0}Trigger could not be instantiated", Environment.NewLine);
                      return "FAILURE";
                  }
                  _log.FatalFormat("{0}Scheduler could not be instantiated", Environment.NewLine);
                  return "FAILURE";
              }
  
              catch (Exception ex)
              {
                  _log.FatalFormat("{0}Job could not be scheduled", Environment.NewLine);
                  return "FAILURE";
              }
          }
  
          public ICronTrigger CreateCronTrigger(string triggerName, string triggerGroup)
          {
              try
              {
                  var trigger = (ICronTrigger)TriggerBuilder.Create()
                      .WithIdentity(triggerName, triggerGroup)
                      .WithCronSchedule("0 0/1 * 1/1 * ? *") // Queues the job every minute
                      .StartAt(DateTime.UtcNow)
                      .WithPriority(1)
                      .Build();
  
                  return trigger;
              }
  
              catch (Exception ex)
              {
                  _log.FatalFormat("{0}Cron trigger could not be created", Environment.NewLine);
                  return null;
              }
          }
  </code></pre>
  
  <p>Any ideas why I am not able to connect to Oracle. The same credentials work fine when i connect via sqlplus.</p>
  
  <p>Please help!</p>