[Logo] Neo Framework Forum
  [Search] Busca   [Recent Topics] Tópicos Recentes   [Members]  Lista de Usuários   [Groups] De volta para a página principal 
[Register] Registrar / 
[Login] Entrar 
Mensagens enviadas por: rogel.garcia  XML
Perfil de rogel.garcia -> Mensagens enviadas por rogel.garcia [274] Ir para a página: Anterior  1, 2, 3 , 4, 5 ... 17, 18, 19 Próximo 
Autor Mensagem
Na hora de importar as classes do spring sempre utilize as classes do pacote org.spring.....hibernate3....
ninja respondendo a sua pergunta sobre dois datasources....


Dá pra colocar quantos datasources vc quiser na sua aplicacao, e existem duas formas de fazer isso:

definir os dataSources no applicationConfig.xml, esse caso te dará mais poder MAS te dará mais trabalho uma vez que vc terá que configurar os datasources de todos os daos um por um, indicando qual é o certo

A outra forma que é a que geralmente eu utilizo é a seguinte:
Utilizar um datasource através do connection.properties normal
O outro datasource criar na mão dentro de um código java, o configurar os beans para os novos dataSources
(geralmente as aplicações que necessitam de 2 datasources, sempre tem um datasource menos utilizado, a solucao manual ficaria para ele)

crie uma classe qualquer q implemente InitializingBean

Code:
 @Bean
 public class DatasourceConfig2 implements InitializingBean{
   public void afterPropertiesSet() throws Exception {
     
   }
 }
 


Crie setters para os DAOs que deseja utilizar o dataSource2:

Code:
 
 @Bean
 public class DatasourceConfig2 implements InitializingBean{
 
   SiteDAO siteDAO; // a injecao de dependecia irá configurar esse obj
   public void setSiteDAO(SiteDAO siteDAO) {
         this.siteDAO = siteDAO;
   }
   public void afterPropertiesSet() throws Exception {
     
   }
 }
 
 


Crie os objetos DataSource, JdbcTemplate, SessionFactory, HibernateTemplate, TransactionTemplate (esses sao todos os objetos necessários para o DAO, talvez vc nem precise de todos...)

e configure o seu bean com esses objetos

Code:
 @Bean
 public class DatasourceConfig2 implements InitializingBean{
 
   SiteDAO siteDAO; // a injecao de dependecia irá configurar esse obj
   public void setSiteDAO(SiteDAO siteDAO) {
         this.siteDAO = siteDAO;
   }
   public void afterPropertiesSet() throws Exception {
         DriverManagerDataSource legacyDataSource = createLegacyDataSource();
         JdbcTemplate legacyJdbcTemplate = createLegacyJdbcTemplate(legacyDataSource);
         SessionFactory legacySessionFactory = createLegacySessionFactory(legacyDataSource);
         HibernateTemplate legacyHibernateTemplate = createLegacyHibernateTemplate(legacySessionFactory);
         TransactionTemplate legacyTransactionTemplate = createLegacyTransactionTemplate(legacySessionFactory);
 
         siteDAO.setHibernateTemplate(legacyHibernateTemplate);
         siteDAO.setJdbcTemplate(legacyJdbcTemplate);
         siteDAO.setSessionFactory(legacySessionFactory);		        
         siteDAO.setTransactionTemplate(legacyTransactionTemplate);
   }
 }
 


Aqui estou considerando legacy o seu datasource2


A implementacao de cada método seria mais ou menos assim:

Cria o driverManagerDataSource com informacoes do arquivo connection2.properties .. vc pode setar os valores na mao ao inves de ler do arquivo se quiser
Code:
 	private DriverManagerDataSource createLegacyDataSource() {
 		DriverManagerDataSource dataSource = new DriverManagerDataSource();
 		
 		ResourceBundle bundle = null;
 		try {
 			bundle = ResourceBundle.getBundle("connection2");
 		} catch (MissingResourceException e) {
 			// caso nao encontre o bundle nao fazer nada
 		}
 		if (bundle != null) {
 			try {
 				//driver, url, username, password
 				String driver = bundle.getString("driver");
 				String url = bundle.getString("url");
 				String username = null;
 				String password = null;
 				try {
 					username = bundle.getString("username");
 					password = bundle.getString("password");
 				} catch (Exception e) {
 					//o nome de usuário e o password sao opcionais
 				}
 				dataSource.setUrl(url);
 				dataSource.setDriverClassName(driver);
 				dataSource.setUsername(username);
 				dataSource.setPassword(password);
 			} catch (MissingResourceException e) {
 				throw new NeoException("Erro ao carregar informações de connection2.properties. O arquivo está incorreto, " +
 						"faltando algum dos parametros: driver, url");
 			} 
 		}
 		return dataSource;
 	}
 


