You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by Charles Moulliard <cm...@gmail.com> on 2011/02/08 12:47:37 UTC

openjpa - jndi issue with xbean Spring

Hi,

I get the following error 

Caused by: javax.naming.NoInitialContextException: Need to specify class
name in environment or system property, or as an applet parameter, or in an
application resource file:  java.naming.factory.initial
	at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
	at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
	at
javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
	at javax.naming.InitialContext.lookup(InitialContext.java:392)
	at
org.apache.openjpa.ee.JNDIManagedRuntime.getTransactionManager(JNDIManagedRuntime.java:60)

when running openjpa on Apache Karaf (OSGI server) where the jndi context
has been created using the following spring xbean definition and exported as
a osgi service

    <bean id="jndi"
		class="org.apache.xbean.spring.jndi.SpringInitialContextFactory"
		factory-method="makeInitialContext">
                <entry key="java:/TransactionManager" value-ref="txManager"
/>
			</map>
		</property>
	</bean>

    <osgi:service ref="jndi" interface="javax.naming.Context"/>

Question : is there a trick which allow openjpa to find the transaction
manager ?

        <properties>
            <property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema(SchemaAction='add,deleteTableContents')"/>
            <!-- <property name="openjpa.Log" value="log4j"/> -->
            <property name="openjpa.Log" value="log4j" />
            <property name="openjpa.TransactionMode" value="managed"/>
            <property name="openjpa.ManagedRuntime"
value="jndi(TransactionManagerName=java:/TransactionManager)"/>
        </properties>

Here is my spring config :

    <!-- Setup Local Container for JPA and EntityManager -->
    <bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="reportIncident"/>
        <property name="jpaVendorAdapter" ref="jpaAdapter"/>
        <property name="dataSource">
            <osgi:reference interface="javax.sql.DataSource"/>
        </property>
    </bean>


    <!-- Open JPA dapter -->
    <bean id="jpaAdapter"
          class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter">
        <property name="databasePlatform" value="${databasePlatform}"/>
        <property name="showSql" value="${showSql}"/>
        <property name="database" value="${database}"/>
    </bean>
    
    <!-- JTA TransactionManager -->
    <bean id="txManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
        <property name="transactionManager">
            <osgi:reference
interface="javax.transaction.TransactionManager"/>
        </property>
    </bean>

Regards,

Charles Moulliard
Apache committer Karaf, Camel & ServiceMix
-- 
View this message in context: http://openjpa.208410.n2.nabble.com/openjpa-jndi-issue-with-xbean-Spring-tp6003669p6003669.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Re: openjpa - jndi issue with xbean Spring

Posted by Charles Moulliard <cm...@gmail.com>.
Hi Michael,

Many thanks for your help. After my post, I have found the ticket 1524
and implements the solution proposed :
<property name="openjpa.ManagedRuntime"
value="jndi(TransactionManagerName=aries:services/javax.transaction.TransactionManager)"/>

That works fine.

Regards,

Charles Moulliard

Sr. Principal Solution Architect - FuseSource
Apache Committer

Blog : http://cmoulliard.blogspot.com
Twitter : http://twitter.com/cmoulliard
Linkedin : http://www.linkedin.com/in/charlesmoulliard
Skype: cmoulliard



