Hi.
I put
name="srvOracleDS"
location="srvOracleDS"
xa-location="srvOracleXADS" in datasource.xml
and
jndi-datasource-name="srvOracleDS" in repository-database.xml
It looks like going well.
Thanks very much.
When you talk about myMethod() I suppose you refer to a method of the
ejb.
I would like to open the broker in the Dao.
I'm trying doing something like that:
public void ejbCreate() {
}
public myEjbMethod(){
call dao1.methodh_a()
call dao2.methodh_b()
call dao3.methodh_c()
if something wrong rollback all dao operations
}
And in Daox
public method_a(){
InitialContext context = null;
try {
context = new InitialContext();
OjbPbFactory factory=
(OjbPbFactory)context.lookup("PBFactory");
}
OjbPbFactory factory=
(OjbPbFactory)context.lookup("PBFactory");
PersistenceBroker broker = factory.getInstance().....
try
{
// do work here
.....
}finally
{
if(broker != null) broker.close();
}
}
what do you think about?
-----Mensaje original-----
De: Armin Waibel [mailto:[EMAIL PROTECTED]
Enviado el: s�bado, 02 de octubre de 2004 15:59
Para: OJB Users List
Asunto: Re: Ejb calling DAO
Hi again,
I would advice to use 'jdbc/srvOracleCoreDS' as jndi-datasource-name in
OJB - long shot ;-)
Does this cause same error?
[off-topic]
Further on in ejbCreate() in your bean I would only lookup the
OjbPbFactory instance and keep it as inst var in bean. Then on each
method call lookup a PB instance, do your work and close the instance at
end of method.
private OjbPbFactory factory;
public void ejbCreate() {
InitialContext context = null;
try {
context = new InitialContext();
OjbPbFactory factory=
(OjbPbFactory)context.lookup("PBFactory");
}
public void myMethod()
{
// or use a helper method in base bean class to get PB
PersistenceBroker broker = factory.getInstance().....
try
{
// do work here
.....
}finally
{
if(broker != null) broker.close();
}
}
....
regards,
Armin
Alessandro Colantoni wrote:
> Hi Armin
> This is my ejbCreate()
>
> public void ejbCreate() {
> InitialContext context = null;
>
> try {
>
> context = new InitialContext();
>
>
>
> OjbPbFactory ojbFactory=
> (OjbPbFactory)context.lookup("PBFactory");
> PersistenceBroker broker =
> ojbFactory.getInstance().defaultPersistenceBroker();
> }catch(NamingException e){
> //throw new ServletException("Error looking Data Source", e);
> }
>
> }
> Here everythink goes well, but I need this lines in the Dao and not
here
> The object returned by the lookup in an istance of OjbPBStartup.
> Then I do ojbFactory.getInstance() and I get an instance of
> PersistenceBrokerFactorySyncImpl in the dao too.
> The problem is that in the Dao when I call
> pbf.defaultPersistenceBroker(), where pbf is the istance of
> PersistenceBrokerFactorySyncImpl, I got the error.
> The mistery is why it work correctly in ejbCreate and not in the Dao.
> I read yet the lines you told, and I thought that the problem coud be
in
> the datasource definition:
> I send it to you if you can have a look ;-)
>
> <data-source
> class="com.evermind.sql.DriverManagerDataSource"
> name="srvOracleDS"
> location="jdbc/srvOracleCoreDS"
> xa-location="jdbc/xa/srvOracleXADS"
> ejb-location="jdbc/srvOracleDS"
> connection-driver="oracle.jdbc.driver.OracleDriver"
> username="srv_des"
> password="srv_des"
> url="jdbc:oracle:thin:@192.168.80.212:1521:ORA92"
> inactivity-timeout="30"
> />
>
> I'm not very esperienced with this and I copied it from an example.
> I don't Know exactly what do location, xa-location, and ejb-location.
> My repository-database.xml is
>
> <jdbc-connection-descriptor jcd-alias="default"
> default-connection="true"
> platform="Oracle" jdbc-level="2.0"
>
jndi-datasource-name="jdbc/xa/srvOracleXADS"
> protocol="jdbc"
> username="srv_des"
> password="srv_des" eager-release="false"
> batch-mode="false" useAutoCommit="0"
> ignoreAutoCommitExceptions="false">
>
> Have I done all right (well, no, of course)
> Thank for the help
> -----Mensaje original-----
> De: Armin Waibel [mailto:[EMAIL PROTECTED]
> Enviado el: s�bado, 02 de octubre de 2004 15:00
> Para: OJB Users List
> Asunto: Re: Ejb calling DAO
>
> Hi Alessandro,
>
> the code causing the CCE is
>
> > 04/10/02 14:11:42 at
> >
>
org.apache.ojb.broker.accesslayer.ConnectionFactoryAbstractImpl.newConne
> > ctionFromDataSource(C
> > onnectionFactoryAbstractImpl.java:195)
>
> in this method OJB does:
> <snip>
> InitialContext ic = new InitialContext();
> ds = (DataSource) ic.lookup(jcd.getDatasourceName()); <===!!!
> </snip>
>
> So it seems that the object returned by the lookup is not instance of
> DataSource or it's a side-effect of another problem.
>
> Could you describe your test more detailed?
> You lookup OjbPbFactory in ejbCreate method?
> And the DAO use an session bean or does directly access OJB via JNDI
> lookup?
>
> regards,
> Armin
>
>
> Alessandro Colantoni wrote:
>
>
>>Hi all.
>>I have a transaction on my ejb method that call various DAOs.
>>DAOs access dB through OJB
>>I'm working with OC4J.
>>I've done a start up class similar to that in the documentation
>
> adapted
>
>>to OC4J
>>
>>
>>package com.brujulatelecom.srv.startup;
>>import com.evermind.server.OC4JStartup;
>>import java.io.Serializable;
>>import javax.naming.*;
>>import java.util.*;
>>import org.apache.ojb.broker.PersistenceBroker;
>>import org.apache.ojb.broker.core.PersistenceBrokerFactoryFactory;
>>import org.apache.ojb.broker.core.PersistenceBrokerFactoryIF;
>>
>>
>>
>>/**
>> * This is an example of a Startup class which can be registered with
>> * OC4J and which will be instantiated and called when the container
>> * is started.
>> *
>> * Implements the <code>com.evermind.server.OC4JStartup</code>
>>interface.
>> */
>>public class OjbPbStartup implements OC4JStartup,OjbPbFactory,
>>Serializable{
>> private String defaultPropsFile =
>>"../srv/aplicacion/ejbs/OJB.properties";
>>
>> public PersistenceBrokerFactoryIF getInstance(){
>> return PersistenceBrokerFactoryFactory.instance();
>> }
>>
>>
>>
>>
>> /**
>> * This method is called before any applications have been
>
> deployed
>
>> *
>> * @param args - contains the parameters that have been specified
>>for
>> * this operation in the OC4J configuration file.
>> * @param context - the JNDI context for the server.
>> * @return An arbitrary string value
>> */
>> public String preDeploy(Hashtable args, Context context) throws
>>Exception {
>> return "";
>> }
>> private void bind(Context ctx, String name, Object val) throws
>>NamingException{
>> Name n;
>> for(n = ctx.getNameParser("").parse(name); n.size() > 1; n =
>>n.getSuffix(1)){
>> String ctxName = n.get(0);
>> try{
>> ctx = (Context) ctx.lookup(ctxName);
>> }
>> catch(NameNotFoundException namenotfoundexception){
>> ctx = ctx.createSubcontext(ctxName);
>> }
>> }
>> ctx.bind(n.get(0), val);
>> }
>>
>>
>> /**
>> * This method is called after any applications have been
>
> deployed.
>
>> *
>> * @param args - contains the parameters that have been specified
>>for
>> * this operation in the OC4J configuration file.
>> * @param context - the JNDI context for the server.
>> * @return An arbitrary string value
>> */
>> public String postDeploy(Hashtable args, Context context) throws
>>Exception {
>> try{
>> String jndiName = (String) args.get("jndiname");
>> if(jndiName == null || jndiName.length() == 0)
>> jndiName = OjbPbFactory.DEFAULT_JNDI_NAME;
>>
>> String propsFile = (String) args.get("propsfile");
>> if(propsFile == null || propsFile.length() == 0)
>> {
>> System.setProperty("OJB.properties",
>
> defaultPropsFile);
>
>> }
>> else
>> {
>> System.setProperty("OJB.properties", propsFile);
>> }
>>
>> //InitialContext ctx = new InitialContext();
>> bind(context, jndiName, this);
>>
>> // return a message for logging
>> return "Bound OJB PersistenceBrokerFactoryIF to " +
>>jndiName;
>> }
>> catch(Exception e){
>> e.printStackTrace();
>> // return a message for logging
>> return "Startup Class error: impossible to bind OJB PB
>>factory";
>> }
>> //System.out.println(getClass().getName() + " postDeploy
>
> method
>
>>called");
>> //return null;
>>
>> }
>>
>>}
>>
>>
>>package com.brujulatelecom.srv.startup;
>>
>>import org.apache.ojb.broker.PersistenceBroker;
>>import org.apache.ojb.broker.core.PersistenceBrokerFactoryIF;
>>
>>public interface OjbPbFactory{
>> public static String DEFAULT_JNDI_NAME = "PBFactory";
>> public PersistenceBrokerFactoryIF getInstance();
>>}
>>
>>
>>If I do :
>>
>>OjbPbFactory ojbFactory= (OjbPbFactory)context.lookup("PBFactory");
>>PersistenceBroker broker =
>>ojbFactory.getInstance().defaultPersistenceBroker();
>>
>>In the ejbCreate() I don't have problems.
>>But If I put it in the Dao called by ejb I get the following error:
>>04/10/02 14:11:42
>>[org.apache.ojb.broker.core.PersistenceBrokerFactorySyncImpl] ERROR:
>>Unexpected exception when start i
>>ntern pb-tx
>>04/10/02 14:11:42 null
>>04/10/02 14:11:42 java.lang.ClassCastException
>>04/10/02 14:11:42 at
>>
>
>
org.apache.ojb.broker.accesslayer.ConnectionFactoryAbstractImpl.newConne
>
>>ctionFromDataSource(C
>>onnectionFactoryAbstractImpl.java:195)
>>04/10/02 14:11:42 at
>>
>
>
org.apache.ojb.broker.accesslayer.ConnectionFactoryAbstractImpl.lookupCo
>
>>nnection(ConnectionFa
>>ctoryAbstractImpl.java:112)
>>04/10/02 14:11:42 at
>>
>
>
org.apache.ojb.broker.accesslayer.ConnectionFactoryManagedImpl.lookupCon
>
>>nection(ConnectionFac
>>toryManagedImpl.java:33)
>>04/10/02 14:11:42 at
>>
>
>
org.apache.ojb.broker.accesslayer.ConnectionManagerImpl.getConnection(Co
>
>>nnectionManagerImpl.j
>>ava:105)
>>04/10/02 14:11:42 at
>>
>
>
org.apache.ojb.broker.accesslayer.ConnectionManagerImpl.localBegin(Conne
>
>>ctionManagerImpl.java
>>:147)
>>04/10/02 14:11:42 at
>>
>
>
org.apache.ojb.broker.core.PersistenceBrokerImpl.beginTransaction(Persis
>
>>tenceBrokerImpl.java:
>>394)
>>04/10/02 14:11:42 at
>>
>
>
org.apache.ojb.broker.core.DelegatingPersistenceBroker.beginTransaction(
>
>>DelegatingPersistence
>>Broker.java:138)
>>04/10/02 14:11:42 at
>>
>
>
org.apache.ojb.broker.core.PersistenceBrokerFactorySyncImpl$PersistenceB
>
>>rokerSyncImpl.internB
>>egin(PersistenceBrokerFactorySyncImpl.java:280)
>>04/10/02 14:11:42 at
>>
>
>
org.apache.ojb.broker.core.PersistenceBrokerFactorySyncImpl$PersistenceB
>
>>rokerSyncImpl.access$
>>000(PersistenceBrokerFactorySyncImpl.java:225)
>>04/10/02 14:11:42 at
>>
>
>
org.apache.ojb.broker.core.PersistenceBrokerFactorySyncImpl.wrapRequeste
>
>>dBrokerInstance(Persi
>>stenceBrokerFactorySyncImpl.java:153)
>>04/10/02 14:11:42 at
>>
>
>
org.apache.ojb.broker.core.PersistenceBrokerFactoryDefaultImpl.createPer
>
>>sistenceBroker(Persis
>>tenceBrokerFactoryDefaultImpl.java:105)
>>04/10/02 14:11:42 at
>>
>
>
org.apache.ojb.broker.core.PersistenceBrokerFactorySyncImpl.createPersis
>
>>tenceBroker(Persisten
>>ceBrokerFactorySyncImpl.java:116)
>>04/10/02 14:11:42 at
>>
>
>
org.apache.ojb.broker.core.PersistenceBrokerFactoryBaseImpl.defaultPersi
>
>>stenceBroker(Persiste
>>nceBrokerFactoryBaseImpl.java:158)
>>
>>and the error on my code is on the line PersistenceBroker broker =
>>ojbFactory.getInstance().defaultPersistenceBroker();
>>I yet got sure that the problem is in . defaultPersistenceBroker()
>
> and
>
>>not in .getIstance.
>>In other word I get the PersistenceBrokerFactoryIF rightly, but I fail
>>when trying to get the PersistenceBroker
>>
>>
>> Can AnyOne help me?
>>What I wnt to do is to have a rollback on all Dao if anyone fails.
>>Thanks in advance.
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]