Hi imparare ancora la speranza che qualcuno possa riempire gli spazi vuotiPrimavera lavoro programma di avvio non in grado di accedere ai servizi
ho sistema discontinuo primavera quarzo jsvc che è stato in esecuzione per più di un anno. Il lanciatore di lavoro deve connettersi a 2 servizi primaverili che vengono eseguiti correttamente in altre parti del sistema. Ogni servizio ha un numero di repository o servizi sql immessi in esso. Si prega di prendere nota delle dichiarazioni del pacchetto. per la voce del contesto dell'applicazione.
package com.mycompany.business.services.impl;
....
@Service
public class BatchProcessService {
private final DomainSepcificRepository1 rep1;
...
private final DomainSepcificRepositoryN repN;
@Inject
public BatchProcessService(Final final DomainSepcificRepository1 rep1,..., final DomainSepcificRepositoryN repN) {
// injected values assigned to instance variables.
}
public List <...> findByCriteria(.....)(
.....
}
}
e
package com.mycompany.business.services.impl;
....
@Service
public class EmailNotificationServiceImpl implements EmailNotificationService {
private UserService userService;
private final MailMessage mailMessage;
private final MailTransport mailTransport;
@Inject
public EmailNotificationServiceImpl(final UserService userService, final MailMessage mailMessage, final MailTransport mailTransport) {
this.userService = userService;
this.mailMessage = mailMessage;
this.mailTransport = mailTransport;
}
.....
public void notifySupportStaff(....){
.....
}
}
Nel mio file dell'applicazione contesto xml, c'è la seguente riga che dovrebbe consentire il mio lavoro di avvio per vedere e istanziare i servizi di cui sopra. Penso che "base-pacchetto =" specifichi i pacchetti da cercare per @services, @components e @repositories che possono essere iniettati.
<context:component-scan base-package="com.mycompany.common.batch, com.mycompany.batch, com.mycompany.business.services" >
<context:exclude-filter type="assignable" expression="com.mycompany.common.batch.scheduler.service.MyCompanySchedulerService"/>
</context:component-scan>
- penso che @Component dovrebbe consentire questa classe per vedere i servizi e li ed eventuali dipendenze (altri servizi) che hanno instaniate.
- Per qualche motivo il sistema jsvc desidera solo richiamare la classe seguente con il costruttore NO arg. e non sta iniettando i 2 servizi.
- I miei test di unità sono in grado di testare il metodo utilizzando il servizio solo se fornisco un costruttore di argomenti a 2 argomenti per i servizi MOCK. lll
Dei pensieri su perché il sistema batch non può iniettare le dipendenze?
package com.mycompany.batch.scheduler;
....
@Inject
private BatchProcessService batchProcessService;
@Inject
private EmailNotificationService emailNotificationService;
@Component
public class MyCompanySchedulerJobLauncher extends SchedulerJobLauncher {
public MyCompanySchedulerJobLauncher() {
super();
}
// @Inject
public MyCompanySchedulerJobLauncher(final BatchProcessService batchProcessService, final EmailNotificationService emailNotificationService) {
super();
this.batchProcessService = batchProcessService;
this.emailNotificationService = emailNotificationService;
}
@Override
public int processJob(final JobExecutionContext context) throws JobRestartException, JobExecutionAlreadyRunningException, ParseException {
......
if(batchProcessSerive.findByCriteria(....).size() == 0) {
emailNotificationService.notifySupport(...)
}
}
uno dei miei colleghi ha individuato il mio problema –