On Tue, Feb 8, 2011 at 4:21 PM, Michael Dick [via OpenJPA]
<ml...@n2.nabble.com> wrote:
> The JNDIManagedRuntime creates a new InitialContext, and does a lookup of
> the TransactionManagerName  you provided. It assumes that the environment
> for the IC is ready to use with no modification on our part.
>
> So if the naming space has been initialized prior to the call to
> getTransactionManager() it should work. Maybe that's a bad assumption for
> OSGi environments.
>
> We've done some work to integrate with Aries:
> OPENJPA-1524<https://issues.apache.org/jira/browse/OPENJPA-1524>.
> There's also some work underway to make this support more generic:
> OPENJPA-1593 <https://issues.apache.org/jira/browse/OPENJPA-1593> (which I
> need to get back to).
>
> Let me know if 1593 will help you. I'll take another look at the patch and
> see if we can get that into a release.
>
> -mike
>
> On Tue, Feb 8, 2011 at 5:47 AM, Charles Moulliard <[hidden email]>wrote:
>
>>
>> Hi,
>>
>> I get the following error
>>
>> Caused by: javax.naming.NoInitialContextException: Need to specify class
>> name in environment or system property, or as an applet parameter, or in
>> an
>> application resource file:  java.naming.factory.initial
>>        at
>> javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
>>        at
>> javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
>>        at
>>
>> javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
>>        at javax.naming.InitialContext.lookup(InitialContext.java:392)
>>        at
>>
>>
>> org.apache.openjpa.ee.JNDIManagedRuntime.getTransactionManager(JNDIManagedRuntime.java:60)
>>
>> when running openjpa on Apache Karaf (OSGI server) where the jndi context
>> has been created using the following spring xbean definition and exported
>> as
>> a osgi service
>>
>>    <bean id="jndi"
>>
>>  class="org.apache.xbean.spring.jndi.SpringInitialContextFactory"
>>                factory-method="makeInitialContext">
>>                <entry key="java:/TransactionManager" value-ref="txManager"
>> />
>>                        </map>
>>                </property>
>>        </bean>
>>
>>    <osgi:service ref="jndi" interface="javax.naming.Context"/>
>>
>> Question : is there a trick which allow openjpa to find the transaction
>> manager ?
>>
>>        <properties>
>>            <property name="openjpa.jdbc.SynchronizeMappings"
>> value="buildSchema(SchemaAction='add,deleteTableContents')"/>
>>            <!-- <property name="openjpa.Log" value="log4j"/> -->
>>            <property name="openjpa.Log" value="log4j" />
>>            <property name="openjpa.TransactionMode" value="managed"/>
>>            <property name="openjpa.ManagedRuntime"
>> value="jndi(TransactionManagerName=java:/TransactionManager)"/>
>>        </properties>
>>
>> Here is my spring config :
>>
>>    <!-- Setup Local Container for JPA and EntityManager -->
>>    <bean id="entityManagerFactory"
>>
>> class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
>>        <property name="persistenceUnitName" value="reportIncident"/>
>>        <property name="jpaVendorAdapter" ref="jpaAdapter"/>
>>        <property name="dataSource">
>>            <osgi:reference interface="javax.sql.DataSource"/>
>>        </property>
>>    </bean>
>>
>>
>>    <!-- Open JPA dapter -->
>>    <bean id="jpaAdapter"
>>          class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter">
>>        <property name="databasePlatform" value="${databasePlatform}"/>
>>        <property name="showSql" value="${showSql}"/>
>>        <property name="database" value="${database}"/>
>>    </bean>
>>
>>    <!-- JTA TransactionManager -->
>>    <bean id="txManager"
>> class="org.springframework.transaction.jta.JtaTransactionManager">
>>        <property name="transactionManager">
>>            <osgi:reference
>> interface="javax.transaction.TransactionManager"/>
>>        </property>
>>    </bean>
>>
>> Regards,
>>
>> Charles Moulliard
>> Apache committer Karaf, Camel & ServiceMix
>> --
>> View this message in context:
>>
>> http://openjpa.208410.n2.nabble.com/openjpa-jndi-issue-with-xbean-Spring-tp6003669p6003669.html
>> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>>
>
>
> ________________________________
> If you reply to this email, your message will be added to the discussion
> below:
> http://openjpa.208410.n2.nabble.com/openjpa-jndi-issue-with-xbean-Spring-tp6003669p6004308.html
> To unsubscribe from openjpa - jndi issue with xbean Spring, click here.