Code:
	
 private JdbcTemplate createLegacyJdbcTemplate(DataSource dataSource) {
 		JdbcTemplate legacyJdbcTemplate = new JdbcTemplate(dataSource);
 		this.legacyJdbcTemplate = legacyJdbcTemplate;
 		legacyJdbcTemplate.afterPropertiesSet();
 		return legacyJdbcTemplate;
 	}
 


Code:
 	private SessionFactory createLegacySessionFactory(DriverManagerDataSource legacyDataSource) {
 		AnnotationConfiguration annotationConfiguration = createLegacyAnnotationConfiguration(legacyDataSource);
 		SessionFactory legacySessionFactory = annotationConfiguration.buildSessionFactory();
 		return legacySessionFactory;
 	}
 


Code:
 	private AnnotationConfiguration createLegacyAnnotationConfiguration(DriverManagerDataSource legacyDataSource) {
 		AnnotationConfiguration annotationConfiguration = new AnnotationConfiguration();
 		//adicione todas as classes q devem vir do datasource2
 		annotationConfiguration.addAnnotatedClass(Site.class);
 
 
 		annotationConfiguration.setProperty(Environment.DRIVER, legacyDataSource.getDriverClassName());
 		annotationConfiguration.setProperty(Environment.URL, legacyDataSource.getUrl());
 		annotationConfiguration.setProperty(Environment.USER, legacyDataSource.getUsername());
 		annotationConfiguration.setProperty(Environment.PASS, legacyDataSource.getPassword());
 		
 		annotationConfiguration.setProperty(Environment.USE_SECOND_LEVEL_CACHE, "false");
 		
 		annotationConfiguration.setProperty(Environment.DIALECT, "org.hibernate.dialect.MySQL5Dialect");
 		annotationConfiguration.setProperty(Environment.SHOW_SQL, "true");
 		return annotationConfiguration;
 	}
 


Code:
 	private HibernateTemplate createLegacyHibernateTemplate(SessionFactory legacySessionFactory) {
 		HibernateTemplate legacyHibernateTemplate = new HibernateTemplate(legacySessionFactory);
 		legacyHibernateTemplate.afterPropertiesSet();
 		return legacyHibernateTemplate;
 	}
 



Code:
 	private TransactionTemplate createLegacyTransactionTemplate(SessionFactory legacySessionFactory) {
 		TransactionTemplate legacyTransactionTemplate = new TransactionTemplate(new HibernateTransactionManager(legacySessionFactory));
 		return legacyTransactionTemplate;
 	}
 


Esse exemplo serve em diversas ocasioes onde se desejar configurar o hibernate, datasource ou qualquer item do banco de dados. Lembrando que isso pode ser configurado também através do xml applicationconfig.xml

Outra vantagem é que se remover o @Bean da classe os daos voltam altomaticamente a usar o datasource1
Olá andre, tudo bom


Enums com certeza serão mais rápidos pois não tem que ir no banco. Se performance é um quesito importante na sua aplicação, usar enums é bem recomendado.

Quanto as stored procedures, se elas simplismente executarem o select que o hibernate executaria a performance seria praticamente a mesma.

O NEO faz cache dos resultados se os combos estiverem na mesma página, por exemplo: Se voce tiver dois combos de municipio na mesma página, só será feito um select.

Mas cada vez que for pedida a página o select será executado. Existe um cache mas que é excluido muito rapidamente apenas para ajudar caso dois usuários ao mesmo tempo desejam os resultados de uma mesma query. Mas enfatizando, esse cache é de curta duração e não vai melhorar a performance para acessos sequenciais a mesma página..

Se você desejar um cache mais "definitivo" você deverá implementar essa solucao no seu DAO.

Você poderá configurar o hibernate mais minunciosamente se você utilizar a configuração por applicationConfig.xml (descrito na documentacao). Essa configuração exige um xml (com exemplo na documentacao) mas te permite configurar o framework da forma que quiser..

Até mais...
Realmente existe um erro na versão 3.4

o seguinte código:
Code:
 if(request.getParameter("resetCurrentPage") != null) {
     String orderBy = filtro.getOrderBy();
     boolean asc = filtro.isAsc();
 				
     filtro = (FILTRO) filtro.getClass().newInstance();
 				
     filtro.setOrderBy(orderBy);
     filtro.setAsc(asc);
 }
 


