¿SessionBeans e Grails?
Uma das qualidades de Grails que pessoalmente eu gosto mais é sua integração com JEE. Uma vez que podemos usar Grails tags JSP, beans de sessão e EntityBeans como se fossem parte integrante do quadro.
Neste post vamos nos concentrar em como podemos invocar SessionBeans local ou remoto do Grails nosso código. Esta possibilidade, juntamente com a gestão de EntityBeans Grails traz à adaptabilidade e escalabilidade. A que quero dizer com isso, que ser puro, podemos desenvolver uma aplicação completa em Grails e depois ir e modelos de serviço para Entidades e SessionBeans respectivamente. Desta forma, podemos rapidamente começar a desenvolver seu aplicativo usando as vantagens de estar em um ambiente dinâmico e, em seguida, quando o aplicativo é mais definido e as mudanças não são comuns, então podemos mover a camada de negócios para JEE. Esta mudança não afeta qualquer outra parte do Grails, tais como controladores ou exibições.
Para alcançar o último tudo o que fazemos é substituir o código de operações de serviços por delegação para a mesma operação na SessionBeans criado.
Então vamos ver como Grails está configurado para usar tanto EJB3.0 SessionBeans como EJB2.1
Injetar o SessionBeans
Grails permite a injeção em ambos os serviços e em todos os drivers SB como você faz com seus serviços. Quando Grails usa Primavera na gestão de seus componentes é possível utilizar todas as vantagens deste dentro de Grails. A maneira mais fácil para definir os objetos a serem injetados no drivers ou serviços e, especialmente, o SB, está usando o arquivo resources.groovy. Este arquivo é equivalente à Primavera applicationContext.xml único arquivo ao invés de ser um arquivo XML é uma classe que usa o Groovy SpringBuilder como DSL para configuração. Por padrão, o arquivo de recursos encontrados em grails-app/conf/spring e tem o seguinte conteúdo:
/ / Coloque seu código Primavera DSL aqui feijão = { }
Dentro do fechamento é onde você deve adicionar as definições dos grãos.
JNDI de configuração do servidor
Para acessar qualquer componente em um servidor de aplicativos deve fazê-lo usando JNDI. Para esta Primavera fornece uma classe de utilitário que oferece um servidor de operações, tais como JNDI lookup nome e que também atua como um provedor de contexto JNDI. Para isto é preciso acrescentar a seguinte definição no resources.groovy
ejbJndi (org.springframework.jndi.JndiTemplate) { ambiente = [ "Java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory" "Java.naming.provider.url", "JNP: / / http://localhost:1099
Onde:
- ejbJndi
- O nome do feijão que é do tipo org.springframework.jndi.JndiTemplate. Esse nome pode ser qualquer coisa. É este nome que será referenciado para determinar o nome do servidor que fornece acesso a um objeto.
- ambiente
- JndiTempalte é a propriedade da qual é configurado com um mapa que tenha as propriedades JNDI
Em um arquivo poderia ser tantas definições como provedores JndiTemplate JNDI requerem acesso.
JNDI AMBIENTE configuração do servidor
É muito provável e necessária, que requer diferentes de configuração IP do servidor JNDI e porta que o ambiente de desenvolvimento, produção ou testes. Para alcançar este objectivo deve ser anexado à configuração anterior da seguinte forma:
- Coloque o valor do IP e porta do meio ambiente JBoss em cada um dos Config.groovy.
- Importar o arquivo tipo ConfigurationHolder resources.groovy
- Substituir o ip ea porta da variável "java.naming.provider.url" cobrados pela configuração.
Exemplo
Config.groovy
... ambientes { {Desenvolvimento ... jboss.ip = "10.200.8.173" jboss.port = "1099" ... } produção { ... jboss.ip = "172.16.2.105" jboss.port = "1099" ... }
Resources.groovy
importação org.codehaus.groovy.grails.commons .* ... ejbJndi (org.springframework.jndi.JndiTemplate) { ambiente = [ "Java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory" "Java.naming.provider.url", "JNP ://"+ +":"+ ConfigurationHolder.config.jboss.ip ConfigurationHolder.config.jboss.port] }
Configurando componentes EJB 3.0
Para injetar componentes EJB 3.0 tem que adicionar a seguinte configuração:
xXXServices (org.springframework.jndi.JndiObjectFactoryBean) { jndiName = "XXXServices / remote" jndiTemplate = ref ("ejbJndi") }
Onde:
- xXXServices
- É o nome que você dá a referência remota para o SB e será usado para inseri-las nos drivers e serviços. Qualquer motorista ou serviço que tem uma propriedade chamada é xXXServices injetar a referência para o SB remota definida por esse nome no arquivo resources.groovy. O primeiro é x minúsculas para indicar que, por convenção, o nome deve começar em letras minúsculas.
- jndiName
- Nome pelo qual a localizar a referência para o servidor JNDI SB
- jndiTemplate
- Nome do bean para ser usado como um provedor para acessar o objeto JNDI. É definido na seção anterior.
Para usar o SB em um serviço seria:
EjemploServices classe {public def xXXServices unMetodo void (param1, param2) { xXXServices.invocoMetodoEnEJB (param1, param 2) } }
Configurando componentes EJB 2.1
, A fim de injetar EJB 2.1 componentes tem que adicionar a seguinte configuração é semelhante ao observado para EJB 3.0.
xXXServices (org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean) { jndiName = "EJBXXXServices" businessInterface = "biz.aquait.yyy.ejb.EJBXXXServices" jndiTemplate = ref ("ejbJndi") refreshHomeOnConnectFailure = true lookupHomeOnStartup = false }
Onde:
- xXXServices
- É o nome que você dá a referência remota para o SB e será usado para inseri-las nos drivers e serviços. Qualquer motorista ou serviço que tem uma propriedade com este nome é xXXServices injetar a referência para o SB remota definida por esse nome no arquivo resources.groovy. O primeiro é x minúsculas para indicar que, por convenção, o nome deve começar em letras minúsculas.
- jndiName
- Nome pelo qual a localizar a referência para o servidor JNDI SB
- refreshHomeOnConnectFailure
- Atualizar a casa quando ele detecta uma falha de conexão, por exemplo, quando o servidor for reiniciado
- lookupHomeOnStartup
- Faz a aplicação não faz a pesquisa para levantar, mas para usar serviços de SB.
- jndiTemplate
- Nome do bean para ser usado como um provedor para acessar o objeto JNDI. É definido no primeiro ponto.
- businessInterface
- A interface remota do, SB ou seja, que se estende EJBObject.
Como usar o SB dentro de um serviço ou outro componente é a mesma maneira que as referências a SB implementado com EJB 3.0.
Conclusão
Seguindo os passos apresentados acima, podemos dizer que SB configurar Grails usar é complicado e que o uso destes dentro da estrutura é transparente e usado da mesma forma que um serviço Grails.

SessionBeans Um projeto pode ser implantado em um container web como o tomcat? ou seria necessário usar um servidor de aplicação GlassFish como?
Bom post
O SB statefull ou stateless ou precisa de um container EJB e, portanto, precisam ser executados dentro de um servidor de aplicação GlassFish ou como Jboss. Sobre o Tomcat por outro lado é apenas um servidor web e, como tal tem um container web em que os componentes deployer páginas web PODES como JSP, JSF e Servlets.
Se por algum motivo não quer ter seu aplicativo em execução em um servidor de aplicação Grails pode ter uma arquitetura distribuída. Isso teria uma aplicação Web que usa Tomcat remotamente em SB que estão em um Application Server instalado em outra máquina.