Carregar metodos somente uma vez e deixar na memória?

Usando JSF, tenho esta classe abaixo. Quero que ela carrega somente uma vez e que os retornos de cada método fique em memória. Ao entrar no sistema eu chamo esta classe.

Assim já ficará em memória?

package org.desif.util;
import java.io.Serializable;
import java.util.Set;
import javax.faces.context.FacesContext;
import org.desif.model.desif.EntidadeEntity;
import org.desif.model.publico.UsuarioEntity;
import org.desif.repository.desif.EntidadeRepository;
public abstract class UsuarioLogado implements Serializable {

	private static final long serialVersionUID = 2189498240202823230L;

	/**
	 * Buscar o usuário logado, deve carregado ao entrar no sistema;
	 */
	public static UsuarioEntity usuarioLogado() {
		FacesContext contexto = FacesContext.getCurrentInstance();
		UsuarioEntity usuarioLogado = 
              (UsuarioEntity) contexto.getExternalContext().getSessionMap()
				.get("usuarioLogadoSistema");
		return usuarioLogado;
	}

	/**
	 * Municipios do usuário logado, deve carregado ao entrar no sistema;
	 */
	public static Set<EntidadeEntity> municipioUsuarioLogado() {
		UsuarioEntity usuarioLogado = usuarioLogado();
		Set<EntidadeEntity> municipiosUsuarioLogado = EntidadeRepository
		    .municipiosUsuariosLogadoEmpresaEntidade(usuarioLogado);
		return municipiosUsuarioLogado;
	}

}

Já ouviu falar em singleton?

Não @Luis_Augusto_Santos.

Mas a ideia seria esta; http://www.devmedia.com.br/trabalhando-com-singleton-java/23632 ?

Pelo que entendi, toda classe que desejo utilizar o singleton, devo fazer isto?

public DeclaracaoController() {
        getInstance();
}

public static synchronized UsuarioLogado getInstance() {
       logger.info("Instaciou usuário logado.");
    	if (instancia == null) {
    	           instancia = UsuarioLogado.getInstante();
    	}
    	return instancia;
}

A variável instancia, sempre terá as informações que preciso da classe UsuarioLogado. Buscando pelos métodos e variáveis públicas.

Tem duas coisas:
1 - Singleton não é só isso que você viu, mas, basicamente, funciona desta forma
2 - Não adianta criar todos os elementos como singleton se o escopo do teu managed bean (ou dos managed beans) é diferente de @SessionScoped

Correto pelo que percebi este é o início e estou estudando para entender mais.

Bom vou tentar explicar o que estou fazendo.

Minha ideia é deixar em memória o usuário logado, as entidades do usuário, as empresas do usuário e os grupos do usuário. Isto para no ter que ficar fazendo consulta toda hora em banco.

Minha classe de usuário logado que acho que é o singleton que entendi.