-- 
View this message in context: http://openjpa.208410.n2.nabble.com/openjpa-jndi-issue-with-xbean-Spring-tp6003669p6008407.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Re: openjpa - jndi issue with xbean Spring

Posted by Michael Dick <mi...@gmail.com>.
The JNDIManagedRuntime creates a new InitialContext, and does a lookup of
the TransactionManagerName  you provided. It assumes that the environment
for the IC is ready to use with no modification on our part.

So if the naming space has been initialized prior to the call to
getTransactionManager() it should work. Maybe that's a bad assumption for
OSGi environments.

We've done some work to integrate with Aries:
OPENJPA-1524<https://issues.apache.org/jira/browse/OPENJPA-1524>.
There's also some work underway to make this support more generic:
OPENJPA-1593 <https://issues.apache.org/jira/browse/OPENJPA-1593> (which I
need to get back to).

Let me know if 1593 will help you. I'll take another look at the patch and
see if we can get that into a release.

-mike

On Tue, Feb 8, 2011 at 5:47 AM, Charles Moulliard <cm...@gmail.com>wrote:

>
> Hi,
>
> I get the following error
>
> Caused by: javax.naming.NoInitialContextException: Need to specify class
> name in environment or system property, or as an applet parameter, or in an
> application resource file:  java.naming.factory.initial
>        at
> javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
>        at
> javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
>        at
> javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
>        at javax.naming.InitialContext.lookup(InitialContext.java:392)
>        at
>
> org.apache.openjpa.ee.JNDIManagedRuntime.getTransactionManager(JNDIManagedRuntime.java:60)
>
> when running openjpa on Apache Karaf (OSGI server) where the jndi context
> has been created using the following spring xbean definition and exported
> as
> a osgi service
>
>    <bean id="jndi"
>
>  class="org.apache.xbean.spring.jndi.SpringInitialContextFactory"
>                factory-method="makeInitialContext">
>                <entry key="java:/TransactionManager" value-ref="txManager"
> />
>                        </map>
>                </property>
>        </bean>
>
>    <osgi:service ref="jndi" interface="javax.naming.Context"/>
>
> Question : is there a trick which allow openjpa to find the transaction
> manager ?
>
>        <properties>
>            <property name="openjpa.jdbc.SynchronizeMappings"
> value="buildSchema(SchemaAction='add,deleteTableContents')"/>
>            <!-- <property name="openjpa.Log" value="log4j"/> -->
>            <property name="openjpa.Log" value="log4j" />
>            <property name="openjpa.TransactionMode" value="managed"/>
>            <property name="openjpa.ManagedRuntime"
> value="jndi(TransactionManagerName=java:/TransactionManager)"/>
>        </properties>
>
> Here is my spring config :
>
>    <!-- Setup Local Container for JPA and EntityManager -->
>    <bean id="entityManagerFactory"
> class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
>        <property name="persistenceUnitName" value="reportIncident"/>
>        <property name="jpaVendorAdapter" ref="jpaAdapter"/>
>        <property name="dataSource">
>            <osgi:reference interface="javax.sql.DataSource"/>
>        </property>
>    </bean>
>
>
>    <!-- Open JPA dapter -->
>    <bean id="jpaAdapter"
>          class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter">
>        <property name="databasePlatform" value="${databasePlatform}"/>
>        <property name="showSql" value="${showSql}"/>
>        <property name="database" value="${database}"/>
>    </bean>
>
>    <!-- JTA TransactionManager -->
>    <bean id="txManager"
> class="org.springframework.transaction.jta.JtaTransactionManager">
>        <property name="transactionManager">
>            <osgi:reference
> interface="javax.transaction.TransactionManager"/>
>        </property>
>    </bean>
>
> Regards,
>
> Charles Moulliard
> Apache committer Karaf, Camel & ServiceMix
> --
> View this message in context:
> http://openjpa.208410.n2.nabble.com/openjpa-jndi-issue-with-xbean-Spring-tp6003669p6003669.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>