Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [Java]: Client che richiama EJB

    Ciao a tutti.
    Sto cercando di imparare gli Enterprise Java Bean.
    Ho deployato un'applicazione con un ejb su Bea Weblogic. L'applicazione è composta dai seguenti file:

    Adder.java
    codice:
    package it.ejb.session;
    
    import java.rmi.RemoteException;
    
    import javax.ejb.EJBLocalObject;
    
    
    public interface Adder extends EJBLocalObject {
    	
    	public int add(int a, int b );
    	
    }
    AdderHome.java
    codice:
    package it.ejb.session;
    
    import java.rmi.RemoteException;
    
    import javax.ejb.*;
    
    public interface AdderHome extends EJBLocalHome {
    	
    	Adder create() throws CreateException;
    
    }
    AdderBean.java
    codice:
    package it.ejb.session;
    
    import java.rmi.RemoteException;
    
    import javax.ejb.EJBException;
    import javax.ejb.SessionBean;
    import javax.ejb.SessionContext;
    
    
    
    public class AdderBean implements SessionBean{
    
    
    	
    	public void ejbActivate() throws EJBException, RemoteException {
    		// TODO Auto-generated method stub
    		
    	}
    	
    	public void ejbCreate(){
    		
    	}
    
    	public void ejbPassivate() throws EJBException, RemoteException {
    		// TODO Auto-generated method stub
    		
    	}
    
    	public void ejbRemove() throws EJBException, RemoteException {
    		// TODO Auto-generated method stub
    		
    	}
    
    	public void setSessionContext(SessionContext arg0) throws EJBException,
    			RemoteException {
    		// TODO Auto-generated method stub
    		
    	}
    
    	public int add ( int a, int b){
    		System.out.println("from AdderBean");
    		return a+b;
    	}
    	
    	
    
    }

    ejb-jar.xml
    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <ejb-jar id="ejb-jar_1" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd" version="2.1">
       <description>Example of a session bean</description>
       <display-name>Adder Bean</display-name>
       <enterprise-beans>
          <session>
             <description>Adder bean</description>
             <display-name>MyTimeBeanName</display-name>
             <ejb-name>AdderBean</ejb-name>
             <local-home>it.ejb.session.AdderHome</local-home>
             <local>it.ejb.session.Adder</local>
             <ejb-class>it.ejb.session.AdderBean</ejb-class>
             <session-type>Stateless</session-type>
             <transaction-type>Bean</transaction-type>
          </session>
       </enterprise-beans>
    </ejb-jar>
    weblogic-ejb-jar.xml
    codice:
    <!DOCTYPE weblogic-ejb-jar PUBLIC '-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN' 'http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd'>
    <weblogic-ejb-jar>
        <description>EJB che fa un addizione</description>
        <weblogic-enterprise-bean>
            <ejb-name>AdderBean</ejb-name>
            <stateless-session-descriptor>
                <pool>
                    <max-beans-in-free-pool>10</max-beans-in-free-pool>
                </pool>
            </stateless-session-descriptor>
            <local-jndi-name>AdderBean</local-jndi-name>
        </weblogic-enterprise-bean>
    </weblogic-ejb-jar>
    I due file xml si trovano all'interno della cartella META-INF del jar deployato su weblogic.
    A questo punto quando provo a richiamare un Ejb da un'applcazione Java standard ho questo errore:

    codice:
    javax.naming.CommunicationException [Root exception is java.rmi.UnmarshalException: failed to unmarshal class weblogic.security.acl.internal.AuthenticatedUser; nested exception is: 
    	java.io.StreamCorruptedException: invalid type code: 31]
    	at weblogic.jndi.internal.ExceptionTranslator.toNamingException(ExceptionTranslator.java:74)
    	at weblogic.jndi.internal.ExceptionTranslator.toNamingException(ExceptionTranslator.java:32)
    	at weblogic.jndi.WLInitialContextFactoryDelegate.toNamingException(WLInitialContextFactoryDelegate.java:773)
    	at weblogic.jndi.WLInitialContextFactoryDelegate.pushSubject(WLInitialContextFactoryDelegate.java:673)
    	at weblogic.jndi.WLInitialContextFactoryDelegate.newContext(WLInitialContextFactoryDelegate.java:466)
    	at weblogic.jndi.WLInitialContextFactoryDelegate.getInitialContext(WLInitialContextFactoryDelegate.java:373)
    	at weblogic.jndi.Environment.getContext(Environment.java:307)
    	at weblogic.jndi.Environment.getContext(Environment.java:277)
    	at weblogic.jndi.WLInitialContextFactory.getInitialContext(WLInitialContextFactory.java:117)
    	at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
    	at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
    	at javax.naming.InitialContext.init(Unknown Source)
    	at javax.naming.InitialContext.<init>(Unknown Source)
    	at it.ejb.session.PorvaEjb.main(PorvaEjb.java:30)
    Caused by: java.rmi.UnmarshalException: failed to unmarshal class weblogic.security.acl.internal.AuthenticatedUser; nested exception is: 
    	java.io.StreamCorruptedException: invalid type code: 31
    	at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:229)
    	at weblogic.rmi.internal.BasicRemoteRef.invoke(BasicRemoteRef.java:224)
    	at weblogic.common.internal.RMIBootServiceImpl_1001_WLStub.authenticate(Unknown Source)
    	at weblogic.security.acl.internal.Security$1.run(Security.java:185)
    	at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
    	at weblogic.security.service.SecurityManager.runAs(Unknown Source)
    	at weblogic.security.acl.internal.Security.authenticate(Security.java:181)
    	at weblogic.jndi.WLInitialContextFactoryDelegate.authenticateRemotely(WLInitialContextFactoryDelegate.java:734)
    	at weblogic.jndi.WLInitialContextFactoryDelegate.pushSubject(WLInitialContextFactoryDelegate.java:667)
    	... 10 more
    Caused by: java.io.StreamCorruptedException: invalid type code: 31
    	at java.io.ObjectInputStream.readObject0(Unknown Source)
    	at java.io.ObjectInputStream.readObject(Unknown Source)
    	at weblogic.utils.io.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:195)
    	at weblogic.rjvm.MsgAbbrevInputStream.readObject(MsgAbbrevInputStream.java:565)
    	at weblogic.utils.io.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:191)
    	at weblogic.rmi.internal.ObjectIO.readObject(ObjectIO.java:62)
    	at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:227)
    l'applciazione client è questa:

    ProvaEjb.java
    codice:
    package it.ejb.session;
    
    import java.io.StreamCorruptedException;
    import java.util.Hashtable;
    import java.util.Properties;
    
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import javax.rmi.PortableRemoteObject;
    
    public class PorvaEjb {
    
    	
    	public static void main(String[] args) {
    		
    		InitialContext ctx = null;
    		
    		try {
    		    Hashtable env = new Hashtable();
    		    env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
    		    env.put(Context.PROVIDER_URL, "t3://localhost:7001");
    		    env.put(Context.SECURITY_PRINCIPAL, "giuseppe");
    		    env.put(Context.SECURITY_CREDENTIALS, "giuseppe");
    		    
    		    
    		    //ctx = new InitialContext();
    		    //ctx.
    		    
    		    ctx = new InitialContext(env);
    
    		}catch (NamingException e) {
    		    e.printStackTrace();
    		}
    		
    		
    		try {
    		    Object obj = ctx.lookup("AdderBean");
    		    
    			if ( obj != null ){
    				AdderHome home = (AdderHome)PortableRemoteObject.narrow(obj, AdderHome.class);
    				Adder adder = home.create();
    				System.out.println(adder.add(2, 5));
    			}
    			
    		    
    		}catch (Exception e) {
    		    e.printStackTrace();
    		}
    		
    		
    		
    		
    	}
    	
    }
    sapreste dirmi qual'è il problema?
    grazie, ciao

  2. #2
    ho risolto l'errore, il problema era nel client. L'ho modificato in questo modo

    ProvaEjb.java
    codice:
    public class ProvaEjb {
    
    	
    	public static void main(String[] args) {
    		
    		InitialContext ctx = null;
    		
    		try {
    //		    Hashtable env = new Hashtable();
    //		    env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
    //		    env.put(Context.PROVIDER_URL, "t3://localhost:7001");
    //		    env.put(Context.SECURITY_PRINCIPAL, "giuseppe");
    //		    env.put(Context.SECURITY_CREDENTIALS, "giuseppe");
    		    
    		    
    		    //ctx = new InitialContext();
    		    //ctx.
    		    
    		    //ctx = new InitialContext(env);
    		    ctx = new InitialContext();
    		    ctx.addToEnvironment(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
    		    ctx.addToEnvironment(Context.PROVIDER_URL, "t3://localhost:7001");
    		    ctx.addToEnvironment(Context.SECURITY_PRINCIPAL, "giuseppe");
    		    ctx.addToEnvironment(Context.SECURITY_CREDENTIALS, "giuseppe");
    		    
    		    
    		    
    		    
    		}catch (NamingException e) {
    		    e.printStackTrace();
    		}
    		
    		
    		try {
    		    Object obj = ctx.lookup("AdderBean");
    		    
    			if ( obj != null ){
    				AdderHome home = (AdderHome)PortableRemoteObject.narrow(obj, AdderHome.class);
    				Adder adder = home.create();
    				System.out.println(adder.add(2, 5));
    			}
    			
    		    
    		}catch (Exception e) {
    		    e.printStackTrace();
    		}
    		
    		
    		
    		
    	}
    	
    }
    adesso però quando faccio girare il client ProvaEjb.java ottengo quest'altro tipo di errore:
    codice:
    javax.naming.NameNotFoundException: Unable to resolve 'AdderBean'. Resolved '' [Root exception is javax.naming.NameNotFoundException: Unable to resolve 'AdderBean'. Resolved '']; remaining name 'AdderBean'
    	at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:221)
    	at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:338)
    	at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:252)
    	at weblogic.jndi.internal.ServerNamingNode_1001_WLStub.lookup(Unknown Source)
    	at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:379)
    	at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:367)
    	at javax.naming.InitialContext.lookup(Unknown Source)
    	at it.ejb.session.ProvaEjb.main(ProvaEjb.java:46)
    Caused by: javax.naming.NameNotFoundException: Unable to resolve 'AdderBean'. Resolved ''
    	at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1138)
    	at weblogic.jndi.internal.BasicNamingNode.lookupHere(BasicNamingNode.java:251)
    	at weblogic.jndi.internal.ServerNamingNode.lookupHere(ServerNamingNode.java:171)
    	at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:205)
    	at weblogic.jndi.internal.RootNamingNode_WLSkel.invoke(Unknown Source)
    	at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:589)
    	at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:224)
    	at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:479)
    	at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
    	at weblogic.security.service.SecurityManager.runAs(Unknown Source)
    	at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:475)
    	at weblogic.rmi.internal.BasicServerRef.access$300(BasicServerRef.java:59)
    	at weblogic.rmi.internal.BasicServerRef$BasicExecuteRequest.run(BasicServerRef.java:1016)
    	at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)
    	at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)

    da cosa dipende secondo voi? I file di configurazione dovrebbero essere giusti.
    ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.