package org.desif.singleton;

    import java.io.Serializable;
    import java.util.Set;

    import javax.ejb.EJB;
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.SessionScoped;

    import org.desif.model.desif.EmpresaEntity;
    import org.desif.model.desif.EntidadeEntity;
    import org.desif.model.publico.UsuarioEntity;
    import org.desif.repository.desif.EmpresaRepository;
    import org.desif.repository.desif.EntidadeRepository;

    /**
     * Deve carregado ao entrar no sistema;
     */
    @ManagedBean(name = "usuariologadocontroller")
    @SessionScoped
    public final class UsuarioLogado implements Serializable {

    	private static final long serialVersionUID = 2189498240202823230L;
    	private static final UsuarioLogado INSTANCE = new UsuarioLogado();
    	private static UsuarioEntity usuarioLogado;
    	private static Set<EntidadeEntity> usuariosLogadoEntidades;
    	private static Set<EmpresaEntity> usuariosLogadoEmpresas;

    	@EJB
    	EntidadeRepository entidadeRepository = new EntidadeRepository();

    	public static UsuarioEntity getUsuarioLogado() {
    		return usuarioLogado;
    	}

    	private static void setUsuarioLogado(UsuarioEntity usuarioLogado) {
    		UsuarioLogado.usuarioLogado = usuarioLogado;
    	}

    	public static Set<EntidadeEntity> getUsuariosLogadoEntidades() {
    		return usuariosLogadoEntidades;
    	}

    	private static void setUsuariosLogadoEntidades(Set<EntidadeEntity> usuariosLogadoEntidades) {
    		UsuarioLogado.usuariosLogadoEntidades = usuariosLogadoEntidades;
    	}

    	public static Set<EmpresaEntity> getUsuariosLogadoEmpresas() {
    		return usuariosLogadoEmpresas;
    	}

    	private static void setUsuariosLogadoEmpresas(Set<EmpresaEntity> usuariosLogadoEmpresas) {
    		UsuarioLogado.usuariosLogadoEmpresas = usuariosLogadoEmpresas;
    	}

    	private UsuarioLogado() {
    		usuarioLogado();
    		municipioUsuarioLogado();
    	}

    	public static UsuarioLogado getInstante() {
    		return INSTANCE;
    	}

    	/**
    	 * Buscar o usuário logado, deve ser carregado ao entrar no sistema;
    	 */
    	private void usuarioLogado() {
    		// FacesContext contexto = FacesContext.getCurrentInstance();
    		// UsuarioEntity usuarioLogado = (UsuarioEntity)
    		// contexto.getExternalContext().getSessionMap()
    		// .get("usuarioLogadoSistema");

    		UsuarioEntity usuarioLogado = new UsuarioEntity();
    		usuarioLogado.setId(1l);

    		setUsuarioLogado(usuarioLogado);
    	}

    	/**
    	 * Entodades do usuário logado, deve ser carregado ao entrar no sistema;
    	 */
    	private void municipioUsuarioLogado() {
    		Set<EntidadeEntity> municipiosUsuarioLogado = entidadeRepository.municipiosUsuariosLogadoEmpresaEntidade(getUsuarioLogado());
    		setUsuariosLogadoEntidades(municipiosUsuarioLogado);
    	}

    	/**
    	 * Contribuintes do usuário logado, deve ser carregado ao entrar no sistema;
    	 */
    	@SuppressWarnings("unused")
    	private static void contribuinteUsuarioLogado() {
    		Set<EmpresaEntity> municipiosUsuarioLogado = EmpresaRepository
    				.entidadesUsuariosLogadoEmpresaEntidade(getUsuarioLogado());
    		setUsuariosLogadoEmpresas(municipiosUsuarioLogado);
    	}

    }

Minha classe que faz a consulta para guardar as informações no singlebean

