TomCat + JSF / JBOSS +EJB3

5 respostas
edvaldo.santiago

Boa tarde galera…
Tenho um problema em mãos…
Tenho um Ejb3 funcionando no meu Jboss 4.2x com as minhas regras de negócio.
Meu front end está no Tom Cat 6 utilizando JSF 1.2.
Agora vem o meu problema na hora que tento locar o meu ejb ele gera a seguinte mensagem:

javax.naming.NameNotFoundException: Name NegociosEAR is not bound in this Context

Como devo proceder para instânciar o EJB?
É alguma bobeira que estou fazendo???..kkkk

Galera aguardo seu retorno…

Valeu… fui…
Obs: Como política da empresa não pode ficar juntos o Front-end e Regra de Negócios

5 Respostas

edvaldo.santiago

Então o meu MB tá da seguinte forma:

public class ExemploEJB {
	
	private UserRemote beanUserRemote;
	
	public ExemploEJB() {
		locateEJB();
	}
	public String exemploUser(){
		List<User> l = beanUserRemote.lista();
		for (User user : l) {
			System.out.println("Teste" + user.getName());
		}
		
		return null;
	}
	private void locateEJB(){
			Properties properties = new Properties();
			properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
			properties.put("java.naming.factory.url.pkgs","=org.jboss.naming:org.jnp.interfaces");	
			properties.put("java.naming.provider.url","localhost:1099"); 
			
			Context context;
						 
				try {
					context = new InitialContext();
					beanUserRemote = (UserRemote) context.lookup("NegociosEAR/UserBean/remote");
				} catch (NamingException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}			 
				 
	}
}

Será que estou comendo bola…
E com anotação tb da errado.

Insonia

Olá amigo,
estou iniciando em EJB 3 e percebi 2 diferenças entre sua aplicação e os exemplos que desenvolvi:

1 - Retirar o “NegociosEAR” do lookup:

assim:
context.lookup(“UserBean/remote”);

ao invés de:
context.lookup(“NegociosEAR/UserBean/remote”);

2 - Acho que nao precisa informar a porta no provider.url:

“java.naming.provider.url”,“localhost”

Espero ter ajudado…

bebad

cara tu precisa de um jar com os ejbs no jboss, e um war com o resto no tomcat.

separa as duas apps.

sua estrutura de pacotes precisa seguir algumas regras:

Em seu jar:

crie um arquivo xxx-ds.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!-- pool de conexoes JDBC para JBoss / arquitetura II -->
<datasources>
  <local-tx-datasource>
    <jndi-name>jdbc/scjp</jndi-name>
    <connection-url>jdbc:mysql://localhost/scjp</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>root</user-name>
    <password>1</password>
    <max-pool-size>4</max-pool-size>
  </local-tx-datasource>
</datasources>

Dai dentro do META-INF vc poe um persistence.xml assim:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">

	<persistence-unit name="scjpPU" transaction-type="JTA">
		<jta-data-source>java:jdbc/scjp</jta-data-source>
		<properties>
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.hbm2ddl.auto" value="update"/>
		</properties>
	</persistence-unit>
</persistence>

Dai dentro do seu war vc vai precisar jogar la, um arquivo pra ele poder obter os nomes dos ejbs, este arquivo tem que se chamar:
xxx.jndi.properties

e dentro dele vc coloca assim:

#
# propriedades para conectar ao servico de nomes do JBoss / arquitetura II
# modifique java.naming.provider.url para conectar a um servidor remoto 
#
java.naming.factory.initial=org.jboss.naming.NamingContextFactory
java.naming.provider.url=jnp://localhost:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
#
# propriedades para localizar entradas no servico de nomes
# 
scjp.ejb3.user.transaction=UserTransaction
  

scjp.ejb3.gerenciador.quizs=GerenciadorQuizEjb3/remote
scjp.ejb3.gerenciador.scjps=GerenciadorScjpsEjb3/remote
scjp.ejb3.gerenciador.alunos=GerenciadorAlunosEjb3/remote
scjp.ejb3.gerenciador.turmas=GerenciadorTurmasEjb3/remote
scjp.ejb3.gerenciador.matriculas=GerenciadorMatriculasEjb3/remote

Além disso vc precisa registrar no seu Web.xml a sua fabrica dos EJBS:

<listener>
		<listener-class>com.bbsw.jsf.util.StartupEjb3BF</listener-class>
	</listener>

bixo, tu ainda vai ter que configurar sua ejb3BusinessFactory extends BusinessFactory:

(…)

public static Properties getJndiProperties() {
    return jndiProperties;
  }

  public static void setJndiProperties(Properties initCtxtProperties) {
    Ejb3BusinessFactory.jndiProperties = initCtxtProperties;
  }

registrar seus ejbs e o contexto:

public static final String JNDI_PROPERTY_GERENCIADOR_TURMAS 					= "scjp.ejb3.gerenciador.turmas";

  private static Properties jndiProperties;
  private InitialContext initCtx;
  private UserTransaction userTransaction;

Dai tu ainda vai precisar da BusinessFactory:

(...)

 public static BusinessFactory getInstance() {
    try {
      Class _class = Class.forName(businessFactoryClassName);
      return (BusinessFactory) _class.newInstance(); 
    } catch (Exception e) {
      throw new IllegalArgumentException("businessFactoryClassName invalido " + businessFactoryClassName, e);
    }
  }
  
  public static String getBusinessFactoryClassName() {
    return businessFactoryClassName;
  }
  public static void setBusinessFactoryClassName(String businessFactoryClassName) {
    BusinessFactory.businessFactoryClassName = businessFactoryClassName;
  }

Bixo, recomendo vc comprar a JavaMagazine Ed 47 e estudar ela inteira…dai tu aprende, eu pelo menos aprendi com ela!! :slight_smile:

Espero ter te ajudado!!

[]s

edvaldo.santiago

Galera…
Valeu pela força… mais eu vi a minha besteira…kkkkk
Precisava passar o “properties” dentro do context:

Fazendo isso o TomCat encontra o JBOSS e pronto.
Mesmo assim valeu galera…

Fui… :slight_smile:

JMan

Olha, o erro esta sendo claro não?

javax.naming.NameNotFoundException

Para vc acessar o EJB no seu outro server, basta instanciar o seu InitialContext com os valores corretos.

Criado 25 de outubro de 2007
Ultima resposta 25 de out. de 2007
Respostas 5
Participantes 4