JBOSS 5.0 + SQL SERVER 2005 = ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver

24 respostas
S

Dieltos JavaMen,

Estou tendo um pequeno grande problema ao utilizar o JBOSS 5.0 com SQL SERVER 2005...Estou tendo o seguinte erro:
     
     [JBossManagedConnectionPool] Throwable while attempting to get a new connection: null
     org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (org.jboss.resource.JBossResourceException: Failed to register driver for: 	com.microsoft.sqlserver.jdbc.SQLServerDriver; - nested throwable: (java.lang.ClassNotFoundException:  com.microsoft.sqlserver.jdbc.SQLServerDriver.

     Bom, entende-se que ao carregar as libs do diretório server/default/lib ele não acha a classe com.microsoft.sqlserver.jdbc.SQLServerDriver... que a classe esta , no seu devido jar, baixado hoje, exatamente agora do site da microsoft...e não funciona...

O meu datasource-ds.xml esta assim:

<?xml version="1.0" encoding="UTF-8"?> MSSQLDS jdbc:sqlserver://localhost;instanceName=SQL2005;portNumber=1433;databaseName=question; com.microsoft.sqlserver.jdbc.SQLServerDriver xxx xxx MS SQLSERVER
As mesmas configurações funcionam perfeitamente no 4.2.2... que no 4.2.2 não consigo nem a pau dar lookup nos meus EJBs usando @Local e muito menos @Remote, por isso estou tentando usar essa CR1 do JBoss 5.0.

     Alguém por favor pode me dar um help...? pode ser até mesmo com o JBoss 4.2.2 ou 4.2.0..qualquer um que funfe com EJB.
     Grato pela atenção, bom início de semana.

24 Respostas

felipeguerra

Como vc faz o lookup?

felipeguerra

Por acaso esse arquivo está com esse nome: mssql-ds.xml?

Se não, corrija se eu estiver errado, não vai funcionar mesmo…

S

felipeguerra:

Por acaso esse arquivo está com esse nome: mssql-ds.xml?
Se não, corrija se eu estiver errado, não vai funcionar mesmo…

Felipe,

Muito obrigado mesmo pelo seu interesse em me ajudar.

quando definimos um datasource-ds.xml o que importa é a tag DefaultDS, a maior prova é o arquivo de exemplo hsqldb-ds.xml que cria DefaultDS, como podemos ver abaixo:

11:50:25,406 INFO [ConnectionFactoryBindingService] Bound ConnectionManager ‘jboss.jca:service=DataSourceBinding,name=MSSQLDS’ to JNDI name 'java:MSSQLDS’
11:50:25,421 INFO [ConnectionFactoryBindingService] Bound ConnectionManager ‘jboss.jca:service=DataSourceBinding,name=DefaultDS’ to JNDI name ‘java: DefaultDS’

Mais uma vez te agradeço a atenção e bom início de semana.

S

felipeguerra:

Como vc faz o lookup?

Estou fazendo o lookup assim no 4.2.2

@Stateless
public class PermissionDaoImpl implements PermissionDao {

@PersistenceContext(unitName="questionPU")
private EntityManager em;

@Local
public interface PermissionDao

agora começa aqui uma gambi :smiley:

public class PermissionFacadeImpl implements PermissionFacade {
private InitialContext context = null;

/*
Tentei assim mas não esta funcionando
@EJB(name="java:comp/env/ejb/PermissionDao")
  */
private PermissionDao pd;

public PermissionFacadeImpl(){
	Object ref = null;
	try {
		context = new InitialContext();			
		ref = context.lookup("Question/PermissionDaoImpl/local");
		cache.put("PermissionDao", ref);
			 
		}
	} catch (Exception e) {
		e.printStackTrace();
	}	
     }

}

Quando o jboss 4.2.2 starta esse faz isso:

11:49:55,515 INFO [JBossASKernel] jboss.ejb:service=EJBTimerService
11:49:55,515 INFO [JBossASKernel] persistence.units:ear=Question.ear,jar=Question-EJB.jar,unitName=questionPU
11:49:55,515 INFO [JBossASKernel] and supplies:
11:49:55,515 INFO [JBossASKernel] Class:br.org.question.dao.PermissionDao
11:49:55,515 INFO [JBossASKernel] jndi:Question/PermissionDaoImpl/local-br.org.question.dao.PermissionDao
11:49:55,515 INFO [JBossASKernel] jndi:Question/PermissionDaoImpl/local
11:49:55,515 INFO [JBossASKernel] jndi: PermissionDaoImpl

???
Valeu

S

Desculpe, o log acima é quando jboss 5.0 starta, quando o 4.2.2 start lança o seguinte long:

12:07:03,000 INFO [JmxKernelAbstraction] creating wrapper delegate for: org.jboss.ejb3.stateless.StatelessContainer
12:07:03,000 INFO [JmxKernelAbstraction] installing MBean: jboss.j2ee:ear=Question.ear,jar=Question-EJB.jar,name=PermissionDaoImpl,service=EJB3 with dependencies:
12:07:03,000 INFO [JmxKernelAbstraction] persistence.units:ear=Question.ear,jar=Question-EJB.jar,unitName=questionPU
12:07:03,000 INFO [EJBContainer] STARTED EJB: br.org.question.dao.PermissionDaoImpl ejbName: PermissionDaoImpl

S

Algém tem alguma noção do que pode estar acontecendo com o JBoss 5.0 ou o porque de eu não estar conseguindo fazer lookup dos ejbs no jboss 4.2.2…???

felipeguerra

szymanski:
felipeguerra:

Como vc faz o lookup?

Estou fazendo o lookup assim no 4.2.2…


Caramba, viajei…

Vc ta tentando fazer lookup de um EJB dentro de outro EJB? (Se for isso é só injetar com a anotação @EJB + PermissionDao instance;)

Ou está tentando fazer o lookup do EJB numa classe de teste?

S

Não, só quero dar o lookup de um ejb no meu facade…quando crio uma estancia de facade, já quero dar um lookup no meu ejb…só isso…mas não esta funcionando. tens algum exemplo teu que funcione para eu dar uma olhada…?
Grato pela atenção

felipeguerra
@Stateful
public class UsuarioBusinessFacade implements UsuarioBusinessRemote {

	@EJB
	private CadastroUsuarioLocal cadastroUsuarioBean; 
	
	
	public Pessoa atualizarUsuario(Pessoa pessoa)	throws UsuarioBusinessException {
		Pessoa retorno = null;
		
		try {
			retorno = cadastroUsuarioBean.sincronizar(pessoa);
			
		}catch(Exception ex) {
			throw new UsuarioBusinessException(ex.getMessage());
		}
		return retorno;
	}
}
S

alguém tem alguma idéia do problema que estou tendo com o JBoss 5.0 ou o porque de não estar conseguindo fazer lookup no JBoss 4.2.2??
Grato pela atenção

felipeguerra

A sua classe PermissionFacadeImpl é um EJB?

Tem interface Remote/Local?

S

Oi Felipe,
Não é um EJB, é somente um classe “cliente” digamos assim para fazer o lookup.
Deveria ter…?
Grato pela atenção

felipeguerra
szymanski:
Oi Felipe, Não é um EJB, é somente um classe "cliente" digamos assim para fazer o lookup. Deveria ter...? Grato pela atenção
Ahh, agora começou a clarear, então, eu faço lookup dos meus EJBs de um cliente remoto assim:
public static Object doServiceLocator(String name) throws NamingException {
		
		Properties properties 	= null;
		InitialContext context 	= null;
		//------------------------------------------------------------
		
		
		//------------------------------------------------------------
		properties 	= new Properties();
		//------------------------------------------------------------
		
		//------------------------------------------------------------
		properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
		properties.put(Context.PROVIDER_URL, "jnp://localhost:1099");
		properties.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
		//------------------------------------------------------------
		
		//------------------------------------------------------------
		context 	= new InitialContext(properties);
		//------------------------------------------------------------

		return context.lookup(name);
	}
S

Oi Felipe,

Não é isso que quero fazer...quero dar um lookup de EJB/local...remote nem penso em fazer porque sei que não vai funcionar. É tudo local mesmo,  usei o termo "cliente" para me referir que a classe facade é que vai fazer o lookup.
   Na minha Facade tem que ter alguma anotação que estou esquecendo ou não precisa mesmo...? ela também esta no meu ejb-jar.
   Estou sinceramente pensando em mudar para o OC4J...que com JBoss não esta dando, com OC4J funciona direitinho com algumas modificações.
   Valeu Felipe.
felipeguerra

Cara, vc está sendo prolixo, mas vamos lá, vou tentar colocar algumas situações.

Se vc estiver dentro do contêiner EJB e quiser implantar um cliente em outro jar, segundo a especificação do livro Entreprise JavaBeans 3.0, vc deve fazer o seguinte:

1 - deve-se ter uma classe QualquerCoisaBean (anotado com @Stateless) que implementa um interface QualquerCoisaLocal (anotada com @Local);
2 - [Pra confirmar a implantação do Bean] No start do seu JBoss, vai aparecer lá alguma coisa mais ou menos assim:

10:35:03,512 INFO  [EJBContainer] STARTED EJB: seupacote.QualquerCoisaBean ejbName: QualquerCoisaBean

3 - Confirmada a implantação, vc pode fazer lookup assim:

Context context = new InitialContext();
QualquerCoisaLocal instance = (QualquerCoisaLocal) context.lookup("QualquerCoisaBean/local");

Obs: Ta tudo testado…

felipeguerra

szymanski:

12:07:03,000 INFO [EJBContainer] STARTED EJB: br.org.question.dao.PermissionDaoImpl ejbName: PermissionDaoImpl

Olha aqui o bendito log…se o PermissionDaoImpl é um EJB, é só injetar outro EJB no danado SEM a necessidade de colocar o name na anotação @EJB, a não ser que vc atribuiu algum nome…

S

Oi Felipe, Vou tentar ser lacônico desta vez.

Estou fazendo exatamente desta forma, a única diferença é que meu ejb-jar esta dentro de um .ear, logo fica assim:
try {
     InitialContext context = new InitialContext();
     this.permissionDao = (PermissionDao)context.lookup("Question/PermissionDaoImpl/local");
} catch (Exception e) {
     e.printStackTrace();
}
onde "Question/" meu .ear e "PermissionDaoImpl/" meu Bean Código:
@Stateless
public class PermissionDaoImpl implements PermissionDao {
	
	@PersistenceContext(unitName="questionPU")
	private EntityManager em;
/*outras coisas*/
}

@Local
public interface PermissionDao
Log Jboss:
11:22:55,109 INFO  [EJBContainer] STARTED EJB: br.org.question.dao.PermissionDaoImpl ejbName: PermissionDaoImpl

Segue uma imagem do que tenho de retorno que tenho.
[img]http://www.webtecsystems.com.br/imagens/retorno%20lookup.JPG[/img]

E, simplesmente não funciona.
Mais uam vez valeu Felipe.

felipeguerra

Entendi, como é um .EAR, há a necessidade de se colocar o nome do arquivo na hora de fazer lookup?

Não lembro disso, sério mesmo…

S

Olha…no JBoss é preciso, em outros eu não sei…mas se eu não colocar, não consigo dar lookup em nada.

felipeguerra

É verdade, mas eu não testei fazer lookup pela interface Local, fiz um teste aqui com um .EAR, mas usei Servlet, também não consegui ‘bindar’ o EJB, continuo tentando…

felipeguerra

AMIGÃO,

Olha só, no arquivo application.xml (do seu .EAR), vc colocou esse trecho de código:

&lt;module&gt;
  	&lt;ejb&gt;jardoseuejb.jar&lt;/ejb&gt;
  &lt;/module&gt;

???

No meu eu coloquei e funcionou!!!

Abraço

S

Po Felipão…valeu mas coloquei sim, esta tudo configurado conforme tem que ser…mas…não funciona…Tentei com oc4j 10.1.3.1 ontem e também não consegui…brincadeira…vou seguir pesquisando, qualquer coisa te dou um toque.
Cara, se tiver msn e quiser me add, fique a vontade.
Flw.

felipeguerra

Faz o seguinte, eu mando o .EAR para vc fazer o deploy no seu JBoss!

Obs: Coloca o banco de dados que vc ta usando no lugar do meu e descomenta a geração do script no persistence.xml

felipeguerra

MSN eu não acesso do trampo…se quiser, afz o upload do seu .EAR (com os fontes, hein!)

Valeu

Criado 21 de julho de 2008
Ultima resposta 24 de jul. de 2008
Respostas 24
Participantes 2