package org.desif.repository.desif;

    import java.io.Serializable;
    import java.util.HashSet;
    import java.util.Set;

    import javax.ejb.Stateless;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import javax.persistence.Query;

    import org.desif.model.desif.EntidadeEntity;
    import org.desif.model.publico.UsuarioEntity;

    @Stateless 
    public class EntidadeRepository implements Serializable {

    	private static final long serialVersionUID = -4105245812731304728L;

    	@PersistenceContext
    	private EntityManager em;

    	/**
    	 * Busca as entidades do usuário logado
    	 */
    	@SuppressWarnings({ "unchecked", "rawtypes" })
    	public Set<EntidadeEntity> municipiosUsuariosLogadoEmpresaEntidade(UsuarioEntity usuario) {
    		/**
    		 * Busca as entidades do usuário logado, vinculado a entidade somente
    		 */
    		StringBuilder hqlSelectEntidade = new StringBuilder("e FROM UsuarioEntidadeEntity ue ");
    		hqlSelectEntidade.append("\n JOIN ue.entidade e ");
    		hqlSelectEntidade.append("\n WHERE ue.usuario = :usuario ");
    		final String queryEntidade = "SELECT " + hqlSelectEntidade;
    		Query querySelectEntidade = em.createQuery(queryEntidade);
    		querySelectEntidade.setParameter("usuario", usuario);
    		Set<EntidadeEntity> resultSetEntidade = new HashSet(querySelectEntidade.getResultList());
    		/**
    		 * Busca as entidades do usuário logado, vinculado a entidade e empresa
    		 * somente
    		 */
    		StringBuilder hqlSelectEmpresa = new StringBuilder("e FROM UsuarioEntidadeEmpresaEntity ue ");
    		hqlSelectEmpresa.append("\n JOIN ue.entidade e ");
    		hqlSelectEmpresa.append("\n WHERE ue.usuario = :usuario ");
    		final String queryEmpresa = "SELECT " + hqlSelectEmpresa;
    		Query querySelectEmpresa = em.createQuery(queryEmpresa);
    		querySelectEmpresa.setParameter("usuario", usuario);
    		Set<EntidadeEntity> resultSetEmpresa = new HashSet(querySelectEmpresa.getResultList());
    		/**
    		 * Adiciona o retorno de usuário por empresa e entidade com usuário por
    		 * empresa
    		 */
    		resultSetEntidade.add((EntidadeEntity) resultSetEmpresa);
    		return resultSetEntidade;
    	}

    }

Por fim meu controler que chama a classe UsuarioLogado, que é a singleton
package org.desif.controller;

import java.io.Serializable;
import java.util.Set;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import org.desif.model.desif.EmpresaEntity;
import org.desif.singleton.UsuarioLogado;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@ManagedBean(name = "declaracaocontroller")
@SessionScoped
public class DeclaracaoController implements Serializable {

	private static final long serialVersionUID = -2671687805649005424L;
	private final static Logger logger = LoggerFactory.getLogger(DeclaracaoController.class);
	private static UsuarioLogado instancia;

	private Set<EmpresaEntity> entidades;

	/**
	 * Metodo construtor da classe, chama a usuario logado
	 */
	public DeclaracaoController() {
		getInstance();
	}

	public static synchronized UsuarioLogado getInstance() {
		logger.info("Instaciou usuário logado.");
		if (instancia == null) {
			instancia = UsuarioLogado.getInstante();
		}
		return instancia;
	}

	@SuppressWarnings("static-access")
	public Set<EmpresaEntity> getBuscaEntidadesUsuarioLogado() {
		logger.info("Busca todas entidades.");
		if (this.entidades == null) {
			this.entidades = instancia.getUsuariosLogadoEmpresas();
		}
		return entidades;
	}
}

A primeira vez ele chega até esta linha Query querySelectEntidade = em.createQuery(queryEntidade);, e da exceção pois disse que o metodo em está nulo.

O que está de errado ?

Eu não sei duas coisas fundamentais:
1 - Qual a quantidade de usuários que irão utilizar, simultaneamente, este sistema?
2 - Quanto você perde em desempenho quando faz select na base de dados?

Por que das perguntas?
Você precisa ter em mente que teu sistema dependerá de uma infra estrutura que não é infinita. Em algum momento a memória disponível (sem falar de processador) vai acabar. Se tiver muita coisa na sessão/memória, isso pdoe ser um problema.
A abordagem mais aconselhada é acessar os dados quando os mesmos são necessários, mesmo que isso represente realizar 10 selects a cada vez que o usuário acessa o sistema. Normalmente, uma consulta demanda ativar uma conexão, o tempo de execução da query, o tempo de processar o retorno, fechar a conexão e retornar os dados. Acredite, pode custar muito menos que manter tudo em memória.

Entendi @Luis_Augusto_Santos.

