Problem z INSERT w EJB 3.0

0

Witam, eobie projekt z wykorzystaniem EJB 3.0 w Eclipse...Oto czesc kodu klienta wywoluacego metode:

public static void main(String[] args) {
		 try 
		 {
			Properties p1 = new Properties();
			p1.put("org.omg.CORBA.ORBInitialHost", "localhost");
			p1.put("org.omg.CORBA.ORBInitialPort", "3700");
			InitialContext ic = new InitialContext(p1); 			
			ZiarnoRemote dao = (ZiarnoRemote) ic.lookup("Ziarno");
			System.out.println("1");
			Wydzial wydzial=new Wydzial();
			System.out.println("2");
			wydzial.setIdWydzialu(4);
			System.out.println("3");
			wydzial.setNazwa("Wydzial Flashu");
			dao.dodaj_wydzial(wydzial);
			System.out.println("4");
		 }
		 catch (Exception e) 
		 {
			 e.printStackTrace();
		 }
	}

}

A tu kod Ziarna:

@Stateless(mappedName = "Ziarno")
@TransactionManagement(TransactionManagementType.BEAN)
public class Ziarno implements ZiarnoRemote {
	@PersistenceContext(unitName="Ankieta") 
	private EntityManager en;
	

    public Ziarno() {
    }
    
    public String metoda() {
		try 
		{
			String toReturn = en.find(Wykladowca.class, new Long(1)).getNazwiskoWykl();
			return toReturn;
		} 
		catch (Exception e) 
		{
			e.printStackTrace();
			return "nieOk";
		}
}
    
	@SuppressWarnings("unchecked")
	    
    public void dodaj_wydzial(Wydzial wydzial)
    {
    	System.out.println("w metodzie");
    	en.persist(wydzial);
    }
	
	

}

A tu błąd jaki mi wyskakuje:

1
2
3
javax.ejb.EJBException: nested exception is: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
	java.rmi.RemoteException: null; nested exception is: 
	javax.persistence.TransactionRequiredException
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
	java.rmi.RemoteException: null; nested exception is: 
	javax.persistence.TransactionRequiredException
	at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.mapSystemException(Util.java:243)
	at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:205)
	at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:152)
	at com.sun.corba.ee.impl.presentation.rmi.bcel.BCELStubBase.invoke(BCELStubBase.java:225)
	at session.__ZiarnoRemote_Remote_DynamicStub.dodaj_wydzial(session/__ZiarnoRemote_Remote_DynamicStub.java)
	at session._ZiarnoRemote_Wrapper.dodaj_wydzial(session/_ZiarnoRemote_Wrapper.java)
	at client.Klient.main(Klient.java:33)
Caused by: java.rmi.RemoteException: null; nested exception is: 
	javax.persistence.TransactionRequiredException
	at com.sun.enterprise.iiop.POAProtocolMgr.mapException(POAProtocolMgr.java:251)
	at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1411)
	at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1316)
	at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:210)
	at com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:117)
	at $Proxy48.dodaj_wydzial(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:154)
	at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:687)
	at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:227)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1846)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1706)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:1088)
	at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:223)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:806)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:563)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2567)
	at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:555)
Caused by: javax.persistence.TransactionRequiredException
	at com.sun.enterprise.util.EntityManagerWrapper.doTxRequiredCheck(EntityManagerWrapper.java:236)
	at com.sun.enterprise.util.EntityManagerWrapper.doTransactionScopedTxCheck(EntityManagerWrapper.java:200)
	at com.sun.enterprise.util.EntityManagerWrapper.persist(EntityManagerWrapper.java:426)
	at session.Ziarno.dodaj_wydzial(Ziarno.java:87)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.sun.enterprise.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1011)
	at com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:175)
	at com.sun.ejb.containers.BaseContainer.invokeTargetBeanMethod(BaseContainer.java:2920)
	at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4011)
	at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:203)
	... 17 more
javax.ejb.EJBException: nested exception is: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
	java.rmi.RemoteException: null; nested exception is: 
	javax.persistence.TransactionRequiredException
	at session._ZiarnoRemote_Wrapper.dodaj_wydzial(session/_ZiarnoRemote_Wrapper.java)
	at client.Klient.main(Klient.java:33)

Za Chiny nie moge rozkminic gdzie jest blad...POMOCY!

0

Musisz " ubrać " metodę persist() w tranaskcję, a zasadzie dodajWydział.

więcej tu:
http://weblogs.java.net/blog/2005/12/05/entitymanagerpersist-throws-transactionrequiredexception-servlet

0

Niech kontener zarządza transakcją.
Zamień na TransactionManagementType.BEAN na TransactionManagementType.CONTAINER.

0

Dzięki za Wasze cenne rady - teraz działa!!!

1 użytkowników online, w tym zalogowanych: 0, gości: 1