Comment dois-je créer un contrôleur qui est en sécurité?
Selon les meilleurs contrôleurs de la pratique, Singleton est Singleton. P>
Considérez le code ci-dessous dans lequel IM enregistre les données d'utilisateur via un objet de service Auto-opiité. rend mon code sotculeux.
Comment ferais-je la sécurité du fil de code ci-dessous. P> Voici mon implémentation de service.
J'ai partagé une variable partagée dans mon service p> } p> p>
3 Réponses :
Les contrôleurs sont Concevez votre application de manière à ce que les contrôleurs sont apatrides. Ajouter une prise en charge transactionnelle dans votre Exemple: EM> PR> P> singletons code>, ils sont donc
@Repository code> couche. P>
public class GenericRepository<T, Serializable> {
@Transactional
public void save(T object) {
// save user
}
}
Les contrôleurs doivent être appliqués à l'application.
@fabfas Annotation de manière générale transactionnelle ne doit pas être appliqué sur la couche de référentiel, l'utiliser au lieu de la couche de service. Eh bien, tout dépend de votre cas d'utilisation aussi.
Votre contrôleur a l'air de fil en sécurité. Comme il n'y a pas de variable d'instance stockant l'état. L'objet utilisateur sera différent pour chaque demande et sera résolu par le cadre MVC. P>
idbservice est partagé
idbservice est partagé mais il n'a pas d'état partagé ou n'a aucune variables d'instance stockant des valeurs pouvant être modifiées par d'autres threads.Refer [ Stackoverflow.com/questions/11508405/... & [ Stackoverflow.com/questions/11485486/...
Votre contrôleur est un singleton par défaut et votre service est également Singleton par défaut. P>
Par conséquent, afin de les faire du thread de sécurité, vous devez vous assurer que les opérations qui se produisent à l'intérieur du service doivent être en sécurité, en cas de modification de l'état d'un objet à l'intérieur du service. une liste. p>
En cas d'utilisation d'un RDBM, vous avez un problème de transaction. P>
Si vous utilisez Spring et JPA, le gestionnaire de transactions prendra soin de vos mises à jour à condition que vous utilisiez @TransAderal. En cas de méthode JDBC uni, vous pouvez utiliser Pure JDBC et effectuer la manipulation de la transaction à votre guise ou utiliser Spring-JDBC fournie avec un Manager de transaction . P>
Si vous souhaitez que les lignes de base de données ne soit pas modifiées en cas d'écriture en cours, vous devez prendre en compte les mécanismes connexes de verrouillage de la ligne. - Gkatzioura 7 février à 15h23 p>
En cas de JPA en utilisant @TransAderal fera le travail. Cependant, en fonction de votre application, vous devrez peut-être envisager de verrouiller. Vérifiez
5 commentaires
Oui.Je comprends ces points.Je Planifiez d'ajouter Suppr, Mettre à jour, obtenez des méthodes à mon service.so Comment puis-je résoudre le problème associé à la transaction.
Si vous utilisez Spring et JPA, le gestionnaire de transactions prendra soin de vos mises à jour à condition que vous utilisiez @TransAderal. En cas de méthode JDBC uni, vous pouvez utiliser Pure JDBC et effectuer la gestion de la transaction à vous-même ou utilisez Spring-JDBC avec un gestionnaire de transactions. Vérifiez ces liens JournalDev.com/2603/spring-Transaction-Management-jdbc -examp le docs.spring.io/spring-framework/docs/4.2.x/...
Si vous souhaitez que les lignes de base de données ne soit pas modifiées en cas d'écriture en cours, vous devez prendre en compte les mécanismes associés à verrouillage de ligne.
J'utilise JPA.
Ensuite, utiliser @TransAderal fera le travail. Cependant, en fonction de votre application, vous devrez peut-être envisager de verrouiller. Vérifiez cet article sur le verrouillage avec jpa Vladmihalcea. COM / 2015/01/12 / ...
Le code est le fil de sécurité .... En supposant qu'il n'y ait pas d'état partagé à l'intérieur du service ...
Je ne considérerais pas ce contrôleur sotticuleux, à moins que votre IdserVice soit énorme.
Si mon service est étatique, alors cela posera-t-il un problème
La meilleure approche à suivre dans le cas d'un service d'identification d'état serait-elle?