Respondendo suas perguntas. Lógico que meu pensamento, mas também não sei se é o mais correto, pela qtd de usuários.

  1. Hoje o sistema está em maker, e hoje tem mais ou menos 100 usuários. Então pode ter em média 100 usuários simultâneos e a tendência é aumentar, pois o mesmo é multisusuario e multientidade. Depende dos vendedores para aumentar.

  2. Não testei, mas como vejo hoje o sistema atual, ter que ficar fazendo consultas a banco a todo momento. Como estamos mudando para java com jsf/primefaces, acharia melhor deixar isto em memória para não ter que ficar indo no banco toda vez.

O sistema atual está na azure, com uma vm de 6 gigas de memória (WINDOWS 2008), sendo que para o TOMCAT 64, está configurado para 5 gigas. O que até o momento nunca chegou ao topo. Pelo menos nunca parou por esta conta.

O banco de dados está em linux com 1 giga se não me engano, isto é, servido separado.

Quando mudarmos, deve ir para uma máquina linux o sistema, para baixarmos os custos.

Ainda assim, ainda penso que o mais indicado é evitar session storage e singletons. Eles têm uso muito restrito, a situações muito específicas.

Entendi.

Vou pensar no assunto

Mas então é por isto que o em não foi inicializado ?

Mais ou menos o que teria que mudar ?

Como você conhece mais do que eu, tem alguma material de estudo ?

Uma coisa não tem a ver com a outra. O EntityManager não está sendo iniciado por algum outro fator distinto desse.
Material de estudo, eu seria redundante em sugerir as apostilas da caelum, livros da casa do código e etc.
Mas a K19 tem uma apostila que usei há alguns anos atrás para usar como base.
E existia, há uns anos atrás, um usuário do guj, muito bom por sinal, cujo nickname era uai_hebert.
Ele mantém um blog/site com coisas muito interessantes, inclusive, um minilivro de JPA e outro de JSF e alguns exemplos de aplicação que são fantásticos.
Dá uma olhada
Falando nisso, só abri aqui o ste dele e já vi muita coisa boa. O cara é fera demais!

Se tem eu não sei.

Mas acabei de fazer o teste e quando eu chamo deste jeito, tem exceção

logger.info("Instaciou usuário logado.");
if (instancia == null) {
	instancia = UsuarioLogado.getInstante();
}
return instancia;

Se chamo direto, isto é, a cada vez que entro na página ele faz uma consulta no bd, não dá erro.

Entendeu ?

E qual é a exceção?

Sem exceção e chamando direto pelo fluxo normal, a mesma classe.

Com exceção e chamando passando pelo classe singleton e chamando a mesma classe.

14:28:44,418 ERROR [io.undertow.request] (default task-2) UT005023: Exception handling request to /desif/faces/declaracao/declaracao.xhtml: javax.servlet.ServletException
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:659) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:130) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
	at org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:226) [rewrite-servlet-3.4.1.Final.jar:3.4.1.Final]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:85) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
	at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:113) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.security.handlers.AuthenticationCallHandler.handleRequest(AuthenticationCallHandler.java:52) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:61) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
	at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:240) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:227) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:73) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:146) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:168) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:687) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [rt.jar:1.8.0_121]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.8.0_121]
	at java.lang.Thread.run(Unknown Source) [rt.jar:1.8.0_121]
