2010-11-12 5 views
2

Utilisation de l'EDI NetBeans et du serveur Glassfish. Pour une raison quelconque, je ne peux pas injecter de DataSource (j'ai essayé un million de variations).Glassfish - Injection de ressources ne fonctionnant pas

private DataSource iserver; 
@Resource(name="jdbc/iserver", type=DataSource.class) 
public void setIServer(DataSource dataSource) { 
    this.iserver = dataSource; 
} 

(J'ai déjà essayé d'ajouter une annotation @Resource directement dans le champ). Le pool de connexion et des ressources de jdbc sont configurés sur Glassfish, et pour l'instant, j'ai ajouté le code de contournement (dans la même classe):

ctx = new InitialContext(); 
iserver = (DataSource) ctx.lookup("jdbc/iserver"); 

Le code de contournement fonctionne parfaitement. Je ne vois pas évident erreurs pertinentes dans le journal de Glassfish. Je ne vois, mais pas sûr qu'il est lié:

* nom ne peut pas être nul à l'javax.management.ObjectName.construct (ObjectName.java:405) * à javax.management.ObjectName (ObjectName.java.: 1403) à org.glassfish.admingui.common.handlers.ProxyHandlers.getRuntimeProxyAttrs (ProxyHandlers.java:289) à org.glassfish.admingui.common.handlers.ProxyHandlers.getProxyAttrs (ProxyHandlers.java:273) à ...

Des suggestions?

Répondre

1

Assurez-vous que vous êtes dans une session bean ou que l'injection ne fonctionnera pas.

Voici un exemple de la façon dont j'injecte

@Resource(name="jdbc/my_db") private DataSource dataSource; 
+0

Merci pour votre réponse. Je suis totalement nouveau à cela - quand vous dites "assurez-vous que vous êtes dans un bean session", où exactement cela doit-il être spécifié (par exemple, est-ce que ma classe doit étendre SessionBean?) –

+1

Injection ne fonctionne que si vous re dans un haricot de session pas un pojo (plain ol java objet). Donc, si vous vous injecter besoin d'être dans une classe qui implémente l'interface distante i.e. .: @Stateless (mappedName = "YourSessionBean") public class YourSessionBean implémente YourSessionRemote { – Preston

+0

Merci beaucoup! J'apprécie la clarification. –

2

Choisissez l'option "name" par "lookup"-->

@Resource(lookup = "java:global/env/jdbc/__default") 
DataSource dataSource; 
+0

Les documents ne sont-ils pas trompeurs? La documentation de l'attribut 'name' dit: _Le nom JNDI de la ressource._ Alors merci, vous avez sauvé de nombreuses heures pour moi! –

Questions connexes