Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2019
    Messaggi
    2

    javax.naming.NoInitialContextException HELP!

    Ciao a tutti ragazzi! Sto scrivendo un semplice esercizio per ejb ma mi da sempre questo errore (ho provato anche con programmi funzionanti su altri computer ma sul mio persiste sempre questo errore che ora vi allego)
    Premetto che sto usando netbeans con glassfish
    L'errore è:

    codice:
    javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
        at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350)
        at javax.naming.InitialContext.lookup(InitialContext.java:417)
        at fornitoriclientejb.FornitoriClientEJB.main(FornitoriClientEJB.java:32)
    
    CODICE: 
    // classe FornitoriClientEJB
    
    
    package fornitoriclientejb;
    import esame.FornitoreEJBRemote;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    
    
    public class FornitoriClientEJB {
        public static final Logger log = Logger.getGlobal();
        
        public static void main(String[] args){
            try {
                log.info("Inizio...");
                Context ctx;
                ctx = new InitialContext();
                log.info("Contesto creato ");
                log.info("faccio lookup");
                FornitoreEJBRemote ejbf = (FornitoreEJBRemote)ctx.lookup("java:global/Fornitori/FornitoreEJB!esame.FornitoreEJBRemote");
                log.info("tutto apposto");
             
            } catch (NamingException ex) {
                Logger.getLogger(FornitoriClientEJB.class.getName()).log(Level.SEVERE, null, ex);
            }
            
        }
    
    
    }
    
    // classe DatabasePopulator
    package esame;
    
    
    import javax.annotation.PostConstruct;
    import javax.annotation.PreDestroy;
    import javax.annotation.sql.DataSourceDefinition;
    import javax.ejb.EJB;
    import javax.ejb.Singleton;
    import javax.ejb.Startup;
    
    
    
    
    @Singleton
    @Startup
    @DataSourceDefinition(
            className ="org.apache.derby.jdbc.EmbeddedDataSource",
            name ="java:global/jdbc/EsameDS",
            user ="APP",
            password ="APP",
            databaseName ="EsameDB",
            properties ={"connectionAttributes =;crate=true"}
    
    
    )
    public class DatabasePopulator {
        @EJB
        private FornitoreEJB ejb;
        private Fornitore f1,f2;
        
        @PostConstruct
        private void populatedDB(){
            f1 = new Fornitore("123", "nome1", "cognome1", 23, 5);
            f2 = new Fornitore("3456", "nome2", "cognome2", 3, 1);
            ejb.createFornitore(f1);
            ejb.createFornitore(f2);
        }
        
        @PreDestroy
        private void clearDB(){
            ejb.deleteFornitore(f1);
            ejb.deleteFornitore(f2);
        }
    }
    
    
    //classe databaseProducer
    
    
    package esame;
    
    
    import javax.enterprise.inject.Produces;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    
    
    public class DatabaseProducer {
        @Produces
        @PersistenceContext(unitName = "FornitoriPU")
        private EntityManager em;
        
    }
    
    // classe Fornitoreejbpackage esame;
    
    
    import java.util.List;
    import javax.ejb.LocalBean;
    import javax.ejb.Stateless;
    import javax.inject.Inject;
    import javax.persistence.EntityManager;
    import javax.persistence.TypedQuery;
    
    
    
    
    @Stateless
    @LocalBean
    public class FornitoreEJB implements FornitoreEJBRemote {
        
        @Inject 
        private EntityManager em;
    
    
        @Override
        public List<Fornitore> findALLFornitore() {
           TypedQuery<Fornitore> query = em.createNamedQuery("Fornitore.findALL",Fornitore.class);
           return query.getResultList();
        }
    
    
        @Override
        public List<Fornitore> findOrdermax(int max) {
            TypedQuery<Fornitore> query = em.createNamedQuery("Fornitore.findMaxOrder",Fornitore.class);
            query.setParameter(3,max);
            return query.getResultList();
        }
    
    
        @Override
        public Fornitore findID(String id) {
            TypedQuery<Fornitore> query = em.createNamedQuery("Fornitore.findID",Fornitore.class);
            query.setParameter(1, id);
            return query.getSingleResult();
        }
    
    
        @Override
        public Fornitore findCognome(String cognome) {
            TypedQuery<Fornitore>query = em.createNamedQuery("Fornitore.findCognome",Fornitore.class);
            query.setParameter(2, cognome);
            return query.getSingleResult();
        }
    
    
        @Override
        public Fornitore createFornitore(Fornitore f) {
            em.persist(f);
             return f;
        }
    
    
        @Override
        public Fornitore updateFornitore(Fornitore f) {
            return em.merge(f);
        }
    
    
        @Override
        public Fornitore incrementaOrdini(String id, int i) {
           Fornitore f = this.findID(id);
           f.setValoteTotOrdini(f.getValoteTotOrdini()+i);
           return f;
        }
    
    
        @Override
        public void deleteFornitore(Fornitore f) {
             em.remove(em.merge(f));
        }
    
    
    }
    
    
    //classe fornitore
    
    
    package esame;
    
    
    import java.io.Serializable;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.NamedQueries;
    import javax.persistence.NamedQuery;
    import javax.validation.constraints.NotNull;
    
    
    @Entity
    @NamedQueries({
        @NamedQuery(name="Fornitore.findALL",query="SELECT f FROM Fornitore f"),
        @NamedQuery(name="Fornitore.findID",query="SELECT f FROM Fornitore f WHERE f.id=?1"),
        @NamedQuery(name="Fornitore.findCognome",query="SELECT f FROM Fornitore f WHERE f.cognome =?2"),
        @NamedQuery(name="Fornitore.findMaxOrder",query="SELECT f FROM Fornitore f WHERE f.maxOrder >?3")
    })
    public class Fornitore implements Serializable {
      
        @Id
        private String id;
        @NotNull
        private String nome;
        @NotNull
        private String cognome;
        @NotNull
        private int maxOrder;
        @NotNull
        private int valoteTotOrdini;
    
    
        public Fornitore() {
        }
    
    
        public Fornitore(String id, String nome, String cognome, int maxOrder, int valoteTotOrdini) {
            this.id = id;
            this.nome = nome;
            this.cognome = cognome;
            this.maxOrder = maxOrder;
            this.valoteTotOrdini = valoteTotOrdini;
        }
    
    
        public String getId() {
            return id;
        }
    
    
        public void setId(String id) {
            this.id = id;
        }
    
    
        public String getNome() {
            return nome;
        }
    
    
        public void setNome(String nome) {
            this.nome = nome;
        }
    
    
        public String getCognome() {
            return cognome;
        }
    
    
        public void setCognome(String cognome) {
            this.cognome = cognome;
        }
    
    
        public int getMaxOrder() {
            return maxOrder;
        }
    
    
        public void setMaxOrder(int maxOrder) {
            this.maxOrder = maxOrder;
        }
    
    
        public int getValoteTotOrdini() {
            return valoteTotOrdini;
        }
    
    
        public void setValoteTotOrdini(int valoteTotOrdini) {
            this.valoteTotOrdini = valoteTotOrdini;
        }
    
    
    }

    Aiuto!!
    Ultima modifica di LeleFT; 03-06-2019 a 09:35 Motivo: Aggiunti i tag CODE

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,082
    Java ha un forum dedicato. Sposto la discussione.
    Il codice va postato all'interno degli appositi tag CODE messi a disposizione dal forum (tasto '#' in composizione messaggio). Correggo anche questo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,082
    Ad ogni modo, stai cercando di eseguire codice JEE (Java Enterprise Edition) al di fuori di un contesto JEE. Solitamente il codice che hai postato (a parte la classe col main) gira all'interno di un Application Server (quindi all'interno di un contesto Enterprise). Se vuoi eseguire quel codice (la classe col main) devi essere tu a dargli il contesto. Ci sono diverse possibilità: o passi al InitialContext le properties valorizzate correttamente in modo da definire il corretto contesto Enterprise, oppure tali properties devono essere definite nelle opportune variabili d'ambiente.

    La prima delle properties che lui si aspetta di trovare valorizzata è "java.naming.factory.initial".


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2019
    Messaggi
    2
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Ad ogni modo, stai cercando di eseguire codice JEE (Java Enterprise Edition) al di fuori di un contesto JEE. Solitamente il codice che hai postato (a parte la classe col main) gira all'interno di un Application Server (quindi all'interno di un contesto Enterprise). Se vuoi eseguire quel codice (la classe col main) devi essere tu a dargli il contesto. Ci sono diverse possibilità: o passi al InitialContext le properties valorizzate correttamente in modo da definire il corretto contesto Enterprise, oppure tali properties devono essere definite nelle opportune variabili d'ambiente.

    La prima delle properties che lui si aspetta di trovare valorizzata è "java.naming.factory.initial".


    Ciao.

    Ciao! Comunque non c'è bisogno di usare le properties ! Sono riuscita a risolvere il problema spostando la libreria di glassfish...non ci credo che la soluzione era questa stupidaggine

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2019
    Messaggi
    2
    Grazie! Lo terrò presente per la prossima volta !

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2019 vBulletin Solutions, Inc. All rights reserved.