Caused by: java.lang.ExceptionInInitializerError
	at org.desif.controller.DeclaracaoController.getInstance(DeclaracaoController.java:40) [classes:]
	at org.desif.controller.DeclaracaoController.<init>(DeclaracaoController.java:34) [classes:]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [rt.jar:1.8.0_121]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) [rt.jar:1.8.0_121]
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) [rt.jar:1.8.0_121]
	at java.lang.reflect.Constructor.newInstance(Unknown Source) [rt.jar:1.8.0_121]
	at java.lang.Class.newInstance(Unknown Source) [rt.jar:1.8.0_121]
	at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:186) [jsf-impl-2.2.5-jbossorg-3.jar:]
	at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:100) [jsf-impl-2.2.5-jbossorg-3.jar:]
	at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409) [jsf-impl-2.2.5-jbossorg-3.jar:]
	at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269) [jsf-impl-2.2.5-jbossorg-3.jar:]
	at com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:257) [jsf-impl-2.2.5-jbossorg-3.jar:]
	at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:117) [jsf-impl-2.2.5-jbossorg-3.jar:]
	at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) [jsf-impl-2.2.5-jbossorg-3.jar:]
	at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) [jsf-impl-2.2.5-jbossorg-3.jar:]
	at com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:116) [javax.el-3.0.0.jar:3.0.0]
	at com.sun.el.parser.AstValue.getBase(AstValue.java:151) [javax.el-3.0.0.jar:3.0.0]
	at com.sun.el.parser.AstValue.getValue(AstValue.java:200) [javax.el-3.0.0.jar:3.0.0]
	at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:226) [javax.el-3.0.0.jar:3.0.0]
	at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]
	at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) [jsf-impl-2.2.5-jbossorg-3.jar:]
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	at javax.faces.component.UISelectItems.getValue(UISelectItems.java:129) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	at org.primefaces.renderkit.InputRenderer.getSelectItems(InputRenderer.java:54) [primefaces-5.3.jar:5.3]
	at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeMarkup(SelectOneMenuRenderer.java:73) [primefaces-5.3.jar:5.3]
	at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeEnd(SelectOneMenuRenderer.java:67) [primefaces-5.3.jar:5.3]
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312) [jsf-impl-2.2.5-jbossorg-3.jar:]
	at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185) [jsf-impl-2.2.5-jbossorg-3.jar:]
	at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129) [jsf-impl-2.2.5-jbossorg-3.jar:]
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:176) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:304) [jsf-impl-2.2.5-jbossorg-3.jar:]
	at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185) [jsf-impl-2.2.5-jbossorg-3.jar:]
	at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129) [jsf-impl-2.2.5-jbossorg-3.jar:]
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	at org.primefaces.component.tabview.TabViewRenderer.encodeTabContent(TabViewRenderer.java:311) [primefaces-5.3.jar:5.3]
	at org.primefaces.component.tabview.TabViewRenderer.encodeContents(TabViewRenderer.java:269) [primefaces-5.3.jar:5.3]
	at org.primefaces.component.tabview.TabViewRenderer.encodeMarkup(TabViewRenderer.java:132) [primefaces-5.3.jar:5.3]
	at org.primefaces.component.tabview.TabViewRenderer.encodeEnd(TabViewRenderer.java:71) [primefaces-5.3.jar:5.3]
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:176) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:461) [jsf-impl-2.2.5-jbossorg-3.jar:]
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133) [jsf-impl-2.2.5-jbossorg-3.jar:]
	at org.ocpsoft.rewrite.faces.RewriteViewHandler.renderView(RewriteViewHandler.java:196) [rewrite-integration-faces-3.4.1.Final.jar:3.4.1.Final]
	at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) [jsf-impl-2.2.5-jbossorg-3.jar:]
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.2.5-jbossorg-3.jar:]
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219) [jsf-impl-2.2.5-jbossorg-3.jar:]
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647) [jboss-jsf-api_2.2_spec-2.2.5.jar:2.2.5]
	... 29 more
Caused by: java.lang.NullPointerException
	at org.desif.repository.desif.EntidadeRepository.municipiosUsuariosLogadoEmpresaEntidade(EntidadeRepository.java:35) [classes:]
	at org.desif.singleton.UsuarioLogado.municipioUsuarioLogado(UsuarioLogado.java:84) [classes:]
	at org.desif.singleton.UsuarioLogado.<init>(UsuarioLogado.java:58) [classes:]
	at org.desif.singleton.UsuarioLogado.<clinit>(UsuarioLogado.java:24) [classes:]
	... 91 more

Pelo que entendi na exceção,o EntityManager está nulo