TomCat + JSF / JBOSS +EJB3

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:[quote]javax.naming.NameNotFoundException: Name NegociosEAR is not bound in this Context[/quote]
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

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.

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…

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

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:

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.