Faz com que o filtro seja resetado a cada vez que é feito um submit da página. Já que o resetCurrentPage é enviado como true como definido em TabelaFiltroTag.jsp

O código deveria ser como o código enviado pelo André.

Muito bem observado André. Obrigado pela contribuição.
Olá Sandro, tudo beleza??

Verifique a versão J2EE que você está utilizando.

Para você saber qual é a versão J2EE que voce está utilizando olhe o arquivo web.xml

O cabeçalho dele deve ser algo como:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlnssi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

Se não estiver assim (estiver com referencia para TLD) você estará utilizando a versao antiga. Teoricamente bastaria você trocar o cabeçalho para o da versão 2.4.

Ps.:
A versao J2EE não é a mesma versao do JDK, o JDK deve ser versao 5 ou superior.

No diretório samples do download full do neo tem um exemplo de web.xml
2) Tem como fazer isso se você alterar o template do property.

Você deverá verificar se a propriedade sendo utilizada é a description property, então você envolve o valor da propriedade em uma tag link utilizando a URL que foi chamada.
Fiiiino


hehheh
Collection<PropriedadeTecnico> getPropriedadeTecnicoCollection()


PropriedadeTecnicoCollection deve ser um List ou Set


List<PropriedadeTecnico> getPropriedadeTecnicoCollection()

(Troque o setter e o tipo do atributo também)

O framework só monta a coleção no servidor se for um List (preferível) ou Set.

Se for Collection o objeto da propriedade já tem que estar instanciado e ser de um tipo que cria os próprios itens sozinho como a classe ListSet contida no NEO.
Voce pode fazer assim:

Code:
 <n:column header="titulo">
     <n:link url=""><t:property name="..."/></n:link>
 </n:column>
 


ou vc pode alterar o template do property (PropertyTag.jsp) e adicionar um atributo dinamico aí, o seu jsp poderia ficar assim:

<t:property name="..." link="..."/>

Você terá que alterar o template do property para o atributo link ter alguma funcionalidade
Dentro da pasta sample do neo*full.zip tem o arquivo theme.css

Coloque esse arquivo dentro da pasta css dentro da sua aplicação

Altere o arquivo theme.css conforme desejado
Vou ter que dar uma olhada... mas a solução provavelmente estará disponivel apenas na proxima versao.. porque pelo que parece existe um código que não está fazendo escape corretamente...
Esse código tem que ser corrigido...


Se eu verificar q existe alguma alteração que voce possa fazer pra aplicacao funcionar eu posto aqui...
Talvez tenha um bug nesse ponto... algum lugar não está fazendo o escape correto do javascript...
Muito bom valdeci.. era justamente esse tipo de reestruturação que eu falei em outro tópico ser necessária antes de qualquer upgrade do framework...

Junto com a reestruturação do InputTag, também tem a reestruturaçao do PropertyTag (o template acaba ficando muito grande)..
E a reestruturaçao da renderizaçao do dataGrid pra utilizar mais templates. (o código dos TDs hoje é gerado dentro da tag)

Acho que são os pontos principais a serem modificados (primariamente)

Tem que dar umas refatorações 'EXTRACT METHOD' no InputTag mesmo...

Mais futuramente a tag BaseTag também precisará de uma organização.. tem mil métodos dentro dela...

Muito bom trabalho valdeci!!!
São poucos recursos q faltam para ser adicionados.. que eu me lembre é um atributo no panelGrid para poder as colunas terem tamanhos fixos (todas as colunas do mesmo tamanho) .. isso possibilita uma outra forma de organizacao dos componentes na tela...
e também a possibilidade de troca do foco dos campos automaticamente ou ao pressionar TAB...
As principais modificacoes sao essas as outras já foram adicionadas...

No caso do javascript é Neo.$(), Neo.Ajax() mesmo...

[valdeci] As melhorias em pontos específicos do código sao importantes tb....

Até mais....
Eu já tenho tudo maquinado.. como essa organizacao deve ser feita.. se alguém quiser.. podemos trocar uam ideia
 
Perfil de rogel.garcia -> Mensagens enviadas por rogel.garcia [274] Ir para a página: Anterior  1, 2, 3 , 4, 5 ... 17, 18, 19 Próximo 
Ir para:   
Powered by JForum 2.1.7 © JForum Team