JAR de cliente ejb con JARs externos

343 views
Skip to first unread message

Jaime Catalan

unread,
Jun 20, 2011, 1:55:46 PM6/20/11
to ju...@googlegroups.com
Estimados,

Me encuentro con un problemilla. Al querer crear desde linea de comandos un jar que contiene una clase que simplemente invoca a un EJB instalado en servidor weblogic. El cliente no cuenta con las librerias weblogic.jar ni tampoco con wlclient.jar ... por lo tanto estoy intentando incorporar estas librerias en mi propio jar. Es aqui donde surge el problema ya que el manifest lo crea bien pero no me incorpora el tag Class-Path sólo el Main-Class 

La traza de error provocada por no encontrar la libreria weblogic es la siguiente.

D:\Workspaces\wks-test>java -jar myJarFile.jar
Exception in thread "main" java.lang.NoClassDefFoundError: weblogic/jndi/Environment
        at testJar.GeneratorFileClient.getInitialContext(GeneratorFileClient.java:76)
        at testJar.GeneratorFileClient.main(GeneratorFileClient.java:42)
Caused by: java.lang.ClassNotFoundException: weblogic.jndi.Environment
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 2 more

El comando utilizado para crear el jar es el siguiente:
jar cfm myJarFile.jar mainClass.txt testJar/*

El archivo mainClass.txt contiene lo sipguiente:
Main-Class: testJar.GeneratorFileClient
Class-Path : weblogic.jar FileGeneratorEJBJAR.jar wlclient.jar


El manifest lo crea de esta manera.

Manifest-Version: 1.0
Created-By: 1.6.0_25 (Sun Microsystems Inc.)
Main-Class: testJar.GeneratorFileClient

De antemano muchas gracias.

Jaime.

Mauricio Gomez

unread,
Jun 20, 2011, 2:10:01 PM6/20/11
to ju...@googlegroups.com
No te conviene mejor generar una estructura del tipo

/aplicacion
/aplicacion/LEAME
/aplicacion/miAplicacion.sh
/aplicacion/miAplicacion.cmd
/aplicacion/config/aplicacion.properties
/aplicacion/lib/mainApp.jar
/aplicacion/lib/weblogic.jar
/aplicacion/lib/...

donde miAplicacion(.cmd/.sh) tenga todos los detalles de entorno, classpath, memoria, etc y distribuirla al cliente como un .zip?


--
Has recibido este mensaje porque estás suscrito al grupo "jug.cl" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a ju...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a jugcl+un...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/jugcl?hl=es.



--

Enviado desde mi iTarro

Jaime Catalan

unread,
Jun 20, 2011, 3:24:43 PM6/20/11
to ju...@googlegroups.com
Si puede ser una buena idea ... pero quedo por lo leido con un jar deberia bastar.
Jaime Catalán.
jaime.c...@gmail.com
Móvil: 82946507

José Miguel Selman

unread,
Jun 20, 2011, 3:28:37 PM6/20/11
to ju...@googlegroups.com
Yo no modificaría los JARs de WebLogic... si quieres los puedes
referenciar desde el manifest donde está tu ejecutable... En el
siguiente link un ejemplo de como referenciarlo para que sea incluído
en el classpath...

http://download.oracle.com/javase/tutorial/deployment/jar/downman.html


Saludos,

2011/6/20 Jaime Catalan <jaime.c...@gmail.com>:

Jaime Catalan

unread,
Jun 20, 2011, 3:49:24 PM6/20/11
to ju...@googlegroups.com
Ya habia visto esta apgina pero por las dudas volvi a intentar siguiendo las instrucciones

genere un archivo Manifest.txt con lo sgte: (solo weblogic para probar)

Class-Path: weblogic.jar

luego ejecute

>jar cfm MyJar.jar Manifest.txt MyPackage/*.class

No hubo problemas en crear el jar pero el manifest queda sin el Class-Path ... solo aparece lo siguiente:


Manifest-Version: 1.0
Created-By: 1.6.0_25 (Sun Microsystems Inc.)

Será la versión de java la qeu no reconoce aquella instruccion?

Jaime Bravo

unread,
Jun 21, 2011, 12:46:16 PM6/21/11
to ju...@googlegroups.com
hasta donde tengo entendido class-path es para explictar referencias externas...creo que te falta las propiedades jndi como el host puerto y la fabrica de contento inicial...

Saludos
Jaime (tocayo)

Jaime Bravo

unread,
Jun 21, 2011, 12:47:57 PM6/21/11
to ju...@googlegroups.com
jajajajaja contento = contexto ;)

Mauricio Gomez

unread,
Jun 21, 2011, 12:53:52 PM6/21/11
to ju...@googlegroups.com
contexto, Señor, contexto...

Jaime Bravo

unread,
Jun 21, 2011, 12:56:47 PM6/21/11
to ju...@googlegroups.com
toing!!!! disculpen mi nivel de ñurdez con el teclado... ;)

Jaime Catalan

unread,
Jun 21, 2011, 12:59:44 PM6/21/11
to ju...@googlegroups.com
Gracias,

Lo solucioné con el editor de Eclipse Helios directamente editando el manifest del proyecto, por alguna razon cunado lo intentaba editar con editplus el archivo quedaba corrupto. Desde ahi agregue el Class-Path, Main-Class y funciona OK.


Ahora estoy con otro problemilla y es la invocacion de un EJB desde un cliente remoto que esta en Weblogic integrado en JDeveloper 11g creo que es la version 10.3.x

Cuando el cliente lo ejecuto este funciona sin problemas, pero al llamarlo desde otra maquina me aparece no logra dar con el Jndi ... les comparto el codigo y la traza de error por si alguno de uds.

Declaracion en Bean de EJB

@Stateless(name = "FileGenerator", mappedName = "FileGeneratorService")
public class FileGeneratorBean implements FileGenerator, FileGeneratorLocal {
.........

Codigo en Cliente

            Hashtable props = new Hashtable();
            props.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
            props.put(Context.PROVIDER_URL, "t3://192.168.0.148:7101");
            props.put(Context.SECURITY_PRINCIPAL, "weblogic");
            props.put(Context.SECURITY_CREDENTIALS, "weblogic1");
            props.put("weblogic.jndi.createIntermediateContexts", "true");

            Context context = new InitialContext(props);
          
            FileGenerator fileGenerator = (FileGenerator)context.lookup("FileGeneratorService#com.xpertal.semessagebroker.generator.beans.FileGenerator");

traza de error es la siguiente:



El 21 de junio de 2011 12:46, Jaime Bravo <jab...@gmail.com> escribió:

Jaime Catalan

unread,
Jun 21, 2011, 1:11:23 PM6/21/11
to ju...@googlegroups.com
sorry la traza de error es la siguiente:

1-06-2011 12:18:56 PM com.sun.corba.se.impl.encoding.CDRInputStream_1_0 read_value
ADVERTENCIA: "IOP00810257: (MARSHAL) Could not find class"
org.omg.CORBA.MARSHAL:   vmcid: SUN  minor code: 257 completed: Maybe
    at com.sun.corba.se.impl.logging.ORBUtilSystemException.couldNotFindClass(ORBUtilSystemException.java:8260)
    at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1013)
    at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:879)
    at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_abstract_interface(CDRInputStream_1_0.java:873)
    at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_abstract_interface(CDRInputStream_1_0.java:863)
    at com.sun.corba.se.impl.encoding.CDRInputStream.read_abstract_interface(CDRInputStream.java:269)
    at com.sun.corba.se.impl.util.Utility.readAbstractAndNarrow(Utility.java:948)
    at com.sun.corba.se.impl.io.IIOPInputStream.inputObjectField(IIOPInputStream.java:1992)
    at com.sun.corba.se.impl.io.IIOPInputStream.inputClassFields(IIOPInputStream.java:2220)
    at com.sun.corba.se.impl.io.IIOPInputStream.inputObject(IIOPInputStream.java:1227)
    at com.sun.corba.se.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:400)
    at com.sun.corba.se.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:317)
    at com.sun.corba.se.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:283)
    at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1034)
    at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:879)
    at com.sun.corba.se.impl.encoding.CDRInputStream.read_value(CDRInputStream.java:249)
    at com.sun.corba.se.impl.corba.TCUtility.unmarshalIn(TCUtility.java:269)
    at com.sun.corba.se.impl.corba.AnyImpl.read_value(AnyImpl.java:559)
    at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_any(CDRInputStream_1_0.java:739)
    at com.sun.corba.se.impl.encoding.CDRInputStream.read_any(CDRInputStream.java:220)
    at weblogic.corba.cos.naming._NamingContextAnyStub.resolve_any(_NamingContextAnyStub.java:81)
    at weblogic.corba.j2ee.naming.ContextImpl.lookup(ContextImpl.java:267)
    at weblogic.corba.j2ee.naming.ContextImpl.lookup(ContextImpl.java:227)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at TestClient.main(TestClient.java:58)
Caused by: java.lang.ClassNotFoundException
    ... 24 more
javax.naming.NamingException: Unhandled exception in lookup [Root exception is org.omg.CORBA.MARSHAL:   vmcid: SUN  minor code: 257 completed: Maybe]
    at weblogic.corba.j2ee.naming.Utils.wrapNamingException(Utils.java:83)
    at weblogic.corba.j2ee.naming.ContextImpl.lookup(ContextImpl.java:291)
    at weblogic.corba.j2ee.naming.ContextImpl.lookup(ContextImpl.java:227)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at TestClient.main(TestClient.java:58)
Caused by: org.omg.CORBA.MARSHAL:   vmcid: SUN  minor code: 257 completed: Maybe
    at com.sun.corba.se.impl.logging.ORBUtilSystemException.couldNotFindClass(ORBUtilSystemException.java:8260)
    at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1013)
    at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:879)
    at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_abstract_interface(CDRInputStream_1_0.java:873)
    at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_abstract_interface(CDRInputStream_1_0.java:863)
    at com.sun.corba.se.impl.encoding.CDRInputStream.read_abstract_interface(CDRInputStream.java:269)
    at com.sun.corba.se.impl.util.Utility.readAbstractAndNarrow(Utility.java:948)
    at com.sun.corba.se.impl.io.IIOPInputStream.inputObjectField(IIOPInputStream.java:1992)
    at com.sun.corba.se.impl.io.IIOPInputStream.inputClassFields(IIOPInputStream.java:2220)
    at com.sun.corba.se.impl.io.IIOPInputStream.inputObject(IIOPInputStream.java:1227)
    at com.sun.corba.se.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:400)
    at com.sun.corba.se.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:317)
    at com.sun.corba.se.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:283)
    at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1034)
    at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:879)
    at com.sun.corba.se.impl.encoding.CDRInputStream.read_value(CDRInputStream.java:249)
    at com.sun.corba.se.impl.corba.TCUtility.unmarshalIn(TCUtility.java:269)
    at com.sun.corba.se.impl.corba.AnyImpl.read_value(AnyImpl.java:559)
    at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_any(CDRInputStream_1_0.java:739)
    at com.sun.corba.se.impl.encoding.CDRInputStream.read_any(CDRInputStream.java:220)
    at weblogic.corba.cos.naming._NamingContextAnyStub.resolve_any(_NamingContextAnyStub.java:81)
    at weblogic.corba.j2ee.naming.ContextImpl.lookup(ContextImpl.java:267)
    ... 3 more
Caused by: java.lang.ClassNotFoundException
    ... 24 more

Jaime Bravo

unread,
Jun 21, 2011, 1:43:07 PM6/21/11
to ju...@googlegroups.com
usando este "FileGeneratorService#com.xpertal.semessagebroker.generator.beans.FileGenerator"
mismo nombre JNDI global no te funciona?...

Jaime Catalan

unread,
Jun 21, 2011, 1:55:49 PM6/21/11
to ju...@googlegroups.com
Nop, solamente cuando lo ejecuto en forma local.

German Gonzalez-Morris

unread,
Jun 21, 2011, 3:22:02 PM6/21/11
to ju...@googlegroups.com
Has probado con el full weblogic client primero?
Si es un standalone tu programa prueba usando el full client, despues
puedes hacer un jar personalizado con lo que necesitas, a pesar que
eso no se sugiere porque siempre falta alguna clase en el jar final.

Atte.

German Gonzalez-Morris

----

``Antes de imprimir este e-mail piense bien si es realmente necesario''
``Before printing think about the Environment''

2011/6/21 Jaime Catalan <jaime.c...@gmail.com>:

jaime.c...@gmail.com

unread,
Jun 21, 2011, 3:30:25 PM6/21/11
to ju...@googlegroups.com
Que nombre tiene ese jar?
Sent from my BlackBerry® wireless device

German Gonzalez-Morris

unread,
Jun 21, 2011, 3:40:15 PM6/21/11
to ju...@googlegroups.com
Ese lo debes generar, no viene por default en WLS.
generalmente se llama: wlfullclient.jar

mas detalles:
http://download.oracle.com/docs/cd/E21764_01/web.1111/e13717/jarbuilder.htm


Atte.

German Gonzalez-Morris

----

``Antes de imprimir este e-mail piense bien si es realmente necesario''
``Before printing think about the Environment''

2011/6/21 <jaime.c...@gmail.com>:

Jaime Bravo

unread,
Jun 21, 2011, 4:26:25 PM6/21/11
to ju...@googlegroups.com
mmmm parece que te hace falta algun jar par remoting...

Jaime Catalan

unread,
Jun 21, 2011, 5:06:02 PM6/21/11
to ju...@googlegroups.com
Muchas gracias Geermán, funcionó perfecto.

Al resto tambien les doy las gracias.

El 21 de junio de 2011 15:40, German Gonzalez-Morris <german....@gmail.com> escribió:
Reply all
Reply to author
Forward
0 new messages